2010-11-20 21 views
3

"デスクトップで列挙されたすべてのプロセスIDを取得する"という方法を試しましたが、うまくいきませんでした。ウィンドウハンドルのハンドル(c)

ハンドルをウィンドウハンドルに変換する方法がありますか。 プロセスIDを取得し、プロセスによって生成されたすべての子ウィンドウを見つける方法はありますか?

PS:複数のプロセスの問題のためにFindWindowを使いたくありません。

答えて

4

EnumWindows()を呼び出して、画面上のすべての最上位ウィンドウを反復してからGetWindowThreadProcessId()を使用して、どのプロセスに属しているかを調べることができます。例えば

、のようなもの:

BOOL CALLBACK ForEachTopLevelWindow(HWND hwnd, LPARAM lp) 
{ 
    DWORD processId; 
    GetWindowThreadProcessId(hwnd, &processId); 
    if (processId == (DWORD) lp) { 
     // `hwnd` belongs to the target process. 
    } 
    return TRUE; 
} 

VOID LookupProcessWindows(DWORD processId) 
{ 
    EnumWindows(ForEachTopLevelWindow, (LPARAM) processId); 
} 
関連する問題