Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2006, 20:41   #1
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 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);
rpy3uH вне форума Ответить с цитированием
Старый 02.12.2006, 11:52   #2
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
Счастье

Ответ в книге Феленова "Делфи глазами хакера" стр. 80, кажеться
Програмисты - единственные люди, которым платят за исправления их же ошибок
Speeker вне форума Ответить с цитированием
Старый 02.12.2006, 12:12   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Совершенно верно, но лучше бы начать читать с начала этого параграфа, а не с середины.
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиш в 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