2017-09-08 15 views
0

グラフィックインタフェースとそのプロセスで開いているウィンドウをすべて見つける必要があります。実際の方法はわかりません。私はいくつかのコードを書いているんだけど、開いているウィンドウを見つけることに成功しました:enumwindowsでインタフェースとプロセスを持つプログラムのリスト

HWND hwnd = GetForegroundWindow(); // get handle of currently active window 
GetWindowText(hwnd, wnd_title, sizeof(wnd_title)); 
cout << "Window with focus: " << wnd_title << endl << endl; 

EnumWindows(EnumWindowsProc, 0); 

EnumWindowsProcは、このように定義されています

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 
{ 
    char class_name[80]; 
    char title[80]; 

    if (IsWindowVisible(hwnd)) { 
     GetClassName(hwnd, class_name, sizeof(class_name)); 
     GetWindowText(hwnd, title, sizeof(title)); 
     cout << "Window title: " << title << endl; 
     cout << "Class name: " << class_name << endl << endl; 
    } 
    return TRUE; 
} 

誰かが私を助けることができますか?

答えて

0

私は、戻り値があるIsWindowVisibleための

が指定したウィンドウの場合、その親ウィンドウ、親の親ウィンドウ、および等々は、WS_VISIBLEスタイルを持っているかどうかをチェックしていないお勧めしますゼロ以外。それ以外の場合は、戻り値はゼロです。
WS_VISIBLEスタイルのウィンドウにスタイルがあるかどうかを返す値が指定されているため、ウィンドウが完全に他のウィンドウで隠されていても0以外の値になる可能性があります。ウィンドウを列挙しながら

あなたは、その特定のHWNDと相関プロセスIDを取得するためにDWORD WINAPI GetWindowThreadProcessId(_In_ HWND hWnd, _Out_opt_ LPDWORD lpdwProcessId);を使用することができます。

例:

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 
{ 
    char class_name[80]; 
    char title[80]; 
    DWORD dwProcessId; 
    GetClassName(hwnd,class_name, sizeof(class_name)); 
    GetWindowText(hwnd,title,sizeof(title)); 

    // get process id based on hwnd 
    GetWindowThreadProcessId(hwnd, &dwProcessId); 

    std::cout << "Window title: "<< title << std::endl; 
    std::cout << "Class name: "<< class_name << std::endl 
    // display process id based on hwnd 
    std::cout << "Process Id: " << dwProcessId << std::endl; 

    return TRUE; 
} 
+0

そして、それはすべてのウィンドウにcorrispondアプリケーションを見つけることが可能でしょうか? – ica

+0

@icaはい、これはあなたが必要とするものを正確に行うはずですが、プロセスIDが重複して表示されないかどうかはわかりません。 –

+0

私は開いているアプリケーションに関連付けられたアイコンを見つける必要があるので、私は窓からそれを見つけることができるかどうかわからない – ica

関連する問題