最简单的hook问题,欢迎大家参与.

fulinlin 2007-01-14 10:06:18
我想在键盘钩子中监控键盘按键,比如随时监控用户是否按了ctrl+alt+a组合键,我在钩子函数中应该怎么判断呢?
function keyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;

begin
这个地方怎么判断?
end


...全文
232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlp555ren 2007-01-16
  • 打赏
  • 举报
回复
楼上正解,通过GetAsyncKeyState来判断辅助键,用Wparam参数来判断可显键。
ly_liuyang 2007-01-15
  • 打赏
  • 举报
回复
:)
API GetAsyncKeyState see MSDN
蒋晟 2007-01-15
  • 打赏
  • 举报
回复
call GetAsyncKeyState
woshihaoge 2007-01-15
  • 打赏
  • 举报
回复
library KeyBoard;

uses
SysUtils,
Windows,
ShellApi,
Messages,
WinProcs,
Classes;

var
KBHook:HHook;
IsHooked:boolean;

function KeyBoardProc(Code:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
const
_keypressmask=$80000000;
begin
result:=0;
if Code<0 then
begin
CallNextHookEx(KBHook,Code,wParam,lParam);
end;

if ((lparam and _keypressmask)=0) and (GetAsyncKeyState(VK_CONTROL)<0) and (GetAsyncKeyState(VK_MENU)<0) and (wParam=ord('A')) then
begin
ShellExecute(0,'Open','NotePad.exe',nil,nil,SW_SHOW);
result:=1;
end;

end;

function StartHook:boolean;stdcall;
begin
result:=false;
if IsHooked then exit;
KBHook:=SetWindowsHookEx(WH_KEYBOARD,@KeyBoardProc,hInstance,0);
if KBHook<>0 then
begin
Result:=true;
IsHooked:=true
end
else
IsHooked:=false;
end;

function RemoveHook:boolean;stdcall;
begin
result:=false;
if (not IsHooked) and (KBHook<>0) then exit;
UnHookWindowsHookEx(KBHook);
Result:=true;
IsHooked:=false;
end;

exports
StartHook,RemoveHook;

{$R *.res}

begin
end.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧