DirectX的游戏下如何模拟键盘和鼠标操作???

hademen 2003-06-08 01:13:40
我想写个小程序,代替在网络游戏中一些人工的重复动作,可现在一般的游戏用DirectInput 直接读键盘鼠标输入,这样用sendmessage就不管用了,那有没有其他什么方法来模拟呢?
...全文
2825 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacking007 2003-06-20
  • 打赏
  • 举报
回复
不是吧,你还没找到EZ?
要写键盘缓冲用什么写啊?有什么好一点的书介绍一下。
hademen 2003-06-20
  • 打赏
  • 举报
回复
ez不管用。。。 :(
hademen 2003-06-19
  • 打赏
  • 举报
回复
直接读写键盘缓冲区应该怎么做?如何获得这个缓冲区的地址呢?
hyamw 2003-06-19
  • 打赏
  • 举报
回复
够狠,这种着数都想得出来!!厉害,哪天我也试试!哈哈
hademen 2003-06-19
  • 打赏
  • 举报
回复
楼上的,这招也太黑了点吧 :( 偶还是不试了
superyys 2003-06-18
  • 打赏
  • 举报
回复
我在〈星际争霸〉中使用过SendInput,
就是不断的自动骂人,
把别人骂得自动投降了。
要不要试试这个神奇的程序!
hademen 2003-06-18
  • 打赏
  • 举报
回复
to jacking007(复活岛) 问题还没解决咋结贴啊?

to my2003(恩,不错) 能问一下,直接读写键盘缓冲区应该怎么做?如何获得这个缓冲区的地址呢?
曾经的猎狐 2003-06-16
  • 打赏
  • 举报
回复
up
my2003 2003-06-15
  • 打赏
  • 举报
回复
DX程序要看他是不是用的DXInput,如果是,就不行了,因为DXInput为了提高效率没有用Windows的消息机制,他是直接读取硬件,所以一般的靠发消息是不能模拟的,如果要模拟就要写驱动,或者直接读写键盘的缓冲区试试
windleee 2003-06-14
  • 打赏
  • 举报
回复
我写过一个按键精灵,是为<倚天>写的一个外挂
用的是keybd_event和mouse_event写的
鼠标能正常模拟,但是键盘就就不能了.
不能模拟快捷键,但是聊天时的输入能模拟.

所以这两个函数并不能在DX下的游戏中很好的工作.
yangsiwei 2003-06-14
  • 打赏
  • 举报
回复
做个驱动程序,
不过我不会,哈哈
commandos 2003-06-13
  • 打赏
  • 举报
回复
up
寻开心 2003-06-13
  • 打赏
  • 举报
回复
SetKeyboardState
SendInput
都可以设置消息队列当中的键盘状态。sendinput还可以发送鼠标状态信息
但是对于DirectInput的查询模式都没有用途,DirectInput是直接插选键盘的按键状态,不同于windows的消息机制。
不认为有可行的办法,除非游戏本身不是使用directinput的查询模式。
jacking007 2003-06-13
  • 打赏
  • 举报
回复
兄弟,结贴啊。
jacking007 2003-06-12
  • 打赏
  • 举报
回复
那你用EZscript撒,用得好的话,就像17173上的那个笑话一样,用它同gm聊上两个小时他都不会知道自己是在同外挂聊天。不过EZ用起来我反正觉得麻烦,不过是挺好用的,你自己去找一找,反正肯定有地方下,不过你的ID被删了不要找我,我只在龙族中用来做连点,别的游戏重来都不用外挂的,玩单机的游戏我都讨厌用FPE,鄙视用FPE的~~~~,找到EZ别忘结贴同时别忘给我分~~~~~~
hademen 2003-06-12
  • 打赏
  • 举报
回复
俺去试试去 :)
hademen 2003-06-11
  • 打赏
  • 举报
回复
大哥,如果按键精灵好用的话,我也不想这么麻烦啊 :(
hyamw 2003-06-11
  • 打赏
  • 举报
回复
to rabo(不哭死人)
鼠标的话我没试过,反正也不使用的系统消息里的鼠标
我用PostMessage()发送消息试过,没有效果。说明它们不是截获系统的WM_消息的。
《仙境传说》?没试过,硬盘空间不够大,装不下,!~~~ 5555555555

to hademen(哈哈234)
你玩得什么游戏?
jacking007 2003-06-10
  • 打赏
  • 举报
回复
那么麻烦干嘛,你自己能编程做这个的话,还不如下按键精灵或ez自己写脚本来的快。我挂机就用这两个,想干嘛就干嘛(脚本写的好的前提下)。如果你有编程嗜好的话,用KEYBD_EVENT吧,他可以虚拟键盘输入的。你要做个好的挂机工具很麻烦的,例如取当前窗口颜色等。
rabo 2003-06-09
  • 打赏
  • 举报
回复
暗黑,传奇是用的系统鼠标吧,不是DX鼠标。
你试试这个游戏《仙境传说》全DX的。
加载更多回复(5)
模拟鼠标键盘 注意:不支持Windows 8 / 8.1。 Interceptor是Windows键盘驱动程序的包装器(包装http://oblita.com/Interception)。 使用驱动程序,Interceptor可以模拟按键和鼠标点击... 使用DirectX游戏,通常不接受使用SendInput()的击键 Windows的受保护区域,如Windows登录屏幕或UAC调暗屏幕 任何应用程序 因为驱动程序模拟击键和鼠标单击,所以目标窗口必须处于活动状态(即,在发送击键和鼠标点击时,不能在另一个窗口上执行多任务)。 如何使用 下载并构建此项目并在项目中引用其DLL。 下载'interception.dll',这是一个由驱动程序作者编写的独立库。将它放在与可执行文件相同的目录中。这是必需的。 从作者的网页下载并安装“install-interception.exe”。安装后重新启动计算机。 在您的代码中,要加载驱动程序,请调用(阅读下面的代码注释;您必须设置过滤模式以捕获按键事件或发送按键操作!): Input input = new Input(); // Be sure to set your keyboard filter to be able to capture key presses and simulate key presses // KeyboardFilterMode.All captures all events; 'Down' only captures presses for non-special keys; 'Up' only captures releases for non-special keys; 'E0' and 'E1' capture presses/releases for special keys input.KeyboardFilterMode = KeyboardFilterMode.All; // You can set a MouseFilterMode as well, but you don't need to set a MouseFilterMode to simulate mouse clicks // Finally, load the driver input.Load(); 做你的东西。 input.MoveMouseTo(5, 5); // Please note this doesn't use the driver to move the mouse; it uses System.Windows.Forms.Cursor.Position input.MoveMouseBy(25, 25); // Same as above ^ input.SendLeftClick(); input.KeyDelay = 1; // See below for explanation; not necessary in non-game apps input.SendKeys(Keys.Enter); // Presses the ENTER key down and then up (this constitutes a key press) // Or you can do the same thing above using these two lines of code input.SendKeys(Keys.Enter, KeyState.Down); Thread.Sleep(1); // For use in games, be sure to sleep the thread so the game can capture all events. A lagging game cannot process input quickly, and you so you may have to adjust this to as much as 40 millisecond delay. Outside of a game, a delay of even 0 milliseconds can work (instant key presses). input.SendKeys(Keys.Enter, KeyState.Up); input.SendText("hello, I am typing!"); /* All these following characters / numbers / symbols work */ input.SendText("abcdefghijklmnopqrstuvwxyz"); input.SendText("1234567890"); input.SendText("!@#$%^&*()"); input.SendText("[]\\;',./"); input.SendText("{}|:\"?"); // And finally input.Unload(); 笔记: BadImageFormatException如果您没有为解决方案中的所有项目(包括此项目)使用正确的体系结构(x86或x64),则可能会获得。因此,您可能必须下载此项目的源代码才能将其重建为正确的体系结构。这应该很简单,构建过程应该没有错误。 您必须从http://oblita.com/Interception下载'interception.dll' 。 如果你已经完成了以上所有操作(正确安装了拦截驱动程序,将interception.dll放在你的项目文件夹中),你仍然无法发送击键: 驱动程序有一个限制,即它不能在不接收至少一次击键的情况下发送击键。这是因为驱动程序不知道键盘是哪个设备ID,因此它必须等待接收击键以从击键中推断出设备ID。 总之,在发送击键之前,请始终按键盘一次。点按任意键。然后你可以发送击键。这不适用于接收击键,因为通过接收击键,您当然已经按下了一个键。 MoveMouseTo()和MoveMouseBy()完全忽略键盘驱动程序。它使用System.Windows.Forms.Position来设置和获取游标的位置(它为下面的各个函数调用标准的Win32 API)。 原因是,在探索键盘驱动程序的鼠标移动功能时,我注意到它没有按像素单位移动光标,而是似乎通过加速移动光标。当我想将光标移动到某个位置时,这会不断产生不一致的值。因为Win32游标设置API通常不被游戏等阻止,所以我发现只需调用这些标准API即可,而无需使用驱动程序。请注意,这仅适用于设置光标位置。拦截光标仍然可以正常工作。例如,您可以使用Interceptor反转鼠标的x和y轴。
DirectX 简介  DirectX 对于大多数游戏爱好者来说都不陌生(当然,那些只在DOS下艰苦作战的朋友例外),在安装一个游戏前,系统总是会提示你是否需要同时升级 DirectX。简单地说,DirectX 就是一系列的 DLL (动态连接库),通过这些 DLL,开发者可以在无视于设备差异的情况下访问底层的硬件。DirectX 封装了一些 COM(Component Object Model)对象,这些 COM 对象为访问系统硬件提供了一个主要的接口。DirectX 目前主要由以下七个主要部分组成:DirectDraw – 为程序直接访问显存提供接口,同时和其它的Windows应用程序保持兼容。 Direct3D – 为访问3D加速设备提供接口。 DirectInput – 为各种输入设备提供接口,比如鼠标键盘,力反馈游戏手柄和操纵杆等。 DirectPlay – 为游戏提供网络功能接口,比如支持通过 TCP/I、IPX 等协议进行游戏中的数据传输。 DirectSound – 为访问声卡提供接口,支持WAV、MIDI 等文件的直接播放。 DirectSound3D –通过此接口,可以模拟出某一个声音在三维空间中任何一个位置的播放所产生的效果,从而达到逼真的环绕立体声。 DirectMusic – 此接口主要是生成一系列的原始声音采样反馈给相应的用户事件。 组件列表:TDXDraw DirectDraw 和 Direct3D 组件 TDXDIB 容纳DIB(设备无关位图,Device Independent Bitmap)的组件 TDXImageList 图片列表组件 TDX3D Direct3D 组件 (和TDXDraw一起使用) TDXSound DirectSound 组件 TDXWave 容纳 Wave(波形音频文件)的组件 TDXWaveList Wave文件列表组件 TDXInput 输入组件,包括键盘和手柄输入 TDXPlay 通讯组件,用于网络游戏开发 TDXSpriteEngine 精灵引擎,用于管理游戏中产生的精灵(Sprite)详见游戏开发过程 TDXTimer 高速定时器,比 TTimer 要更快,更准确 TDXPaintBox TpaintBox 的 DIB 版本 TDXForm 优化过的 TForm,专门用于游戏开发 目前的 DelphiX 包支持 Borland Delphi 3/4/5/6 和 DirectX 7.0 以上版本,D7下测试也可。安装了 DelphiX 之后,我们将不需要再安装微软的 DirectX SDK。

15,471

社区成员

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

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