Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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 &#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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1081509057
Феликс
2004-04-09 15:10
2004.05.02
Горе тебе народ побежденный...


1-1082122683
ширинашрифта
2004-04-16 17:38
2004.05.02
каким образом подобрать ширину шрифта memo


1-1081780593
EugeneKo
2004-04-12 18:36
2004.05.02
Как "правильно" читать HTML в Delphi 5


7-1078989745
DuchmanSoft
2004-03-11 10:22
2004.05.02
Как убрать отображение чужего окна на панели задачь?


9-1068757966
DDS
2003-11-14 00:12
2004.05.02
Проблемма с полигонами, корявые получаются





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский