質問させて頂きます。
タスクバー上に表示されている、実行中アプリを列挙したいのですが
EnumWindowsを利用すると表示アプリ以外のも取得するため
うまく行っておりません
タスクバー上に表示されているアプリのみ取得したいのですが
何か良い方法はございませんでしょうか?
> 何か良い方法はございませんでしょうか?
列挙時に条件を付けて検索すること。
例:
// 判定関数
#define IsWindowOwner(h) (GetWindow(h,GW_OWNER) == NULL)
#define IsWindowDialog(s) (lstrcmp(s,TEXT("#32770")) == 0)
// 列挙関数
BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
TCHAR szTitle[ 1024 ];
TCHAR szClass[ 1024 ];
INT *lpCount = (INT *)lParam;
GetWindowText( hWnd, szTitle, 1024 );
GetClassName( hWnd, szClass, 1024 );
if ( IsWindowVisible(hWnd) ){
if ( IsWindowOwner(hWnd) || IsWindowDialog(lpClass) ){
if ( lpTitle[0] != TEXT('\0') ){
if ( lstrcmp(lpClass,TEXT("Progman")) != 0 ){
*lpCount += 1;
printf( TEXT("%3d: %s\n"), *lpCount, szTitle );
return TRUE;
}
}
}
}
return TRUE;
}
// メイン関数
int main( void )
{
INT nCount = 0;
EnumWindows( EnumWindowsProc, (LPARAM)&nCount );
printf( "\n%d 個のウインドウがあります。\n", nCount );
return 0;
}
有り難うございます。
おかげ様で何とか解決できそうです(^^
タスクバーに表示される条件って、ダイアログかどうかで判定されるのではなく、
こんな感じだったと思います。
(ファイルオープンダイアログに、後述する WS_EX_APPWINDOW を設定したら
タスクバーに現れました)
漏れがあったらフォローお願いします。
- 可視(IsWindowVisible()が真)。
- オーナーウインドウを持たない。
- 拡張スタイルに以下のいずれも設定されていない。
* WS_EX_TOOLWINDOW
* WS_EX_NOACTIVATE
! ただし、オーナーウインドウがあったり上記拡張スタイルが設定されていたり
しても、拡張スタイル WS_EX_APPWINDOW が設定されていればタスクバーに
表示される。(不可視の場合は表示されない)
ツイート | ![]() |