Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отследить действия над сторонним окном? [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)


Наверх

Титульная страница Поиск, карта сайта Написать письмо