|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.10.2006, 20:41 | #1 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе
lowuser
Пытаюсь перехватить открытие любого приложения в Windows XP подскажите что я делаю не так: в DLL ставлю глобальный HOOK: procedure SetGlobalHook(InList:TListBox;out List:TListBox) stdcall; begin EList:= InList; HookHandle:= SetWindowsHookEx(WH_SHELL, @ShellProc, HInstance, 0); List:=EList; end; и потом в функции ShellProc пытаюсь отловить событие HSHELL_WINDOWCREATED и вставить заголовок окна и название класса окна в TListEdit: ShellProc(Code: integer; WParam: WPARAM; LParam: LPARAM):LRESULT stdcall; var msg: PEVENTMSG; Nm:Array[0..255] of Char; Cs: Array[0..255] of Char; begin if Code >= 0 then begin result := 0; msg := Pointer(WParam); case msg.message of HSHELL_WINDOWCREATED: begin GetWindowText(msg.hwnd,Nm,255); GetClassName(msg.hwnd,Cs,255); EList.Items.Add(String(Nm)+'/'+String(Cs)); end; end; End else result:= CallNextHookEx(HookHandle, Code, WParam, LParam); end; rpy3uH этим кодом ты только перехватываешь создание окон а запуск приложений ты не перехватываешь приложения могут быть и без форм а в чем именно проблема что неработает? lowuser Ну мне в принципе и надо оьловить приложения которые видны на Desk Top, скрытые процессы меня не интересуют. при запуске приложения, ну скажим калькулятора, ничего не происходит, в общем не отрабатывает условие case msg.message of HSHELL_WINDOWCREATED: begin GetWindowText(msg.hwnd,Nm,255); GetClassName(msg.hwnd,Cs,255); EList.Items.Add(String(Nm)+'/'+String(Cs)); end; end; rpy3uH попробуй обрабатывать другие сообщения которые связаны с созданием окон например: HCBT_CREATEWND lowuser Я так понимаю для отлавливания данного сообщения необходимо использовать Hook на WH_CBT, а при этом происходит следующее: либо опять же ничего не происходит, либо например при запуске Explorer при первом нажатие система думает 1 сек, а потом болт, второй же раз запускается без задержек, либо происходит полное зависание системы, даже снять задачу не получается...., но это только если где нибудь в коде функции ShellProc вставить ShowMessage... В общем фигня какая то.... rpy3uH попробуй написать так ... if Code >= 0 then begin result := 0; msg := Pointer(WParam); case msg.message of HSHELL_WINDOWCREATED: begin GetWindowText(msg.hwnd,Nm,255); GetClassName(msg.hwnd,Cs,255); EList.Items.Add(String(Nm)+'/'+String(Cs)); end; end; End ; /// без else result:= CallNextHookEx(HookHandle, Code, WParam, LParam); |
02.12.2006, 11:52 | #2 |
Форумчанин
Регистрация: 01.12.2006
Сообщений: 241
|
Ответ в книге Феленова "Делфи глазами хакера" стр. 80, кажеться
Програмисты - единственные люди, которым платят за исправления их же ошибок
|
02.12.2006, 12:12 | #3 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Совершенно верно, но лучше бы начать читать с начала этого параграфа, а не с середины.
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как перехватить нажатие клавиш в Windows? | JoanM | Win Api | 15 | 31.05.2013 14:42 |
Перехватить подключение USB Flash Drive | alex23xandr | Win Api | 5 | 26.05.2009 17:45 |
Как перехватить нажатие клавиши Windows? | UnD)eaD)Snake | Win Api | 3 | 16.03.2009 18:21 |
Перехватить сообщение об ошибке | Insainer | Общие вопросы Delphi | 5 | 25.04.2008 20:39 |
Как перехватить обращения к принтеру? | Classic | Win Api | 2 | 16.08.2007 11:07 |