Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо