var
Form1: TForm1; hHook:integer;
EventArray:array[0..300] of EVENTMSG;
EventLog:integer;implementationfunction HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
var
recOK:integer;
begin
recOK:=1;
Result:=0; if iCode < 0 then
Result := CallNextHookEx(hHook,iCode,wParam,lParam)
else if iCode = HC_SYSMODALON then
recOK:=0
else if iCode = HC_SYSMODALOFF then
recOK:=1
else if ((recOK>0) and (iCode = HC_ACTION)) then begin
EventArray[EventLog]:=pEventMSG(lParam)^;
EventLog:=EventLog+1;
end; if EventLog>=1000 then begin
UnHookWindowsHookEx(hHook);
end;
end;
//........
procedure TForm1.Button1Click(Sender: TObject);
begin
EventLog:=0;
hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0);
end;
我想用SetwindowsHookEx()截获键盘消息.....但其中:
EventArray[EventLog]:=pEventMSG(lParam)^; 这是什么意思啊?我查帮助,根本没有 pEeventMSG() 这个函数,这里又怎么填充 EVENTMSG 这个结构呢?我看不懂,请大家指教.
另外又如何从 EVENTMSG 或 HookProc()的参数 中提取键盘消息,而不理会鼠标消息呢?
谢谢....
Form1: TForm1; hHook:integer;
EventArray:array[0..300] of EVENTMSG;
EventLog:integer;implementationfunction HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
var
recOK:integer;
begin
recOK:=1;
Result:=0; if iCode < 0 then
Result := CallNextHookEx(hHook,iCode,wParam,lParam)
else if iCode = HC_SYSMODALON then
recOK:=0
else if iCode = HC_SYSMODALOFF then
recOK:=1
else if ((recOK>0) and (iCode = HC_ACTION)) then begin
EventArray[EventLog]:=pEventMSG(lParam)^;
EventLog:=EventLog+1;
end; if EventLog>=1000 then begin
UnHookWindowsHookEx(hHook);
end;
end;
//........
procedure TForm1.Button1Click(Sender: TObject);
begin
EventLog:=0;
hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0);
end;
我想用SetwindowsHookEx()截获键盘消息.....但其中:
EventArray[EventLog]:=pEventMSG(lParam)^; 这是什么意思啊?我查帮助,根本没有 pEeventMSG() 这个函数,这里又怎么填充 EVENTMSG 这个结构呢?我看不懂,请大家指教.
另外又如何从 EVENTMSG 或 HookProc()的参数 中提取键盘消息,而不理会鼠标消息呢?
谢谢....
解决方案 »
- 通过delphi在dll文件里,可以添加过程,来批量设置主窗体的控件属性吗?
- 一个内存映像问题
- TF1Book的使用问题,希望高人帮忙
- 把饭桶的80分也压榨干了,心情不错,散200
- (初级)mdi窗体的问题?
- 如何使任务栏上的图标显示每秒变色,在线等!!
- 一个TreeView问题,请高手们帮个忙,急急急急急急急急急急,必有重谢。
- 这个是什么意思呀
- 为什么在日历控件上一输入就报错?
- 用Delphi生成6M多的EXE文件﹐連接SQL Server用ADO,當運行開始至出現密碼登錄窗口要長達20秒左右﹗﹗﹗
- 怎样将一个dbf文件读入access中,100分奉上,小妹在线等待,很急,谢谢
- 哪里可以下载最新的MySQL dbExpress驱动?
TEventMsg=packed record
message:UINT;
paramL:UINT;
paramH:UINT;
time:DWORD;
hwnd:HWND
end;
paramL:如果是一个键盘消息,这个域就是击键的虚拟代码。如果是一个鼠标消息,wParam就是鼠标的x坐标;
paramH:如果是一个键盘消息,这个域就是击键的扫描码。如果是一个鼠标消息,lParam就是鼠标的y坐标。
hwnd:对于wh_JournalPlayback类型的挂钩来说,这个域用不着