模拟按键大师控制游戏Python问题,怎么解决

18 条评论分享收藏感谢收起赞同 13 条评论分享收藏感谢收起写回答1 个回答被折叠()Python-模拟鼠标键盘动作 - 简书
Python-模拟鼠标键盘动作
在使用电脑的时候,偶尔有需求要模拟鼠标键盘,进行一些机械重复的操作(刷新网页、抢票、某些小游戏等)。如果为此专门下载一个按键精灵,总感觉杀鸡用牛刀,所以就开始探索一些轻量级解决方案。本人电脑上配置了Python,自然就想到那句名言
人生苦短,我用Python
Life is short, you need Python -Bruce Eckel
参考网上的各种例子后,发现了这个项目。在配置完成后,调用非常简便。
进入项目主页,可以看到这个Python库是跨平台支持的,但是对应不同平台,需要安装依赖库。
Linux - Xlib (python-xlib)
Mac - Quartz, AppKit
Windows - pywin32, pyHook
使用pip工具,直接安装
pip install PyUserInput
以下部分参考PyUserInput项目在Python官网的只做简要翻译,方便理解。详细方法可以调用help()函数查看。
在安装完PyUserInput后,pymouse和pykeyboard模块就被安装到你的Python路径下。
建立一个鼠标和键盘对象:
from pymouse import PyMouse
from pykeyboard import PyKeyboard
m = PyMouse()
k = PyKeyboard()
接下来是一个示例,完成点击屏幕中央并键入“Hello, World!”的功能:
x_dim, y_dim = m.screen_size()
m.click(x_dim/2, y_dim/2, 1)
k.type_string('Hello, World!')
PyKeyboard还有很多种方式来发送键盘键入:
# pressing a key
k.press_key('H')
# which you then follow with a release of the key
k.release_key('H')
# or you can 'tap' a key which does both
k.tap_key('e')
# note that that tap_key does support a way of
repeating keystrokes with a interval time between each
k.tap_key('l',n=2,interval=5)
# and you can send a string if needed too
k.type_string('o World!')
并且它还支持很多特殊按键:
#Create an Alt+Tab combo
k.press_key(k.alt_key)
k.tap_key(k.tab_key)
k.release_key(k.alt_key)
k.tap_key(k.function_keys[5]) # Tap F5
k.tap_key(k.numpad_keys['Home']) # Tap 'Home' on the numpad
k.tap_key(k.numpad_keys[5], n=3) # Tap 5 on the numpad, thrice
注意,你也可以使用press_keys方法将多个键一起发送(例如,使用某些组合键):
# Mac example
k.press_keys(['Command','shift','3'])
# Windows example
k.press_keys([k.windows_l_key,'d'])
平台之间的一致性是一个很大的挑战,请参考你使用的操作系统对应的源码,来理解你需要使用的按键格式。例如:
k.tap_key(k.alt_key)
k.tap_key('Alternate')
我还想特别说明一下PyMouseEvent和PyKeyboardEvent的使用。
这些对象是一个架构用于监听鼠标和键盘的输入;他们除了监听之外不会做任何事,除非你继承他们【注1】。PyKeyboardEvent为编写完成,所以这里是一个继承PyMouseEvent的例子:
from pymouse import PyMouseEvent
def fibo():
while True:
a, b = b, a+b
class Clickonacci(PyMouseEvent):
def __init__(self):
PyMouseEvent.__init__(self)
self.fibo = fibo()
def click(self, x, y, button, press):
'''Print Fibonacci numbers when the left click is pressed.'''
if button == 1:
print self.fibo.next()
else: # Exit if any other mouse button used
self.stop()
C = Clickonacci()
注1:原文为
These objects are a framework for listening for mous theydon't do anything besides listen until you subclass them.
# Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://link.jianshu.com?t=https%3A%2F%2Fgithub.com%2Fvin...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:)大多数的美国人读 ubuntu 时,将 u 作为元音发音,类似单词 who 或者 boo ,重音在第二...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、...
1.没找到文档页面,输出了自定义的反馈信息 2.这个问题是资源映射不到导致,swagger-ui.html是在jar包里面,SpringBoot自动配置也找不到这个页面。问题处理:
感觉一个人对服务员的态度,能体现大部分的性格。 如果服务员做错了,是什么也不说算了,还是强烈要求道歉呢? 人家道歉了,是说算了算了,还是一条一条列出来你错在哪儿了? 性格真不一样。
在梦中,回忆把我劫走 青青萌萌 树叶撩拨微风 狗亲吻花香 远处 白云艳遇夕阳 孕育着黑夜 蝙蝠飞来示威 夜是独行者 不欢迎你。 梦因失眠起,眠为梦而失。何去何从,现实何解?
一、句子——英文(E) 1、The emergence of modern hospitals as places for babies to be born coincided with the popularity of feeding babies with arti...(hotessay)
(编程分享)
(编程分享)
(编程分享)
(编程分享)
第三方登录:转于博客 https://www.cnblogs.com/huidaoli/p/7398392.html,原作者:
# _*_ coding:UTF-8 _*_
import win32api
import win32con
import win32gui
from ctypes import *
import time
VK_CODE = {
'backspace':0x08,
'tab':0x09,
'clear':0x0C,
'enter':0x0D,
'shift':0x10,
'ctrl':0x11,
'alt':0x12,
'pause':0x13,
'caps_lock':0x14,
'esc':0x1B,
'spacebar':0x20,
'page_up':0x21,
'page_down':0x22,
'end':0x23,
'home':0x24,
'left_arrow':0x25,
'up_arrow':0x26,
'right_arrow':0x27,
'down_arrow':0x28,
'select':0x29,
'print':0x2A,
'execute':0x2B,
'print_screen':0x2C,
'ins':0x2D,
'del':0x2E,
'help':0x2F,
'numpad_0':0x60,
'numpad_1':0x61,
'numpad_2':0x62,
'numpad_3':0x63,
'numpad_4':0x64,
'numpad_5':0x65,
'numpad_6':0x66,
'numpad_7':0x67,
'numpad_8':0x68,
'numpad_9':0x69,
'multiply_key':0x6A,
'add_key':0x6B,
'separator_key':0x6C,
'subtract_key':0x6D,
'decimal_key':0x6E,
'divide_key':0x6F,
'F1':0x70,
'F2':0x71,
'F3':0x72,
'F4':0x73,
'F5':0x74,
'F6':0x75,
'F7':0x76,
'F8':0x77,
'F9':0x78,
'F10':0x79,
'F11':0x7A,
'F12':0x7B,
'F13':0x7C,
'F14':0x7D,
'F15':0x7E,
'F16':0x7F,
'F17':0x80,
'F18':0x81,
'F19':0x82,
'F20':0x83,
'F21':0x84,
'F22':0x85,
'F23':0x86,
'F24':0x87,
'num_lock':0x90,
'scroll_lock':0x91,
'left_shift':0xA0,
'right_shift ':0xA1,
'left_control':0xA2,
'right_control':0xA3,
'left_menu':0xA4,
'right_menu':0xA5,
'browser_back':0xA6,
'browser_forward':0xA7,
'browser_refresh':0xA8,
'browser_stop':0xA9,
'browser_search':0xAA,
'browser_favorites':0xAB,
'browser_start_and_home':0xAC,
'volume_mute':0xAD,
'volume_Down':0xAE,
'volume_up':0xAF,
'next_track':0xB0,
'previous_track':0xB1,
'stop_media':0xB2,
'play/pause_media':0xB3,
'start_mail':0xB4,
'select_media':0xB5,
'start_application_1':0xB6,
'start_application_2':0xB7,
'attn_key':0xF6,
'crsel_key':0xF7,
'exsel_key':0xF8,
'play_key':0xFA,
'zoom_key':0xFB,
'clear_key':0xFE,
'\\':0xDC,
class POINT(Structure):
_fields_ = [("x", c_ulong),("y", c_ulong)]
def get_mouse_point():
po = POINT()
windll.user32.GetCursorPos(byref(po))
return int(po.x), int(po.y)
def mouse_click(x=None,y=None):
if not x is None and not y is None:
mouse_move(x,y)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_dclick(x=None,y=None):
if not x is None and not y is None:
mouse_move(x,y)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_move(x,y):
windll.user32.SetCursorPos(x, y)
def key_input(str=''):
for c in str:
win32api.keybd_event(VK_CODE[c],0,0,0)
win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(0.01)
if __name__ == "__main__":
mouse_click(500,280)
str1 = 'python'
key_input(str1)
mouse_click()自己增加部分部分:调用单独按键的语句:
if __name__ == '__main__':    win32api.keybd_event(0x12, 0, 0, 0)
  win32api.keybd_event(0x41, 0, 0, 0)  time.sleep(1)  win32api.keybd_event(0x12, 0, win32con.KEYEVENTF_KEYUP, 0)  win32api.keybd_event(0x41, 0, win32con.KEYEVENTF_KEYUP, 0)
阅读(...) 评论()如何让python模拟按键脚本能输入到游戏_百度知道
如何让python模拟按键脚本能输入到游戏
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
这个挺难的。除非游戏被破解了,或者是游戏内置有脚本。否则做一个游戏要研究好久,而且要一点点的试验。如果游戏升级了,可能参数又不能用了,又要重新做。技术只是一方面,麻烦的是需要理解游戏的一些数据与规则。
采纳率:86%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 游戏模拟按键 的文章

 

随机推荐