Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

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 &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#235;&#229;&#237; !", "Message from keyhook.dll", 0)
    else
      MessageBox(0, "HOOK &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#237;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; !", "Message from keyhook.dll", 0);

end
else
begin

  {&#211;&#228;&#224;&#235;&#255;&#254; &#244;&#243;&#237;&#234;&#246;&#232;&#254;-&#244;&#232;&#235;&#252;&#242;&#240;, &#229;&#241;&#235;&#232; &#238;&#237;&#224; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#235;&#229;&#237;&#224;}
  if UnhookWindowsHookEx(hh) then
    MessageBox(0, "HOOK &#241;&#237;&#255;&#242; !", "Message from keyhook.dll", 0)
  else
    MessageBox(0, "HOOK &#241;&#237;&#255;&#242;&#252; &#237;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; !", "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 &#190; 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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-1081240918
sohat
2004-04-06 12:41
2004.05.02
Почему при подключении локап полей возникает "Неизвестная ошибка"


14-1081681535
RealRascal
2004-04-11 15:05
2004.05.02
Как сделать чтобы при копировании в буфер


4-1078559500
cherrex
2004-03-06 10:51
2004.05.02
Journalplayback hook


1-1082094458
Solik
2004-04-16 09:47
2004.05.02
GUI+Console


1-1082212686
PeterTambov
2004-04-17 18:38
2004.05.02
Автоматическое отображение формы до команды Application.Run