Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Вниз
Показ главного окна запущенного приложения Найти похожие ветки
← →
Gilk © (2003-11-17 14:02) [0]С помощью ShellExecuteEx запускаю некоторое приложение.
Необходимо на определенное событие срабатывающее после запуска и переключения на другие программы, показать основное окно этого приложения. ShowWindow требует Handle окна,- а у меня есть Handle процесса.
Заранее спасибо.
← →
Digitman © (2003-11-17 14:22) [1]если известны имя класса окна и/или имя самого окна, то хэндл окна ищется вызовом ф-ции FindWindow[Ex]
← →
Gilk © (2003-11-17 14:26) [2]Есть только Handle process"a и параметы получаемые через ShellExecuteEx
← →
Digitman © (2003-11-17 15:25) [3]открывай утилиты SPYXX или WinSight, локализуй искомое окно - будешь знать параметры ф-ции FindWindow
← →
Gilk © (2003-11-17 15:36) [4]Заранее параметры окна не знаю т.к. запускаются произвольные приложения
← →
Digitman © (2003-11-17 15:44) [5]
> т.к. запускаются произвольные приложения
непосильную задачу ставишь себе... практически нерешаемую в общем случае
← →
FireHack © (2003-11-17 15:48) [6]>непосильную задачу ставишь себе...
EnumWindows вполне может помочь
← →
Digitman © (2003-11-17 15:51) [7]
> FireHack
> EnumWindows вполне может помочь
чем же это, интересно ?
← →
FireHack © (2003-11-17 16:29) [8]во-первых, используй CreateProcess, чтобы узнать не только хэндл, но и Id процесса, а затем
function EnumProc(H:HWND; P:LPARAM):BOOL;stdcall;
var
WPID:DWORD;
begin
GetWindowThreadProcessId(H, WPD);
if WPD=PI.dwProcessId then {это окно явл. одним из окон приложения}
end;
← →
Digitman © (2003-11-17 16:32) [9]
> FireHack
> одним из окон приложения
ну и какое из найденных, по-твоему, будет "основным" ? куча кодовых потоков целевого процесса вполне может создать кучу окон !!! из которых только одно - основное в каждый момент времени !!
а критерии озднозначного поиска автору заранее не известны, по условию
← →
FireHack © (2003-11-17 16:42) [10]для ОБЩЕГО случая - это единственный метод. К тому же основного окна может и не быть, а так можно анализировать созданные данным приложением окна.
← →
Gilk © (2003-11-17 18:17) [11]Идея FireHack натолкнула на мысль:
т.к. GetWindowThreadProcessId(H, WPD) при входном Handle"e окна,- в выходном параметре получает Handle процесса - то перебирать все окна пока не найдется окно с нужным Handle"ом процесса
← →
GrayFace © (2004-01-14 02:36) [12]Может быть WinMain поможет.
← →
jack128 © (2004-01-14 09:35) [13]
> Gilk © (17.11.03 18:17) [11
Еще раз - проблема не в том, чтобы найти окна запущенного приложения, в том, что определить какое из этих окон - главное. Так как какое из окон - главное, определяется по субъективному мнению юзера, то В ОБЩЕМ СЛУЧАЕ задача не решаема.
← →
GrayFace © (2004-01-14 20:29) [14]Есть 2 идеи:
1) Поставить hook на создание окон. Первое созданное окно данного процесса должно быть главным.
2) Из всех окон процесса выбрать то, у которого меньше handle. Скорее всего оно создано первым.
← →
GrayFace © (2004-01-14 20:42) [15]Возможно первое окно - это кнопка таскбара, так что можно попробовать брать второе.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c