| タスクバーに表示されているアプリケーションのウィンドウハンドルを取得するには、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;
}
 |