Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么pywinauto在I';我在看什么?_Python_Python 2.x_Pywinauto - Fatal编程技术网

Python 为什么pywinauto在I';我在看什么?

Python 为什么pywinauto在I';我在看什么?,python,python-2.x,pywinauto,Python,Python 2.x,Pywinauto,我正在尝试让Windows任务调度器在我登录时自动运行应用程序,但计算机已切换到其他用户。我目前有: from time import sleep from pywinauto.application import Application app = Application(backend='uia').connect(path='program.exe') sleep(5) if 'System Administration' in app.top_window().window_text(

我正在尝试让Windows任务调度器在我登录时自动运行应用程序,但计算机已切换到其他用户。我目前有:

from time import sleep
from pywinauto.application import Application

app = Application(backend='uia').connect(path='program.exe')
sleep(5)
if 'System Administration' in app.top_window().window_text():
    app.top_window().SignOut.click()
    sleep(5)
    app.top_window().print_control_identifiers(filename='controls.txt')
此时,controls.txt具有:

Control Identifiers:


Dialog - 'System Administration - V6.0.3'    (L448, T158, R1471, B922)
[u'System Administration - V6.0.31', u'System Administration - V6.0.30', u'System Administration - V6.0.3', u'System Administration - V6.0.3Dialog', u'Dialog']
child_window(title="System Administration - V6.0.3", control_type="Window")

   | 
...
   | 
   | Button - 'Sign out'    (L980, T399, R1120, B444)
   | ['Button8', u'Sign out', u'Sign outButton']
   | child_window(title="Sign out", control_type="Button")

   | 
表示尚未单击“注销”按钮,因为这应该是下一组菜单。然而,让我真正困惑的是,如果我登录并观看应用程序,那么一切都会正常运行:点击按钮,应用程序进入下一组菜单

我尝试过的其他事情:

pywinauto.actionlogger.enable()
会导致:

2018-05-06 16:15:15,145;INFO
Invoked button "Sign out"
2018-05-07 12:00:11,730;ERROR
Traceback (most recent call last):
  File "myscript.py", line 7, in <module>
    app.top_window().SignOut.click_input()
  File "C:\Python27\lib\site-packages\pywinauto\base_wrapper.py", line 671, in click_input
    key_down=key_down, key_up=key_up)
  File "C:\Python27\lib\site-packages\pywinauto\mouse.py", line 125, in _perform_click_input
    win32api.SetCursorPos((coords[0], coords[1]))
error: (0, 'SetCursorPos', 'No error message is available')
2018-05-08 08:45:05,908;ERROR
Traceback (most recent call last):
  File "myscript.py", line 4, in <module>
    app = Application(backend='uia').connect(path='program.exe')
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 955, in connect
    self.__warn_incorrect_bitness()
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 1028, in __warn_incorrect_bitness
    if self.backend.name == 'win32' and self.is64bit() != is_x64_Python():
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 1043, in is64bit
    return handleprops.is64bitprocess(self.process)
  File "C:\Python27\lib\site-packages\pywinauto\handleprops.py", line 172, in is64bitprocess
    phndl = win32api.OpenProcess(win32con.MAXIMUM_ALLOWED, 0, process_id)
error: (5, 'OpenProcess', 'Access is denied.')
(但仍然没有单击按钮)

app.top\u window()。注销。单击输入()
结果:

2018-05-06 16:15:15,145;INFO
Invoked button "Sign out"
2018-05-07 12:00:11,730;ERROR
Traceback (most recent call last):
  File "myscript.py", line 7, in <module>
    app.top_window().SignOut.click_input()
  File "C:\Python27\lib\site-packages\pywinauto\base_wrapper.py", line 671, in click_input
    key_down=key_down, key_up=key_up)
  File "C:\Python27\lib\site-packages\pywinauto\mouse.py", line 125, in _perform_click_input
    win32api.SetCursorPos((coords[0], coords[1]))
error: (0, 'SetCursorPos', 'No error message is available')
2018-05-08 08:45:05,908;ERROR
Traceback (most recent call last):
  File "myscript.py", line 4, in <module>
    app = Application(backend='uia').connect(path='program.exe')
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 955, in connect
    self.__warn_incorrect_bitness()
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 1028, in __warn_incorrect_bitness
    if self.backend.name == 'win32' and self.is64bit() != is_x64_Python():
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 1043, in is64bit
    return handleprops.is64bitprocess(self.process)
  File "C:\Python27\lib\site-packages\pywinauto\handleprops.py", line 172, in is64bitprocess
    phndl = win32api.OpenProcess(win32con.MAXIMUM_ALLOWED, 0, process_id)
error: (5, 'OpenProcess', 'Access is denied.')
2018-05-07 12:00:11730;错误
回溯(最近一次呼叫最后一次):
文件“myscript.py”,第7行,在
app.top\u window()。注销。单击输入()
文件“C:\Python27\lib\site packages\pywinauto\base\u wrapper.py”,第671行,单击输入
按键向下=按键向下,按键向上=按键向上)
文件“C:\Python27\lib\site packages\pywinauto\mouse.py”,第125行,在“执行”中单击“输入”
win32api.SetCursorPos((coords[0],coords[1]))
错误:(0,'SetCursorPos','没有可用的错误消息')
我不知道那是什么意思。让任务计划程序“以最高权限运行”会导致:

2018-05-06 16:15:15,145;INFO
Invoked button "Sign out"
2018-05-07 12:00:11,730;ERROR
Traceback (most recent call last):
  File "myscript.py", line 7, in <module>
    app.top_window().SignOut.click_input()
  File "C:\Python27\lib\site-packages\pywinauto\base_wrapper.py", line 671, in click_input
    key_down=key_down, key_up=key_up)
  File "C:\Python27\lib\site-packages\pywinauto\mouse.py", line 125, in _perform_click_input
    win32api.SetCursorPos((coords[0], coords[1]))
error: (0, 'SetCursorPos', 'No error message is available')
2018-05-08 08:45:05,908;ERROR
Traceback (most recent call last):
  File "myscript.py", line 4, in <module>
    app = Application(backend='uia').connect(path='program.exe')
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 955, in connect
    self.__warn_incorrect_bitness()
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 1028, in __warn_incorrect_bitness
    if self.backend.name == 'win32' and self.is64bit() != is_x64_Python():
  File "C:\Python27\lib\site-packages\pywinauto\application.py", line 1043, in is64bit
    return handleprops.is64bitprocess(self.process)
  File "C:\Python27\lib\site-packages\pywinauto\handleprops.py", line 172, in is64bitprocess
    phndl = win32api.OpenProcess(win32con.MAXIMUM_ALLOWED, 0, process_id)
error: (5, 'OpenProcess', 'Access is denied.')
2018-05-08 08:45:05908;错误
回溯(最近一次呼叫最后一次):
文件“myscript.py”,第4行,在
app=Application(backend='uia').connect(path='program.exe')
文件“C:\Python27\lib\site packages\pywinauto\application.py”,第955行,在connect中
self.\uuuu警告\u不正确\u咬位()
文件“C:\Python27\lib\site packages\pywinauto\application.py”,第1028行,在\uuuu warn\u不正确\u位
如果self.backend.name==“win32”和self.is64位()!=是_x64_Python():
文件“C:\Python27\lib\site packages\pywinauto\application.py”,第1043行,IS64位
返回handleprops.is64位进程(self.process)
文件“C:\Python27\lib\site packages\pywinauto\handleprops.py”,第172行,在is64bitprocess中
phndl=win32api.OpenProcess(允许的win32con.MAXIMUM\u,0,进程id)
错误:(5,“OpenProcess”,“访问被拒绝”。)
(这也是令人困惑的,因为Python和程序都是32位的。)


当我切换到其他用户帐户时,如何让pywinauto单击该按钮?

当Windows用户被锁定时,您没有活动桌面。因此,任何GUI自动化工具都无法工作。这是操作系统限制。您应该在窗口模式(非最小化)下使用RDP的VM或远程计算机。VNC服务器软件可以用随时保持活动桌面(如VNC服务器)的可能性取代RDP。或应设置特殊的mstsc设置,以允许最小化

对于UAC安全确认,也可以看到SetCursorPos问题。这也是由操作系统设计的


请确保以管理员身份运行脚本。目前这些问题都没有出现,但0.6.5将警告权限不足。

(我终于回到这里了。)奇怪的是,我的办公室里有一台电脑。我可以在那台计算机上安排这个脚本并切换到其他用户,脚本运行正常。任何其他计算机(或者如果我锁定我的帐户而不是切换到其他计算机),脚本都无法工作。我不知道是什么让这台计算机与众不同(我担心任何让它与众不同的东西都会停止,所以脚本会停止工作)。猜猜看?