Доброй ночи
Появилась необходимость после создания окна Internet Explorer через вызов ShellExecuteEx находить окно, которое было создано. ShellExecuteEx возвращает HPROCESS. Я пытался перебирать все активные окна и из них получать ссылку на их процесс. После этого сравнивал или ссылка на процесс не такая же как у меня после создания IE. Проблема в том, что условие никогда не выполняется, т.е. ни один из процессов не совпадает с возвращенным из ShellExecuteEx. При этом окно с IE, которое я создал, проходит через цикл. Просто там значение HPROCESS другой. В чем может быть проблема?
Код который я использую:
CString strAddress = _T("iexplore");
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("open");
ShExecInfo.lpFile = strAddress;
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL;
ShExecInfo.hProcess = NULL;
bool bResult = ShellExecuteEx(&ShExecInfo);
WaitForInputIdle(ShExecInfo.hProcess, 2000);
HWND hWmd = GetConsoleHwnd();
HWND h = ::GetTopWindow(0 );
while ( h )
{
DWORD pid;
DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid);
HANDLE hProc = ::OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid);
if ( hProc == ShExecInfo.hProcess )
{
// here = h that you looking for
break;
}
h = ::GetNextWindow( h , GW_HWNDNEXT);
}