Я пытаюсь создать службу Windows (из скрипта Python), которая регистрирует каждый раз, когда пользователь блокирует и разблокирует рабочую станцию.
Когда я запускаю службу в режиме отладки с python WinLockUnlock.py debug
, служба работаеткак и ожидалось.
Но если я запускаю службу с python WinLockUnlock.py start
Переменная result
(SwitchDesktop(hDesktop)
) всегда равна 0. Проблема только в функциях user32, служба записывает в файл журнала безлюбая проблема.
Итак, почему функции user32 работают только в режиме отладки?
(я уже пытался запустить службу с учетной записью администратора, но это не сработало)
код в WinLockUnlock.py
:
import time
from ctypes import WinDLL
from SMWinService import SMWinService
class WinLockUnlock(SMWinService):
_svc_name_ = 'LockUnlock'
_svc_display_name_ = 'Lock Unlock Script'
_svc_description_ = 'Script que registra cuando se bloquea/desbloquea la sesión del usuario'
def start(self):
self.isrunning = True
self.session_status = True
self.writemsg('Service started')
def stop(self):
self.isrunning = False
self.writemsg('Service stopped')
def main(self):
user32 = WinDLL('user32', use_last_error=True)
OpenDesktop = user32.OpenDesktopW
SwitchDesktop = user32.SwitchDesktop
DESKTOP_SWITCHDESKTOP = 0x0100
while self.isrunning:
hDesktop = OpenDesktop('default', 0, False, DESKTOP_SWITCHDESKTOP)
result = SwitchDesktop(hDesktop)
self.writemsg('Test Result: {0}'.format(result))
if result:
if self.session_status == False:
self.session_status = True
self.writemsg('----------UNLOCKED----------')
else:
if self.session_status == True:
self.session_status = False
self.writemsg('----------LOCKED----------')
time.sleep(2)
def writemsg(self, msg):
_date = time.strftime('%Y-%m-%d')
_time = time.strftime('%H:%M:%S')
filename = 'D:/Temp/TestPython/pyserv{0}.txt'.format(_date)
with open(filename, 'a', newline='', encoding='utf-8') as file:
file.write('{0} {1}: {2}\r\n'.format(_date, _time, msg))
if __name__ == '__main__':
WinLockUnlock.parse_command_line()