HOOK无法拦截某些游戏的键盘消息(100分)

  • 主题发起人 主题发起人 leon lee
  • 开始时间 开始时间
L

leon lee

Unregistered / Unconfirmed
GUEST, unregistred user!
比如PC版的侍魂2、雷电,用HOOK技术拦截它的键盘消息无效。
我用WinSpy监视,表明用HOOK技术拦截后侍魂2没有收到键盘消息。
可能是因为侍魂2使用DirectInput获得键盘消息,这样的话
怎样拦截呢?FPE2000里的键盘宏功能就可以拦截侍魂2的
键盘消息,进而生成键盘宏,因此这一定是可以做到的。
这个问题我百思不得其解,难道必须编写键盘驱动程序?
望那位高手教我。
 
注册个热键,真侍魂2可以接收到,我试过的
 
可以把原来的按键挡住吗?
用那一个函数注册热键?
麻烦详细说明一下。
 
以下代码当按下小键盘上的“0”时,真侍魂上你控制的角色可以往左上方斜跳。你可以试一
下模拟其他组合键,模拟按键时按下和抬起的间隔要把握好

private
theHotKey: Integer;
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;

procedure TForm1.FormCreate(Sender: TObject);
begin
theHotKey := GlobalAddAtom('HotKey') - $C000;
RegisterHotKey(Handle, theHotkey, 0, 96);
end;

procedure TForm1.HotKeyDown(var Msg: TMessage);
begin
if Msg.LParamHi = 96 then //按下小键盘上的“0”
begin
keybd_event(38, MapVirtualKey(38, 0), 0, 0); //方向键上按下
keybd_event(37, MapVirtualKey(37, 0), 0, 0); //方向键左按下
Sleep(30);
keybd_event(37, MapVirtualKey(37, 0), KEYEVENTF_KEYUP, 0); //方向键左抬起
keybd_event(38, MapVirtualKey(38, 0), KEYEVENTF_KEYUP, 0); //方向键上抬起
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle, theHotKey);
end;
 
接受答案了.
 
后退
顶部