проблемы EnumWindows
От: Mihajlo  
Дата: 11.01.11 12:04
Оценка:
Господа программисты, подскажите пожалуйста!

Вот код:

struct process_win
{
DWORD process_id; // id процесса
HWND hwnd; // handle окна
};

BOOL CALLBACK EnumThreadWndProc( HWND hWnd, LPARAM lParam )
{
process_win* pw = (process_win*)lParam;
DWORD win_id;
GetWindowThreadProcessId( hWnd, &win_id );
if( win_id == pw->process_id )
{
pw->hwnd = hWnd;
return false;
}
return true;
}

int func()
{
.......
info.lpVerb = "openas";
if( ShellExecuteEx( &info ) )
{
process_win pw;
pw.process_id = GetProcessId( info.hProcess );
EnumWindows( EnumThreadWndProc, (LPARAM)&pw );
SetFocus( pw.hwnd );
}
.......
}

Проблема:
Вызов ShellExecuteEx с lpVerb = "openas" открывает диплог выбора приложения для открытия файла. НО!!! Этот диалог не получает фокус=( И я по своей простоте душевной думал, если я получу id процесса(диалога) и переберу все окна, и сравню id процесса(диалога) с id процесса(окна), и если они совпадут, то будет мне счастье! id процесса(диалога) правильный, я проверял Spy'ем.
Как оказалось ничего подобного=( Этот диалог EnumWindows не нашел=( Возможно потому-что у этого диалога стиль стоит WS_POPUP...
Кто-нибудь с этим сталкивался? Как мне найти этот диалог?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.