コメント |
@DIV
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam );
static DWORD pid;
static HWND hTarget;
int _tmain(int argc, _TCHAR* argv[])
{
// プログラムを実行して、PID を取得し
// PID から Window ハンドルを取得
int ret;
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory( &pi , sizeof(PROCESS_INFORMATION));
ZeroMemory( &si , sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
// 実行
ret = CreateProcess(
NULL,
argv[1],
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
// ユーザーからの入力を待っている状態になるまで待つ
// ( タイムアウト 60 秒
WaitForInputIdle(pi.hProcess,60000);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
pid = pi.dwProcessId;
// Window ハンドルを Callback で取得
EnumWindows( EnumWindowsProc, 0 );
printf("%u\n", hTarget );
return 0;
}
// *********************************************************
// トップレベル用 ウインドウの列挙
// *********************************************************
BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
DWORD ProcessId;
GetWindowThreadProcessId( hWnd, &ProcessId );
// 実行したプロセス内で表示されるウインドウを選ぶ
if ( pid == ProcessId && IsWindowVisible( hWnd ) ) {
hTarget = hWnd;
return false;
}
return true;
}
@END
|