Текущий архив: 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.007 c