gpt4 book ai didi

python - 属性错误 : 'module' object has no attribute 'windll' in python

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:58 25 4
gpt4 key购买 nike

我正在尝试自动化 Web 应用程序。我应该单击一个链接,它会打开一个打印窗口。我无法在 selenium 自动化中实现这一点。所以我使用 ctypes 来执行 tab 之类的按键,输入关键事件。下面是我为实现这一目标而开发的库。我通过调用相应的方法来处理事件。

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
class KeyEvents :
def PressKey(self,hexKeyCode):

extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

def ReleaseKey(self,hexKeyCode):

extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0x0002,0,ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))


def PressAltTab(self):
'''
Press Alt+Tab and hold Alt key for 2 seconds in order to see the overlay
'''

self.PressKey(0x012) #Alt
self.PressKey(0x09) #Tab
self.ReleaseKey(0x09) #~Tab
time.sleep(2)
self.ReleaseKey(0x012)

def PressTab(self):
'''
Press Tab Key
'''
#self.AltTab()
self.PressKey(0x09) #Tab
self.ReleaseKey(0x09)

def PressEnter(self):
'''
PressEnter
'''
#self.AltTab()
self.PressKey(0x0D)#Enter Key
self.ReleaseKey(0x0D)

但是现在当我在 linux 中使用代码时出现以下错误

File "KeyEvents.py", line 4, in <module>
SendInput = ctypes.windll.user32.SendInput
AttributeError: 'module' object has no attribute 'windll'

我不明白这里出了什么问题。我是 python 的新手。请在这里帮助我。我应该怎么做才能在 linux 中实现按键事件?

最佳答案

我在 Raspian Jessie (Raspberry Pi) 上运行的这段代码也遇到了同样的问题。我认为这是因为 windll.user32.SendInput 仅适用于 Windows。似乎它没有跨平台的灵 active ..

如果你需要在 Linux 上做 Keypress 事件,你可以试试 xdotools。我认为它 super 简单,应该可以满足您的所有需求。

要安装,只需执行

sudo apt-get install xdotool

xdotool key alt+Tab

按 alt+Tab 键。

更详细的可以引用 http://xmodulo.com/simulate-key-press-mouse-movement-linux.html

关于python - 属性错误 : 'module' object has no attribute 'windll' in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33233449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com