タスクバー上にある実行アプリの列挙するには?

解決


  2008-09-08 18:37:33  No: 68965

質問させて頂きます。

タスクバー上に表示されている、実行中アプリを列挙したいのですが
EnumWindowsを利用すると表示アプリ以外のも取得するため
うまく行っておりません

タスクバー上に表示されているアプリのみ取得したいのですが
何か良い方法はございませんでしょうか?


夏みかん  2008-09-08 21:21:37  No: 68966

> 何か良い方法はございませんでしょうか?
列挙時に条件を付けて検索すること。

例:
// 判定関数
#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;
}


  2008-09-09 10:16:20  No: 68967

有り難うございます。
おかげ様で何とか解決できそうです(^^


yoh2  2008-09-10 07:49:00  No: 68968

タスクバーに表示される条件って、ダイアログかどうかで判定されるのではなく、
こんな感じだったと思います。
(ファイルオープンダイアログに、後述する WS_EX_APPWINDOW を設定したら
タスクバーに現れました)
漏れがあったらフォローお願いします。

  - 可視(IsWindowVisible()が真)。
  - オーナーウインドウを持たない。
  - 拡張スタイルに以下のいずれも設定されていない。
    * WS_EX_TOOLWINDOW
    * WS_EX_NOACTIVATE

  ! ただし、オーナーウインドウがあったり上記拡張スタイルが設定されていたり
    しても、拡張スタイル WS_EX_APPWINDOW が設定されていればタスクバーに
    表示される。(不可視の場合は表示されない)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加