Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизJournalplayback hook Найти похожие ветки
← →
cherrex (2004-03-06 10:51) [0]Уважаемые мастера пожалуйста помогите. Пытаюсь ставить hook Journalplayback а у меня не чего не выходит. Оьъясните что не так, а лучше дайте пример (исходник) использования Journalplayback hook. Вот DLL-исходник моей чуши. зарание благодарен.
← →
cherrex (2004-03-06 10:54) [1]library keyhook;
uses
SysUtils,
Windows,
Messages,
Forms;
{ñòðóêòóðà, ïîëÿ êîòîðîé áóäóò îòîáðàæåíû â ôàéë ïîäêà÷êè}
var
hh : HHOOK;
F : TextFile;
AppWnd: HWND;
//
function JournalPlaybackProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
E : PEVENTMSG;
s : string;
begin
E:=Pointer(LParam);
AppWnd:= GetForegroundWindow;
If code = HC_GetNext Then
begin
//If e.message = Wm_KeyUp Then
//begin
AssignFile(f,"log.txt");
Append(f);
Try
s := Inttostr(E.paramL);
Writeln(f,AppWnd,"--",s,"--",Inttostr(E.paramH));
Finally
CloseFile(f);
end;
end
else
Result := CallNextHookEx(hh, Code, wParam, lParam);
end;
//
procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch=true then
begin
{Óñòàíàâëèâàþ HOOK, åñëè îí íå óñòàíîâëåí }
hh := SetWindowsHookEx(WH_Journalplayback, @JournalPlaybackProc, HInstance, 0);
if hh <> 0 then
MessageBox(0, "KEYBOARD HOOK óñòàíîâëåí !", "Message from keyhook.dll", 0)
else
MessageBox(0, "HOOK óñòàíîâèòü íå óäàëîñü !", "Message from keyhook.dll", 0);
end
else
begin
{Óäàëÿþ ôóíêöèþ-ôèëüòð, åñëè îíà óñòàíîâëåíà}
if UnhookWindowsHookEx(hh) then
MessageBox(0, "HOOK ñíÿò !", "Message from keyhook.dll", 0)
else
MessageBox(0, "HOOK ñíÿòü íå óäàëîñü !", "Message from keyhook.dll", 0);
end;
end;
exports hook;
begin
end.
← →
Игорь Шевченко © (2004-03-06 19:19) [2]
> Пытаюсь ставить hook Journalplayback
А с какой целью ?
← →
Alexander666 © (2004-03-07 05:46) [3]Во-первых, "The WH_JOURNALPLAYBACK hook enables an application to insert messages into the system message queue. You can use this hook to play back a series of mouse and keyboard events recorded earlier by using the WH_JOURNALRECORD hook. Regular mouse and keyboard input is disabled as long as a WH_JOURNALPLAYBACK hook is installed. A WH_JOURNALPLAYBACK hook is a global hook ¾ it cannot be used as a thread-specific hook. "
Во-вторых, если пытаетесь перехватывать нажатия клавиш, то ставьте WN_KEYBOARD.
А в-третьих, не мешало бы использовать MMF (Memory Mapped Files), а то hh у вас постоянно будет равен нулю. Ну а к чему это ведет и почему он равен нулю можно почитать в статье на этом сайте или собственно у самого Рихтера.
← →
cherrex (2004-03-07 09:31) [4]Мне нужно перехватывать все сообщения с клавиатуры, а WN_KEYBOARD перехватывает только сообщения своего приложения.
← →
GrayFace © (2004-03-07 10:56) [5]>it cannot be used as a thread-specific hook.
А значит надо делать dll и прочую муть, описанную в статье по хукам(поиск hooks). HInstance не поможет.
ЗЫ: Мелкомякких надо обивать за один принцып реализации глобальных хуков.
← →
cherrex (2004-03-07 12:56) [6]А можно используя WN_KEYBOARD сделать глобальнай хук на клавиотуру. То есть перехватывать сообщения с клавиатуры других приложений.
← →
Игорь Шевченко © (2004-03-07 18:48) [7]GrayFace © (07.03.04 10:56)
> Мелкомякких надо обивать за один принцып реализации глобальных
> хуков
Предложи свою реализацию ?
---
LMD
← →
Игорь Шевченко © (2004-03-07 18:50) [8]cherrex (07.03.04 09:31)
> Мне нужно перехватывать все сообщения с клавиатуры
WH_JOURNALPLAYBACK не имеет к этому никакого отношения.
смотреть в сторону WH_KEYBOARD(LL), WH_JOURNALRECORD
← →
Alexander666 © (2004-03-07 22:24) [9]
> cherrex (07.03.04 12:56) [6]
Конечно можно! Для этого всю реализацию хука надо скомпилировать в отдельную ДЛЛ. Или лучше почитать статью как это делать на этом сайте.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c