简体   繁体   English

Python:运行pyautogui.click时出现“拒绝访问”错误

[英]Python: Getting Access is denied error while running pyautogui.click

Here's the full traceback from Shell: 这是Shell的完整回溯:

 File "C:\Users\Sean\Documents\pyships\mouseclicker.py", line 22, in <module>
    pyautogui.click()
  File "C:\Users\Sean\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyautogui\__init__.py", line 362, in click
    platformModule._click(x, y, 'left')
  File "C:\Users\Sean\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyautogui\_pyautogui_win.py", line 437, in _click
    _sendMouseEvent(MOUSEEVENTF_LEFTCLICK, x, y)
  File "C:\Users\Sean\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pyautogui\_pyautogui_win.py", line 480, in _sendMouseEvent
    raise ctypes.WinError()
PermissionError: [WinError 5] Access is denied.

My current bad workaround is commenting out the following lines in _pyautogui_win.py: 我当前的错误解决方法是注释_pyautogui_win.py中的以下几行:

if ctypes.windll.kernel32.GetLastError() != 0:
raise ctypes.WinError()

Python is running in administrator mode, not sure how to go about fixing this properly. Python正在管理员模式下运行,不确定如何正确修复此问题。 Especially since it was working yesterday and is only throwing errors today. 特别是因为它昨天运行并且今天只抛出错误。 The weirdest part is it actually executes the click, and hangs the script after that. 最奇怪的部分是它实际上执行了单击,然后将脚本挂起。

The specific lines of code causing it are: 导致它的特定代码行是:

    pyautogui.press('d')
    pyautogui.click()
    pyautogui.keyUp('d')

If anyone knows a better way of attaching a key modifier to the click that would be excellent too! 如果有人知道将键修饰符附加到点击的更好方法,那也将是极好的选择!

I now have 3 workarounds: 我现在有3个解决方法:

1 Your Solution to comment out the part of _pyautogui_win.py: 1您的解决方案以注释掉_pyautogui_win.py的一部分:

2 Create an error trap that ignores specifically the WinError 5 2创建一个错误陷阱,专门忽略WinError 5

def ClickFix():
    try:
        pyautogui.click()
    except PermissionError:
        pass

3 Make your own wrapper 3制作自己的包装纸

pip install win32api pip安装win32api

this will install win32api and it's prerequisites then to make a simple click wrapper for win32api use this function: 这将安装win32api,这是先决条件,然后使用以下功能为win32api创建简单的单击包装:

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

Thanks to PyAutoGui click permissions error for #2 由于PyAutoGui #2的点击权限错误

Thanks to pyautogui crashes whenever it clicks for #3 感谢pyautogui每次点击 #3 都会崩溃

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM