Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Показ главного окна запущенного приложения   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.057 c
6-1074236639
Vorobyev Sergey
2004-01-16 10:03
2004.03.28
Доступ к папке на Win2000 из Win98 под другим пользователем?


7-1072548423
Morfey
2003-12-27 21:07
2004.03.28
dll


14-1078218503
Cobalt
2004-03-02 12:08
2004.03.28
Интересный проект - неинтересный проект


1-1077871975
Гарик
2004-02-27 11:52
2004.03.28
Как програмно из Delphi 7 изменить свойство компонента в Rave R.


8-1069350679
aleksvz
2003-11-20 20:51
2004.03.28
MIDI