Форум: "WinAPI";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизАнтихуковое приложение Найти похожие ветки
← →
juiceman © (2004-04-11 04:36) [0]Есть некое приложение (чужое), клавиатурные сообщения которого я хочу отлавливать. ( Не получается. Во всех других ловит а в нем нет !
← →
Cobalt © (2004-04-11 10:03) [1]Удалено модератором
Примечание: Offtopic
← →
juiceman © (2004-04-12 14:47) [2]Не подумайте только что пишу клавиатурный шпион, задача другая - надо отлавливать нажатие на Enter в определенном окне. Пробовал установить горячую клавишу на Enter - управление я получаю но там (в чужом окне) нажатие не обрабатывается - ничего не происходит.
← →
juiceman © (2004-04-13 13:25) [3]Не могу понять каким образом это делается. Перехват сообщения о нажатии клавиши выполняется раньше, чем это сообщение получает (и может обработать) исследуемое окно. Может оно тоже ставит глобальный хук, причем выше моего и если нажатие в его окне то не передает управление далее по цепочке хуков ? Хотя... Библиотек у этого приложения кажись нет, и я запускаю свою прогу уже после его запуска.
← →
FiGr_ (2004-04-13 14:35) [4]Текст библиотеки
library AsDll;
uses
Windows;
var
MyHookHandle:HHook = 0;
function MyCoolHook(Code: integer; wParam: word; lParam: Longint):LongInt;stdCall;
begin
if code<0 then Result := CallNextHookEx(MyHookHandle,Code, wParam, lParam)
else
begin
result:=0;
if wParam = VK_RETURN then
begin
//Здесь ты должен выполнять свои действия
...
result:=1;
CallNextHookEx(MyHookHandle,Code, wParam, lParam);
end;
end;
end;
procedure SetHook;stdCall;Export;
begin
MyHookHandle := SetWindowsHookEx(WH_Keyboard, @MyCoolHook, hInstance, 0);
end;
procedure UnHook;stdCall;Export;
begin
UnhookWindowsHookEx(MyHookHandle);
end;
exports
SetHook,
Unhook;
Begin
//SetHook;
end.
Текст программы для установки HOOKa
unit Unit1;
interface
uses
Windows, Forms;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
procedure SetHook;stdCall; external "AsDll.Dll";//
procedure UnHook;stdCall; external "AsDll.Dll";
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetHook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Unhook;
end;
end.
← →
juiceman © (2004-04-13 16:27) [5]И что это дает ?
← →
juiceman © (2004-04-16 12:34) [6]???
← →
Cobalt © (2004-04-16 15:41) [7]И что именно не получается???
Код давай!!!
← →
juiceman © (2004-04-16 16:01) [8]
> Cobalt © (16.04.04 15:41) [7]
> И что именно не получается???
> Код давай!!!
Не отлавливаются нажатия на любые клавиши только в определенном приложении, любом его дочернем окне. Назовем это приложение "XApp" =)
Скачал чужой key-перехватчик, запустил (поверх своего), один раз он отловил нажатие в ХАрр на Enter, потом выдалось виндовое окно про ошибку памяти - что-то про ReadOnly, и все - больше он ничего не перехватывает.
-------------
Кода мне не жалко, но смысл ? Во всех приложениях отлавливает, а в этом нет. Значит код рабочий, просто само приложение не хочет чтобы нажатия в его пределах отлавливали.
← →
Cobalt © (2004-04-16 17:27) [9]Ну так, Гюльчатай - открой личико.
Что за "XApp"?
Может, это окно WinLogon?
← →
juiceman © (2004-04-16 17:35) [10]сервер клуба, v 4.12.6.
читайте [2] - мне не нужны все клавиши, мне нужен только Enter.
← →
Rouse_ © (2004-04-16 20:15) [11]> [4] FiGr_ (13.04.04 14:35)
Кто ж тебя учил ТАК хуки писать?
← →
AndersoNRules © (2004-04-17 12:39) [12]The hook procedures for some types of hooks can only monitor messages; others can modify messages or stop their progress though the chain, preventing them from reaching the next hook procedure or the destination window.
(MSDN)
← →
juiceman © (2004-04-18 13:16) [13]Классно. А там не написано как такое сделать, а еще лучше убить ?
Дайте пожалуйста ссылку на этот материал, сам думаю не смогу найти
← →
AndersoNRules © (2004-04-18 19:57) [14]Prosto ne vizivai funkzziyu: CallNextHookEx(MyHookHandle,Code, wParam, lParam);
← →
nikkie © (2004-04-18 20:23) [15]а может то окно и не получает сообщения? если оно обрабатывается где-нибудь в цикле выборки сообщений, а ты поставил хук WH_CALLWNDPROC - то вполне возможна описанная ситуация. в любом случае стоит попробовать хуки разных типов.
если же окно все-таки получает сообщений, а дело в хитром хуке (хотя, еще вопрос, что у тебя за система - насколько я помню, Алексей Павлов написал, что на W2K отсутствие вызова CallNextHookEx не приводит к разрыву цепочки вызовов хуков), то можно попробовать заменить оконную процедуру на свою.
← →
juiceman © (2004-04-19 17:11) [16]2 nikkie:
> в любом случае стоит попробовать хуки разных типов
Сначала я ставил хук типа WH_Keyboard, теперь WH_CALLWNDPROC. Какие еще варианты ? WH_GETMESSAGE ?
> хотя, еще вопрос, что у тебя за система
WinXP Home Edition
> можно попробовать заменить оконную процедуру на свою.
Чью оконную процедуру ? Окна самого приложения, главного , или его дочернего окна в котором и надо отлавливать нажатия?
← →
nikkie © (2004-04-19 19:47) [17]>Чью оконную процедуру?
окна, которое получает сообщение.
только сначала убедиться с помощью какого-нибудь spy++, что сообщение туда приходит.
>Сначала я ставил хук типа WH_Keyboard, теперь WH_CALLWNDPROC. Какие еще варианты ? WH_GETMESSAGE ?
можно попробовать WH_GETMESSAGE, а можно WH_JOURNALRECORD, WH_KEYBOARD_LL. сам я с хуками не работал, советовать не возьмусь. почему WH_CALLWNDPROC может не работать - понятно. почему WH_KEYBOARD не работает - может в самом деле не вызывается CallNextHookEx... а вообще, что за приложение ты мучаешь? а то окажется что это java-приложение на swing-е. полгода назад здесь помнится человек мучался с oracle forms.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.035 c