ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: run_and_win_handle.cpp
名前: lightbox
処理選択
パスワード

件名 run_and_win_handle.cpp
名前 lightbox
コメント
@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