如何让python模拟按键输入脚本能输入到游戏

16被浏览4,178分享邀请回答13 条评论分享收藏感谢收起import ctypes
import time
SendInput = ctypes.windll.user32.SendInput
# C struct redefinitions
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):
_fields_ = [("wVk", ctypes.c_ushort),
("wScan", ctypes.c_ushort),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", PUL)]
class HardwareInput(ctypes.Structure):
_fields_ = [("uMsg", ctypes.c_ulong),
("wParamL", ctypes.c_short),
("wParamH", ctypes.c_ushort)]
class MouseInput(ctypes.Structure):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time",ctypes.c_ulong),
("dwExtraInfo", PUL)]
class Input_I(ctypes.Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("hi", HardwareInput)]
class Input(ctypes.Structure):
_fields_ = [("type", ctypes.c_ulong),
("ii", Input_I)]
# Actuals Functions
def PressKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008 | 0x0002, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
# directx scan codes http://www.gamespp.com/directx/directInputKeyboardScanCodes.html
while (True):
PressKey(0x11)
time.sleep(1)
ReleaseKey(0x11)
time.sleep(1)
源地址在此: 。07 条评论分享收藏感谢收起写回答1 个回答被折叠()如何让python模拟按键脚本能输入到游戏_百度知道
如何让python模拟按键脚本能输入到游戏
我有更好的答案
用第三方Python库:PyUserInput可以模拟鼠标、键盘输入
采纳率:16%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Python实现windows下模拟按键和鼠标点击的方法
转载 & & 作者:liuli
这篇文章主要介绍了Python实现windows下模拟按键和鼠标点击的方法,涉及Python模拟实现鼠标及键盘事件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了Python实现windows下模拟按键和鼠标点击的方法。分享给大家供大家参考。具体如下:
这段代码可以模拟在窗口上按下按键、鼠标左键点击、鼠标右键点击、鼠标双击等等
# _*_ 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()
str = 'hello'
key_input(str)
希望本文所述对大家的Python程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具python一次简单游戏辅助的经历(截取屏幕模拟键盘)
我的图书馆
python一次简单游戏辅助的经历(截取屏幕模拟键盘)
背景:忆起10年前玩过的网游《热血江湖》。游戏中不定时出现可使用必杀技提示,需要在此时键盘按键(必杀技需根据提示按多个键位)才可使用。思路一:通过python调用windows大漠插件dm.dll,使用插件中封装好的函数来操作。但是XP系统使用python的win32模块总是报错(可能系统问题),虽然换了win7就正常了,感觉不爽,于是有了思路二。思路二:PIL定时获取指定位置图片,与按键提示图片对比,如匹配则模拟按对应按键。上代码结合注释(通过游戏内聊天输入框测试通过):#coding:utf-8from ctypes import *from PIL import ImageGrab, Imageimport ctypesimport mathimport operatorimport timeimport win32guiimport win32apiimport win32conimport win32com.clientclass RECT(ctypes.Structure):&&&&_fields_ = [('left', ctypes.c_int), &&&&&&&&&&&&&&&&('top', ctypes.c_int), &&&&&&&&&&&&&&&&('right', ctypes.c_int), &&&&&&&&&&&&&&&&('bottom', ctypes.c_int)]def get_image_histogram(imgobj):&&&&return imgobj.histogram()def pil_image_similarity(h1, h2):&&&&rms = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )&&&&return rmsif __name__=='__main__':&&&&time.sleep(5) #首先休眠5秒,留出时间从cmd窗口切换至游戏窗口&&&&print 'start'&&&&dm = win32com.client.Dispatch('dm.dmsoft' ) #调用大漠插件&&&&h_a = get_image_histogram(Image.open('a.jpg'))&&&&h_d = get_image_histogram(Image.open('d.jpg'))&&&&h_s = get_image_histogram(Image.open('s.jpg'))&&&&HISTS = {'a.jpg': h_a, 'd.jpg': h_d, 's.jpg': h_s}&&&&s = 0 #成功按键计数器&&&&while 1:&&&&&&&&try:&&&&&&&&&&&&rect = RECT()&&&&&&&&&&&&HWND = win32gui.GetForegroundWindow()#获取当前窗口句柄&&&&&&&&&&&&ctypes.windll.user32.GetWindowRect(HWND, ctypes.byref(rect))#获取当前窗口坐标&&&&&&&&&&&&coordinate = (rect.left+385, rect.top+400, rect.right-390, rect.bottom-195)#转换为预截图窗口坐标,根据游戏调整&&&&&&&&&&&&pic = ImageGrab.grab(coordinate)#截图&&&&&&&&&&&&pic.save('123.jpg')&&&&&&&&&&&&pic = Image.open('123.jpg') #将截图对象换成Image对象,这样histogram结果才准确&&&&&&&&&&&&h_pic = get_image_histogram(pic)&&&&&&&&&&&&&&&&&&&&&&&&#按键提示的原图片和对应键码值&&&&&&&&&&&&img_list = {'a.jpg': 65, 'd.jpg': 68, 's.jpg': 83}&&&&&&&&&&&&for img in img_list.keys():&&&&&&&&&&&&&&&&if(pil_image_similarity(HISTS[img], h_pic)&1): #用新截图与原图对比&&&&&&&&&&&&&&&&&&&&dm.keypress(img_list[img]) #如匹配则调用大漠插件函数按下对应键&&&&&&&&&&&&&&&&&&&&if img=='d.jpg':&&&&&&&&&&&&&&&&&&&&&&&&s += 1 #成功完成连击,计数器++&&&&&&&&&&&&&&&&&&&&&&&&print '%s ok' % s&&&&&&&&&&&&&&&&&&&&break&&&&&&&&except:&&&&&&&&&&&&pass&&&&&&&&time.sleep(1) #游戏按键提示持续2-3秒,休眠一秒节省资源结局:轻看了这款已入末路,bug百出的游戏。它的防外挂可以识别windows消息模拟按键,除聊天框可以模拟输入成功外,其余均失败。应对方法:第二天使用了大漠插件的硬件模拟,搞定收工。备注:实际上整个过程都可以用大漠完成,而且还能兼容当前/非当前窗口、多进程等情况。但用自己写的脚本感觉更cool~最后:使用大漠插件不要忘记注册dm.dll到电脑中。
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 python 驱动模拟按键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信