Wie hook an Ereignisse / Nachrichten in Windows mit Python

9

kurz:

Ich möchte Suspend / Standby-Nachrichten auf meinem Laptop abfangen, aber mein Programm empfängt nicht alle relevanten Nachrichten.

Hintergrund:

Es gibt einen Fehler in ms-excel unter Windows XP / 2k, der verhindert, dass das System aussetzt, wenn eine Datei auf einem Netzwerk / USB-Laufwerk geöffnet wird.

Ich versuche, es programmatisch zu umgehen (meine Toolbox enthält Python-, Vb6- oder Kommandozeilen-Tools).

Ich weiß nichts über Windows-Instrumentierung: -)

Ich habe ein sysinternals Dienstprogramm, das das System irgendwie aussetzt. Ich möchte es mit dem Close-Lid Event verbinden!

in lang:

Das Schließen des Notebookdeckels (fujitsu u810) leitet den Standby-Vorgang ein [wie?]

Das System sendet dann alle WM_POWERBROADCAST: PBT_APMQUERYSUSPEND (ich kann sie mit SPYXX.EXE verfolgen)

Jedes Programm antwortet mit "True", bis Excel "false" antwortet und der gesamte Prozess stoppt.

Meine Fragen:

1) Mein Python-Programm fängt weder pbm_apmquerysuspend noch PBT_APMQUERYSTANDBYFAILED noch PBT_APMQUERYSUSPENDFAILED ab: "...

%Vor%

' Es empfängt nur PBT_APMSUSPEND, wenn die Standby-Funktion schließlich ausgeführt wird.

Warum nicht - und wie kann ich es abfangen?

2) Gibt es eine andere Möglichkeit, den Standby-Prozess abzufangen?

In einer Präfektwelt würde ich das Ereignis "close-close" einstellen, um einen Befehl auszuführen, den ich wähle. In einer perfekten Welt ist der Deckelverschluss ein dokumentierter Vorgang.

danke euch allen: -)

    
Berry Tsakala 29.03.2009, 11:15
quelle

2 Antworten

2

Ich habe einen hässlichen Workaround gefunden: Ich schrieb ein AutoIt -Skript, das die Fehlermeldung MessageBox des Excels erkennt, sie schließt und ein sysinternals-Dienstprogramm ausführt, das den Computer in den Standby-Modus versetzt .

%Vor%

(Dies ist eine optimierte Version - die ersten Versuche waren CPU-intensiv).
Jetzt sitzt es im System-Tray und funktioniert einfach.

Die Frage zu verlorenen Nachrichten ist noch offen. obwohl ich realisiert habe, dass es nichts mit python zu tun hat.

    
Berry Tsakala 02.04.2009 00:47
quelle
0

Ist das eine Lernerfahrung oder etwas, das Sie wirklich wollen?

Könnte Ihr Programm stattdessen einfach aufhören zu übertreffen, wenn es ein Herunterfahren entdeckt, deshalb vermeidet das Problem der Excel-Berichterstattung ein falsches?

    
Steve 31.03.2009 18:58
quelle