前提・実現したいこと
windows7のタスクマネージャーを起動し、アプリケーションのタブを選択した時にタスクの欄に表示されているウィンドウ名と同じウィンドウのハンドルとタイトル名を取得したいのですがうまくできません。
EnumWindows関数を使ってウィンドウを列挙する方法を試してみたのですがタスクマネージャーに表示されていないものまで表示されてしまいました。
私の環境ではタスクマネージャーに3つ表示されている時に、私のプログラムでは6つ表示されました(program Manager,NECWSET_TB_WINDOW,Windows タスクマネージャー,スタートの4つが表示されていて、自分自身のプログラムは表示されません)
余分に表示されるものをif(lstrcmp(szText,TEXT("スタート"))==0){ return TRUE;} という感じで判定すれば表示しないようにはできますが、これだと自分の作った他のプログラムのタイトルがこれらのタイトル名と同じだった場合にそのプログラムのハンドルまで表示されなくなってしまいます。
どうすればタスクマネージャーに表示されているものと同じものだけを表示させることができますか?
該当のソースコード 表示する項目の判定部分
c
1BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam){ 2LVITEM item; 3TCHAR szText[256];//ウィンドウのキャプションの保存用 4TCHAR szhwnd[256];//ウィンドウハンドル表示用 5TCHAR szClassName[256];//取得したクラス名保存用 6 7wsprintf(szhwnd,TEXT("%X"),hwnd); 8if(!IsWindowVisible(hwnd)) return TRUE; 9GetWindowText(hwnd,szText,256); 10if (szText[0] == 0) return TRUE; 11 GetClassName(hwnd, 12 szClassName, 13 sizeof(szClassName) / sizeof(TCHAR)); 14 15 item.mask = LVIF_TEXT; 16 item.pszText = szhwnd; 17 item.iItem = 0; 18 item.iSubItem = 0; 19 20 ListView_InsertItem((HWND)lParam, &item); 21 22 item.pszText = szClassName; 23 item.iItem = 0; 24 item.iSubItem = 1; 25 ListView_SetItem((HWND)lParam, &item); 26 27 item.pszText = szText; 28 item.iItem = 0; 29 item.iSubItem = 2; 30 ListView_SetItem((HWND)lParam, &item); 31 32 return TRUE; 33}
補足情報(FW/ツールのバージョンなど)
Microsoft Visual C++ 2010 Express C言語
WIN32 ユニコードビルド Windows7

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/20 04:12
2019/04/20 04:52 編集
2019/04/20 05:41
2019/04/20 06:15
2019/04/20 08:02
2019/04/21 13:43