Проблема при получении HWND из HPROCESS
От: DmitrIO Украина  
Дата: 06.02.11 21:36
Оценка:
Доброй ночи

Появилась необходимость после создания окна 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);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.