Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.039 c
1-1079013992
Thick
2004-03-11 17:06
2004.03.28
Компонент в RichEdit


3-1077783340
Mamed
2004-02-26 11:15
2004.03.28
SQL Transaction(SQlServer 2000)


14-1078214953
_none_
2004-03-02 11:09
2004.03.28
високосный год?


11-1057079896
mox
2003-07-01 21:18
2004.03.28
Timer


1-1078829710
zendor
2004-03-09 13:55
2004.03.28
Debugging in Delphi8





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский