タスクバーに表示されているアプリケーションのウィンドウハンドルを取得するには、EnumWindows()関数を使用します。
EnumWindowsは、今実行されている全てのアプリケーションのウィンドウ分、そのトップレベルのウィンドウハンドルを指定されたコールバック関数に渡します。
EnumWindows(EnumWindowsProc, (LPARAM)0);
第一引数のEnumWindowsProcにはコールバック関数のポインタを渡します。
EnumWindowsProcは使用の用途によって、中身をつくってください。
コールバック関数は、staticでなければいけません。
第二引数のLPARAMには、コールバック関数に渡したいものを設定します。
例として、タスクバーに表示されている全てのアプリケーションのキャプションに表示されている文字列を集めるコードを示します。
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
void fnc()
{
CStringArray arr;
// arrにキャプションの文字列の一覧を収集します。
EnumWindows(EnumWindowsProc, (LPARAM)&arr);
}
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
CStringArray* parr = (CStringArray*)lParam;
CString str;
// 可視状態かどうか
if( ( GetWindowLong( hwnd, GWL_STYLE ) & WS_VISIBLE ) ){
// タスクバーに表示されているかどうか
if(! (GetWindowLong(hwnd,GWL_EXSTYLE) & WS_EX_TOOLWINDOW) ){
CWnd* pWnd = CWnd::FromHandle(hwnd);
if(pWnd){
pWnd->GetWindowText(str);
parr->Add(str);
}
}
}
return TRUE;
}
|