2009-12-24 19 views
2

J'ai un script python qui est en cours d'exécution en arrière-plan avec pythonw. Si je ferme mon ordinateur portable, il passe en mode veille. et quand j'ouvre mon ordinateur portable, mon programme a peu de fonctionnalité et se fige après quelques secondes. Est-il possible que mon script puisse déterminer si mon ordinateur passe en mode veille, afin qu'il puisse rester inactif et redémarrer lorsque je rouvre mon ordinateur portable?Python se fige après le sommeil informatique/mise en veille prolongée

+0

Quel système d'exploitation? – wallyk

+0

Windows Vista SP1 64 bits Python 2.6 compilé en mode 32 bits – user235024

Répondre

0

Vous pouvez attraper WM_POWERBROADCAST message de fenêtre avec l'événement PBT_APMQUERYSUSPEND à l'intérieur. Pour attraper ce message dans le programme Python, vous pouvez créer une nouvelle fenêtre invisible et faire du fil séparé appelant à plusieurs reprises GetMessage().

Dans le pire des cas, vous pouvez archiver tout cela en utilisant ctypes uniquement, mais vous pouvez également utiliser pywin32, parfois appelé win32py.

+0

Est-ce que le travail avec une interface graphique que cette programmation Python est en cours d'exécution en tant que service. La même chose fonctionnera-t-elle en appelant GetMessage() dans un thread en cours d'exécution dans un service? – user204088

+0

@ user204088, cela dépend. Vous pouvez soit activer l'utilisateur interactif pour votre service, de sorte que vous serez en mesure de créer une fenêtre invisible directement, mais cela nécessite que l'utilisateur de la console soit connecté; ou utiliser 'RegisterServiceCtrlHandlerEx' et écouter' 'SERVICE_CONTROL_POWEREVENT' dans votre HandlerEx' – toriningen