![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить действия над сторонним окном? [D7, 2000, XP]
Morgan128 © (2009-10-28 14:28:00)Есть стороннее окно, которое я отслеживаю:
var h: HWND;
begin
h := findwindow(nil, Pchar(key));
Как отследить действия над этим окном? Например мне надо отследить момент, когда это окно сворачивается/разворачивается (SW_HIDE, SW_RESTORE так сказать).
Например: если окно h свернулось -> показать сообщение.
Leonid Troyanovsky (2009-10-28 15:53:00) [1]
> Morgan128 (28.10.09 15:26) [13]
> Просто времени на изучение потоков ща нет, а для альфа версии
> проги сойдет и без потоков.
Да и без слежения сойдет.
Приходи, когда время будет, на изучение хуков.
--
Regards, LVT.
Morgan128 (2009-10-28 15:37:00) [2]Сергей, пардон, советовал не ты :)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1256278384&n=5
Юрий Зотов (2009-10-28 15:37:00) [3]> Morgan128
В Вашей задаче не надо создавать никаких спецпотоков. Над поставить хук на УЖЕ существующий ЧУЖОЙ поток - то, которому принадлежит отслеживаемое окно.
Но, судя по возникшим у Вас вопросам, есть большие сомнения, что это получится. Может быть, все же стоит заняться изучением хотя бы основ Windows? Честное слово, в результате Вы не потеряете время, а, наоборот, сэкономите его.
Сергей М. (2009-10-28 15:32:00) [4]
> времени на изучение потоков ща нет
А чего их изучать ?
Все что нужно - выяснить ID потока, создавшего интересующее окно, и повесить на него упомянутый выше хук ..
Сергей М. (2009-10-28 15:31:00) [5]
> как отследить без потока?
Ну тогда вызывай GetWindowPlacement по таймеру в темпе ошпаренного кота)
Только ведь дурней варианта чем этот не придумать ..
> недавно ты же мне и советовал
Думаешь я помню , про что и в каком контексте ты там вел речь ?
Ссылку бы привел ..
Morgan128 (2009-10-28 15:26:00) [6]Просто времени на изучение потоков ща нет, а для альфа версии проги сойдет и без потоков.
Morgan128 (2009-10-28 15:25:00) [7]Ладно, для простоты пока что: а как отследить без потока?
Morgan128 (2009-10-28 15:24:00) [8]
> Да и причем тут CreateProcess ?
> С какого боку и зачем его ты хотел его приспособить ?
Потому что недавно ты же мне и советовал:
"...CreateProcess из отдельного потока. Запомнить полученные хэндлы нового процесса и его главного потока...."
Сергей М. (2009-10-28 15:22:00) [9]Если ты создал 5 процессов, каждый из которых в каком-либо потоке создал окно с интересующим тебя именем, то разумеется каждым из этих окон будет владеть отдельный поток.
Сергей М. (2009-10-28 15:18:00) [10]
> Если у меня создано 5 окон с помощью CreateProcess, они
> будут в разных потоках?
CreateProcess НЕ создает никаких окон.
Окно создает ф-ция CreateWindow[Ex], которая вызывается в каком либо потоке процесса, созданного вызовом CreateWindow[Ex].
Этот поток и становится владельцем созданного им окна.
GetWindowThreadProcessId возвращает TID и PID потока, создавшего окно.
Сергей М. (2009-10-28 15:14:00) [11]
> CreateProcess создает окно в новом потоке, так?
>
Не так.
Да и причем тут CreateProcess ?
С какого боку и зачем его ты хотел его приспособить ?
Morgan128 (2009-10-28 15:13:00) [12]Если у меня создано 5 окон с помощью CreateProcess, они будут в разных потоках?
Morgan128 (2009-10-28 15:12:00) [13]Сергей, я в потоках полный ноль. CreateProcess создает окно в новом потоке, так?
Сергей М. (2009-10-28 14:52:00) [14]
> без потоков можно как-нить реализовать?
Можно.
Но не нужно.
Сергей М. (2009-10-28 14:52:00) [15]
> потоки надо отдельно создавать?
Зачем их создавать-то ?
Morgan128 (2009-10-28 14:51:00) [16]А без потоков можно как-нить реализовать?
Morgan128 (2009-10-28 14:45:00) [17]Я извиняюсь, а потоки надо отдельно создавать? Они по CreateProcess не создаются?
Сергей М. (2009-10-28 14:40:00) [18]1. Получить ID треда-владельца окна (GetWindowThreadProcessId)
2. Установить хук WH_CBT на этот поток (SetWindowsHookEx)