Я пытаюсь, чтобы Windows Task Scheduler автоматизировал приложение с помощью pywinauto , когда я вошел в систему, но компьютер переключен на другого пользователя. В настоящее время у меня есть:
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')
В этот момент, control.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"
(но по-прежнему не нажимает кнопку)
app.top_window().SignOut.click_input()
Результат:
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.')
(Это также сбивает с толку, потому что Python и программа 32-битные.)
Как я могу заставить pywinauto нажимать кнопку, когда я переключаюсь на другую учетную запись пользователя?