taojy123 / KeymouseGo

类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input
http://taojy123.github.io/KeymouseGo
GNU General Public License v2.0
6.8k stars 994 forks source link

其实这个key mouse库不是很好, 用pyautogui结合pydirectinput这两个库的鼠标键盘功能会更好用 #286

Open delevinzhong opened 4 months ago

delevinzhong commented 4 months ago

pyautogui 可供普通情况的使用 pydirectinput 可以在例如游戏的场景中正常使用鼠标键盘功能

delevinzhong commented 4 months ago

仔细看了源代码,发现作者在linux下用的是pyautogui, 在windows下用的是win32api, 不是很明白其实windows下用pydirectinput有什么问题吗? 因为游戏场景中,pydirectinput会更实用。

Monomux commented 4 months ago

没问题,可以换,虽然说对于有反作弊系统的游戏来说用哪个库都一样。

viprespro commented 4 months ago

pydirectinput

就我测试的情况来看 有个问题我没想通 我在windows上测试 游戏里面我使用pyautogui与pydirectinput去模拟按键都不行 如果作者是使用这两个库来模拟按键的话 按道理应该也不行 但是我用录制的点击游戏画面的时候 却能执行成功 这让我有点费解?

delevinzhong commented 4 months ago

pydirectinput

就我测试的情况来看 有个问题我没想通 我在windows上测试 游戏里面我使用pyautogui与pydirectinput去模拟按键都不行 如果作者是使用这两个库来模拟按键的话 按道理应该也不行 但是我用录制的点击游戏画面的时候 却能执行成功 这让我有点费解?

你测试作者的程序在游戏中能用吗? 作者代码里面Linux用的是pyautogui,Windows下用的是win32api,不过我测试QQ飞车是用不了。不过我不是很明白为什么Windows下没有选择用pydirectinput,不知道是不是代码在定位像素点或者其他方面遇到有问题。但是我自己写的windows下用pydirectinput在游戏中是可以使用,前提是你执行的时候要用管理员运行程序就没问题。所以你可以试试管理员权限运行,pydirectinput这个库应该是没问题的。

ZutJoe commented 4 months ago

你测试作者的程序在游戏中能用吗? 作者代码里面Linux用的是pyautogui,Windows下用的是win32api,不过我测试QQ飞车是用不了。不过我不是很明白为什么Windows下没有选择用pydirectinput,不知道是不是代码在定位像素点或者其他方面遇到有问题。但是我自己写的windows下用pydirectinput在游戏中是可以使用,前提是你执行的时候要用管理员运行程序就没问题。所以你可以试试管理员权限运行,pydirectinput这个库应该是没问题的。

其实算是历史遗留问题,这个项目本身最开始就是为了方便作者在 windows 上面做重复操作才做的(大概),而且不是为了游戏做的 https://github.com/taojy123/KeymouseGo/issues/121#issuecomment-1149585054 https://github.com/taojy123/KeymouseGo/issues/156#issuecomment-1252552152 ,至于适配 linux 是后面才做的

viprespro commented 4 months ago

pydirectinput

就我测试的情况来看 有个问题我没想通 我在windows上测试 游戏里面我使用pyautogui与pydirectinput去模拟按键都不行 如果作者是使用这两个库来模拟按键的话 按道理应该也不行 但是我用录制的点击游戏画面的时候 却能执行成功 这让我有点费解?

你测试作者的程序在游戏中能用吗? 作者代码里面Linux用的是pyautogui,Windows下用的是win32api,不过我测试QQ飞车是用不了。不过我不是很明白为什么Windows下没有选择用pydirectinput,不知道是不是代码在定位像素点或者其他方面遇到有问题。但是我自己写的windows下用pydirectinput在游戏中是可以使用,前提是你执行的时候要用管理员运行程序就没问题。所以你可以试试管理员权限运行,pydirectinput这个库应该是没问题的。

我特意对我的游戏再次测试 开启录制 - 鼠标点击游戏画面任务进行移动 - 结束录制 然后我启动脚本 确实能够正常执行 pyautogui和pydirectinput我都测试过不行 是以管理员身份运行的 可能他们底层都有基于win32api去调用发送消息 然而对于按键 我测试的游戏是应该是屏蔽了这种窗口消息 但是我找到另外其他方式 凡是以驱动级按键去调用点击都能成功,所以我比较疑惑的点 作者的这个库按键真的不是驱动级的吗 希望作者可以看到解答一下疑惑。

Monomux commented 4 months ago

pyautogui和pydirectinput我都测试过不行

奇怪,PyAutoGUI,PyDirectInputPyWin32在Windows系统下底层都是通过调用系统api实现操作的吧,下面是我找到的一些资料:

Windows相关的接口为mouse_event, SendInput, keybd_event PyAutoGUIPyDirectInput分别使用了cpythonctypes库给出的mouse_event, keybd_eventSendInput系统接口 PyWin32使用了mouse_event, keybd_event系统接口

viprespro commented 4 months ago

pyautogui和pydirectinput我都测试过不行

奇怪,PyAutoGUI,PyDirectInputPyWin32在Windows系统下底层都是通过调用系统api实现操作的吧,下面是我找到的一些资料:

Windows相关的接口为mouse_event, SendInput, keybd_event PyAutoGUIPyDirectInput分别使用了cpythonctypes库给出的mouse_event, keybd_eventSendInput系统接口 PyWin32使用了mouse_event, keybd_event系统接口

应该没错 windows平台下都是调用系统api实现 我测试的游戏 我发现只是对鼠标屏蔽 部分按键还是可以用 鼠标则当使用驱动级的调用就没问题