我的代码:
type
tagKBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;监视程序段:
function  KeyHookProc1(nCode:  Integer;WParam:  WPARAM;LParam:  LPARAM):  LRESULT;stdcall;
var
p: PKBDLLHOOKSTRUCT;
begin
Result  :=  0;
if nCode < 0 then
begin
Result := CallNextHookEx(0, nCode, wparam, lparam);
exit;
end;p := PKBDLLHOOKSTRUCT (lParam);
if (nCode = HC_ACTION) then
begin
if  p.vkCode = vk_left
then begin
result:=1;
keybd_event(vk_right, mapvirtualkey(vk_right, 0), 0, 0);
keybd_event(vk_right, mapvirtualkey(vk_right, 0), KEYEVENTF_KEYUP , 0);
end
else if  p.vkCode = vk_up
then begin
result:=1;
keybd_event(vk_down, mapvirtualkey(vk_down, 0), 0, 0);
keybd_event(vk_down, mapvirtualkey(vk_down, 0), KEYEVENTF_KEYUP , 0);
end
else if  p.vkCode = vk_right
then begin
result:=1;
keybd_event(vk_left, mapvirtualkey(vk_left, 0), 0, 0);
keybd_event(vk_left, mapvirtualkey(vk_left, 0), KEYEVENTF_KEYUP , 0);
end
else if  p.vkCode = vk_down
then begin
result:=1;
keybd_event(vk_up, mapvirtualkey(vk_up, 0), 0, 0);
keybd_event(vk_up, mapvirtualkey(vk_up, 0), KEYEVENTF_KEYUP , 0);
end;
end;
end;编译通过,可以运行。(以上程序是把方向键反置,应该写得不乱吧。)
就是行不通,出现怪现象 有高手说最好用CallNextHookEx(0, nCode, wparam, lparam);把里面的参数wparam, lparam做处理可以实现,而且不会有问题。但我不会处理参数。