![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Journalplayback hook [D7, WinXP]
cherrex © (2004-03-06 10:51:00)Уважаемые мастера пожалуйста помогите. Пытаюсь ставить hook Journalplayback а у меня не чего не выходит. Оьъясните что не так, а лучше дайте пример (исходник) использования Journalplayback hook. Вот DLL-исходник моей чуши. зарание благодарен.
Alexander666 (2004-03-07 22:24:00) [1]
> cherrex (07.03.04 12:56) [6]
Конечно можно! Для этого всю реализацию хука надо скомпилировать в отдельную ДЛЛ. Или лучше почитать статью как это делать на этом сайте.
Игорь Шевченко (2004-03-07 18:50:00) [2]cherrex (07.03.04 09:31)
> Мне нужно перехватывать все сообщения с клавиатуры
WH_JOURNALPLAYBACK не имеет к этому никакого отношения.
смотреть в сторону WH_KEYBOARD(LL), WH_JOURNALRECORD
Игорь Шевченко (2004-03-07 18:48:00) [3]GrayFace © (07.03.04 10:56)
> Мелкомякких надо обивать за один принцып реализации глобальных
> хуков
Предложи свою реализацию ?
---
LMD
cherrex (2004-03-07 12:56:00) [4]А можно используя WN_KEYBOARD сделать глобальнай хук на клавиотуру. То есть перехватывать сообщения с клавиатуры других приложений.
GrayFace (2004-03-07 10:56:00) [5]> it cannot be used as a thread-specific hook.
А значит надо делать dll и прочую муть, описанную в статье по хукам(поиск hooks). HInstance не поможет.
ЗЫ: Мелкомякких надо обивать за один принцып реализации глобальных хуков.
cherrex (2004-03-07 09:31:00) [6]Мне нужно перехватывать все сообщения с клавиатуры, а WN_KEYBOARD перехватывает только сообщения своего приложения.
Alexander666 (2004-03-07 05:46:00) [7]Во-первых, "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 у вас постоянно будет равен нулю. Ну а к чему это ведет и почему он равен нулю можно почитать в статье на этом сайте или собственно у самого Рихтера.
Игорь Шевченко (2004-03-06 19:19:00) [8]
> Пытаюсь ставить hook Journalplayback
А с какой целью ?
cherrex (2004-03-06 10:54:00) [9]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.