Хочу в хуке поймать смену активного приложения, т.е. не смену окна фокуса, а именно приложения, и что-то никак не пойму какое именно сообщение нужно отлавливать?
Кто-нибудь делал что-то подобное?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
10-07-2010 10:15
Ставите хук на WH_CBT и отрабатываете HCBT_ACTIVATE.
как поймать активное окно, и как именно определить его принадлежность к процессу
var
wnd: HWND;
dwProcessID: Cardinal;
begin
wnd:=GetForegroundWindow;
GetWindowThreadProcessID(wnd,dwProcessID);
Edit1.Text:=IntToHex(wnd,8);
Edit2.Text:=IntToStr(dwProcessID);
end
Общий порядок действий то я понимаю, вопрос в частностях:
как поймать активное окно, и как именно определить его принадлежность к процессу.
У меня нет опыта работы с чужими окнами, к сожалению...
Ловим активное окно, определяем, какому процессу оно принадлежит. При последующем повторении действия сравниваем, изменился ли вместе с активным окном и процесс, если да - необходимые действия.
Имя процесса легко определяется по его ID, сперва выяснив, какой ID процесса имеет активное окно (WinApi).
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.