// unction KeyBoardProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall; var msg:^TMsg; begin try if code < 0 then begin Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam); exit; end; if code = HC_ACTION then begin msg := @lparam; //判断up 和down ,可是这么操作有错 if msg.message = WM_KEYDOWN then begin if HooksData[WH_KEYBOARD].Installed then //设定好键值 begin if wparam = HooksData[WH_KEYBOARD].key1 then begin //替换按键信息?不知道怎么操作 MessageDlg(inttostr(HooksData[WH_KEYBOARD].key2), mtError, [mbOk], 0); end; end else begin KEY[Num]:=wparam; inc(num); end; end; end; Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam); except on E: Exception do begin Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam); MessageDlg('Error in ''HookDll.dll''', mtError, [mbOk], 0); end; end; end;
现在唯一的问题就是 该如何去替换按键消息 盼复~//在HookInstall函数中 HooksData[WH_KEYBOARD].hhk := SetWindowsHookEx(WH_KEYBOARD, @KeyBoardProc, Hinstance,0);//KeyBoardProc function KeyBoardProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall; begin try if code < 0 then begin Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam); exit; end; if code = HC_ACTION then begin // if ((lParam shr 31) and 1)=1 // 'KeyUp'; if ((lParam shr 30) and 1)<>1 then // 'KeyDown'; begin if HooksData[WH_KEYBOARD].Installed then begin if wparam = HooksData[WH_KEYBOARD].key1 then begin wparam := HooksData[WH_KEYBOARD].key2; //如何去替换? MessageDlg(inttostr(HooksData[WH_KEYBOARD].key2), mtinformation, [mbOk], 0); end; end else begin KEY[Num] := wparam; inc(num); end; end; end; Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam); except on E: Exception do begin Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam); MessageDlg('Error in ''HookDll.dll''', mtError, [mbOk], 0); end; end; end;
//
unction KeyBoardProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
var
msg:^TMsg;
begin
try
if code < 0 then
begin
Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam);
exit;
end;
if code = HC_ACTION then
begin
msg := @lparam; //判断up 和down ,可是这么操作有错
if msg.message = WM_KEYDOWN then
begin
if HooksData[WH_KEYBOARD].Installed then //设定好键值
begin
if wparam = HooksData[WH_KEYBOARD].key1 then
begin
//替换按键信息?不知道怎么操作
MessageDlg(inttostr(HooksData[WH_KEYBOARD].key2), mtError, [mbOk], 0);
end;
end
else
begin
KEY[Num]:=wparam;
inc(num);
end;
end;
end;
Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam);
except
on E: Exception do
begin
Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam);
MessageDlg('Error in ''HookDll.dll''', mtError, [mbOk], 0);
end;
end;
end;
盼复~//在HookInstall函数中
HooksData[WH_KEYBOARD].hhk := SetWindowsHookEx(WH_KEYBOARD, @KeyBoardProc, Hinstance,0);//KeyBoardProc
function KeyBoardProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
begin
try
if code < 0 then
begin
Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam);
exit;
end;
if code = HC_ACTION then
begin
// if ((lParam shr 31) and 1)=1 // 'KeyUp';
if ((lParam shr 30) and 1)<>1 then // 'KeyDown';
begin
if HooksData[WH_KEYBOARD].Installed then
begin
if wparam = HooksData[WH_KEYBOARD].key1 then
begin
wparam := HooksData[WH_KEYBOARD].key2; //如何去替换?
MessageDlg(inttostr(HooksData[WH_KEYBOARD].key2), mtinformation, [mbOk], 0);
end;
end
else
begin
KEY[Num] := wparam;
inc(num);
end;
end;
end;
Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam);
except
on E: Exception do
begin
Result := CallNextHookEx(HooksData[WH_KEYBOARD].hhk, code, wparam, lparam);
MessageDlg('Error in ''HookDll.dll''', mtError, [mbOk], 0);
end;
end;
end;
KeyHookStruct = record { WinUser.h, Line 926 }
vkCode: DWord;
scanCode: DWord;
flags: DWord;
time: DWord;
dwExtraInfo: ULong;
end;
简单的就是
if(wparam.vkCode=97)then wparam.vkCode:=98;需要增加的就是 把 wparam进行类型转换 呵呵