Я создал службу Windows в Python и попытался получить текущее окно с помощью
GetForegroundWindow () из ctypes.
Чтобы проверить, заблокирован ли ПК (GetForegroundWindow () == когда ПК заблокирован, работает нормально в обычном скрипте Python)
Очевидно, что Служба должна быть «Интерактивной службой» для распознавания текущего окна.
Итак, вопрос таков: есть ли способ запустить Службу как интерактивную службу?
Служба Windows структурирована следующим образом (я удалил некоторые части кода, поэтому пост не такой длинный):
class Service(win32serviceutil.ServiceFramework):
_svc_name_ = "Service"
_svc_display_name_ = "Service"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
# Create an event which we will use to wait on.
# The "service stop" request will set this event.
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
# Tell ReportServiceStatus we are starting the stop process.
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING, waitHint=10000)
# And set stop event.
win32event.SetEvent(self.hWaitStop)
def GetAcceptedControls(self):
result = win32serviceutil.ServiceFramework.GetAcceptedControls(self)
result |= win32service.SERVICE_ACCEPT_PRESHUTDOWN
return result
def SvcOtherEx(self, control, event_type, data):
if control == win32service.SERVICE_CONTROL_PRESHUTDOWN:
#_log('received a pre-shutdown notification')
self.SvcStop()
def SvcDoRun(self):
user32 = ctypes.windll.User32
#Do Something
while True:
time.sleep(1)
print(str(user32.GetForegroundWindow()))
# Wait until the Service is stopped
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)