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

Вниз

Как отследить действия над сторонним окном?   Найти похожие ветки 

 
Morgan128   (2009-10-28 14:28) [0]

Есть стороннее окно, которое я отслеживаю:

var h: HWND;
begin
h := findwindow(nil, Pchar(key));

Как отследить действия над этим окном? Например мне надо отследить момент, когда это окно сворачивается/разворачивается (SW_HIDE, SW_RESTORE так сказать).
Например: если окно h свернулось -> показать сообщение.


 
Сергей М. ©   (2009-10-28 14:40) [1]

1. Получить ID треда-владельца окна (GetWindowThreadProcessId)
2. Установить хук WH_CBT  на этот поток (SetWindowsHookEx)


 
Morgan128   (2009-10-28 14:45) [2]

Я извиняюсь, а потоки надо отдельно создавать? Они по CreateProcess не создаются?


 
Morgan128   (2009-10-28 14:51) [3]

А без потоков можно как-нить реализовать?


 
Сергей М. ©   (2009-10-28 14:52) [4]


> потоки надо отдельно создавать?


Зачем их создавать-то ?


 
Сергей М. ©   (2009-10-28 14:52) [5]


> без потоков можно как-нить реализовать?


Можно.
Но не нужно.


 
Morgan128   (2009-10-28 15:12) [6]

Сергей, я в потоках полный ноль. CreateProcess создает окно в новом потоке, так?


 
Morgan128   (2009-10-28 15:13) [7]

Если у меня создано 5 окон с помощью CreateProcess, они будут в разных потоках?


 
Сергей М. ©   (2009-10-28 15:14) [8]


> CreateProcess создает окно в новом потоке, так?
>


Не так.
Да и причем тут CreateProcess ?
С какого боку и зачем его ты хотел его приспособить ?


 
Сергей М. ©   (2009-10-28 15:18) [9]


> Если у меня создано 5 окон с помощью CreateProcess, они
> будут в разных потоках?


CreateProcess НЕ создает никаких окон.
Окно создает ф-ция CreateWindow[Ex], которая вызывается в каком либо потоке процесса, созданного вызовом CreateWindow[Ex].
Этот поток и становится владельцем созданного им окна.
GetWindowThreadProcessId возвращает TID и PID потока, создавшего окно.


 
Сергей М. ©   (2009-10-28 15:22) [10]

Если ты создал 5 процессов, каждый из которых в каком-либо потоке создал окно с интересующим тебя именем, то разумеется каждым из этих окон будет владеть отдельный поток.


 
Morgan128   (2009-10-28 15:24) [11]


> Да и причем тут CreateProcess ?
> С какого боку и зачем его ты хотел его приспособить ?

Потому что недавно ты же мне и советовал:
"...CreateProcess из отдельного потока. Запомнить полученные хэндлы нового процесса и его главного потока...."


 
Morgan128   (2009-10-28 15:25) [12]

Ладно, для простоты пока что: а как отследить без потока?


 
Morgan128   (2009-10-28 15:26) [13]

Просто времени на изучение потоков ща нет, а для альфа версии проги сойдет и без потоков.


 
Сергей М. ©   (2009-10-28 15:31) [14]


> как отследить без потока?


Ну тогда вызывай GetWindowPlacement по таймеру в темпе ошпаренного кота)
Только ведь дурней варианта чем этот не придумать ..


> недавно ты же мне и советовал


Думаешь я помню , про что и в каком контексте ты там вел речь ?
Ссылку бы привел ..


 
Сергей М. ©   (2009-10-28 15:32) [15]


> времени на изучение потоков ща нет


А чего их изучать ?
Все что нужно - выяснить ID потока, создавшего интересующее окно, и повесить на него упомянутый выше хук ..


 
Юрий Зотов ©   (2009-10-28 15:37) [16]

> Morgan128

В Вашей задаче не надо создавать никаких спецпотоков. Над поставить хук на УЖЕ существующий ЧУЖОЙ поток - то, которому принадлежит отслеживаемое окно.

Но, судя по возникшим у Вас вопросам, есть большие сомнения, что это получится. Может быть, все же стоит заняться изучением хотя бы основ Windows? Честное слово, в результате Вы не потеряете время, а, наоборот, сэкономите его.


 
Morgan128   (2009-10-28 15:37) [17]

Сергей, пардон, советовал не ты :)
http://delphimaster.net/view/4-1256278384/


 
Leonid Troyanovsky ©   (2009-10-28 15:53) [18]


> Morgan128   (28.10.09 15:26) [13]

> Просто времени на изучение потоков ща нет, а для альфа версии
> проги сойдет и без потоков.

Да и без слежения сойдет.
Приходи, когда время будет, на изучение хуков.

--
Regards, LVT.



Страницы: 1 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.013 c
2-1256729336
Morgan128
2009-10-28 14:28
2009.12.13
Как отследить действия над сторонним окном?


4-1225268964
XshStasX
2008-10-29 11:29
2009.12.13
интересний результат с ловушкой на WH_SHELL


3-1231324322
Palladin
2009-01-07 13:32
2009.12.13
Параметры ADO и условие like


15-1255593046
картман
2009-10-15 11:50
2009.12.13
Букварь по теорверу


2-1256283325
Sergey2
2009-10-23 11:35
2009.12.13
insert ряд значений