快来看啊,DirectX类游戏按键终极拦截!终于搞出来了!(关键字:APIHOOK COM HOOK DirectX Input Dinput)

linuxpgy 2005-04-06 02:51:04
最近本人遇到一个游戏,但其按键很难适应,有不可以更改,所以只有自己将它的按键拦截,适应自己的手感.普通的键盘消息拦截对其没有任何用处,因为它的输入是使用DirectX底层驱动的,所以根本不是利用消息处理按键的,所以只有拦截DirectX Input!而DirectX是基于COM接口的,与一般的API Hook 有所不同.本程序是先利用APIHOOK获得COM接口指针,然后再利用COM HOOK实现的.希望能给CSDN上正在研究此类问题的人一个帮助.
参考书籍:<Windows核心编程>,<编程高手箴言>.
程序下载地址:
http://myproject.91x.net/project/DirectKeyTrans.jpg

(注意:由于网站服务器好象不支持下载Rar格式的压缩文件,故将Rar文件的扩展名该为jpg。请在下载时用网际快车,下载后将扩展名jpg改回Rar,用WinRar即可打开!)
另外,我的主页:http://myproject.91x.net/
...全文
1477 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
愤怒狂奔 2010-06-26
  • 打赏
  • 举报
回复
找不到服务器。我晕。楼主发送给我吧,邮箱hellohuojie@163.com
temp0001 2005-07-29
  • 打赏
  • 举报
回复
德国货币
linuxpgy 2005-04-25
  • 打赏
  • 举报
回复
to yungjoe(yungjoe)
<编程高手箴言>上的例子就是改DirectDraw的,我就是看那上面编的.
其实你按照那个例子的思路完全可以改出DirectDraw的,就是先拦截DirectDrawCreate,然后定义自己的IDirectDraw,(MyIDirectDraw),可能还需要定义自己的IDirectDrawSurface,
你参考一下ddraw.h里的定义就知道了(你类比我那个程序中的My..Input..的定义,就知道了)
例如这是IDirectDraw在ddraw.h文件里定义的接口:
DECLARE_INTERFACE_( IDirectDraw, IUnknown )
{
/*** IUnknown methods ***/
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/*** IDirectDraw methods ***/
STDMETHOD(Compact)(THIS) PURE;
STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;
STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;
STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
STDMETHOD(FlipToGDISurface)(THIS) PURE;
STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE;
STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;
STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
STDMETHOD(RestoreDisplayMode)(THIS) PURE;
STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE;
STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
};

实在不懂的话,只有先去看看书了.嘿嘿..
rabo 2005-04-24
  • 打赏
  • 举报
回复
不错的东西。不知道98下能用不。
takbj 2005-04-24
  • 打赏
  • 举报
回复
太好了
另外问一下:在得到一个窗口的句柄后如何判断它是不是用DirectX、OpenGL做的游戏窗口?

这里:
http://community.csdn.net/Expert/topic/3962/3962422.xml?temp=.104336
yungjoe 2005-04-23
  • 打赏
  • 举报
回复
顶顶顶顶!!!!!1

能不能把hook ddraw的也改出来啊?
sinall 2005-04-23
  • 打赏
  • 举报
回复
好同志。
linuxpgy 2005-04-23
  • 打赏
  • 举报
回复
我顶
然后再顶
接着还顶
有人顶也顶
没人顶也顶
反正都要顶
卷起衣袖我顶
撩起裤管我顶
擦把汗水我顶
风里顶
雨里顶
撑不住了我还顶
蹲着我顶
趴着我顶
睡着我梦里依旧顶
一定要顶到底
longfeisky 2005-04-19
  • 打赏
  • 举报
回复
嘿嘿,好东西,只是没时间
oyljerry 2005-04-12
  • 打赏
  • 举报
回复
sp
VL1002 2005-04-12
  • 打赏
  • 举报
回复
好兄弟!我正在到处找这个东西呢.我试试看如何回头再回复你
bobob 2005-04-12
  • 打赏
  • 举报
回复
我up
赞搂猪一个:)
linuxpgy 2005-04-12
  • 打赏
  • 举报
回复
怎么没人回帖啊?
lianggj 2005-04-12
  • 打赏
  • 举报
回复
高手!
BOYGUARD110 2005-04-12
  • 打赏
  • 举报
回复
以为你要卖东西哪

没想到是源代码,谢谢啦
pomelowu 2005-04-12
  • 打赏
  • 举报
回复
好东西。sp
linuxpgy 2005-04-07
  • 打赏
  • 举报
回复
哦,原来贴子不是随便删的,会扣分的!
原来如此!
Kudeet 2005-04-06
  • 打赏
  • 举报
回复
你的回复没有删除,会扣你的信誉份2
linuxpgy 2005-04-06
  • 打赏
  • 举报
回复
请斑竹将上面的广告删掉,谢谢!
删时请一并将这条回复也删掉,谢谢again!
linuxpgy 2005-04-06
  • 打赏
  • 举报
回复
directx input hook

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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