Hallo!
Ich suche derzeit eine einfache Möglichkeit, ein Backup-Programm vor dem Ausschalten des Computers laufen zu lassen.
Weiß jemand, welches Programm ausgeführt wird, wenn man im Startmenü auf den Eintrag "Computer ausschalten..." klickt?
Oder gibt es eine andere Möglichkeit, ein Programm vor dem Aufruf des "Computer ausschalten"-Dialogs ausführen zu lassen?
Mein Ziel ist es, immer dann, wenn der Benutzer den Computer herunterfahren möchte, diesem einen Dialog zu präsentieren, der zu einem Backup auffordert. Wird "OK" geklickt, dann soll zuerst das Backup erstellt und danach der Computer herunter gefahren werden. Wird auf "Abbrechen" geklickt, dann wird der Dialog geschlossen und der "Computer ausschalten"-Dialog wird aufgerufen. -- So der Plan.
Ich wäre für jeden Hinweis dankbar.
lg
Gerold
Windows: "Computer ausschalten"-Dialog
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Hi gerold. Man koennte die Windows-Message von einem Daemon abfangen lassen, der dann den Backup-Vorgang einleitet. Das Herunterfahren selbst ist nur ein Call an die User32.dll glaub ich.
Es gibt auch Prozesse bzw Daemons die beim Runterfahren gestartet werden. Wie man die aber "anmeldet" weiß ich nicht.
Es gibt auch Prozesse bzw Daemons die beim Runterfahren gestartet werden. Wie man die aber "anmeldet" weiß ich nicht.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Ich hab's mir jetzt nicht genauer angeschaut aber WM_QUERYENDSESSION könnte die Nachricht sein die du suchst. Die Seite geht zwar weiter auf Vista ein, sollte aber ein guter Ausgangspunkt sein.
Sebastian
Sebastian
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!
Danke! Ich werde jetzt mal testen, wann genau das Event "WM_QUERYENDSESSION" auftritt und ob ich dann noch das Herunterfahren abbrechen kann.
mfg
Gerold
Danke! Ich werde jetzt mal testen, wann genau das Event "WM_QUERYENDSESSION" auftritt und ob ich dann noch das Herunterfahren abbrechen kann.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo!
Theoretisch funktioniert das mit WM_QUERYENDSESSION. Praktisch noch nicht. Da werde ich mich wahrscheinlich eine Weile damit spielen müssen. Aber vielleicht komme ich auch ohne Abhorchen von Events aus.
Ich würde am Liebsten vor dem Herunterfahren eingreifen. Also nur wenn der Benutzer selbst im Startmenü auf "Computer ausschalten..." klickt. Man müsste nur herausfinden, was nach dem Klicken ausgeführt wird. Vielleicht steht das sogar irgendwo in der Registry.
Falls das eine EXE ist, würde ich eine CMD-Datei dazwischenschieben. Falls man das aufzurufende Programm konfigurieren kann, würde ich gerne den Aufruf auf mein Programm umleiten. Und mein Programm würde dann danach den "Computer ausschalten"-Dialog aufrufen. So würde ich am Wenigsten ins System eingreifen müssen. Denn unter Vista scheint die Sache mit dem WM_QUERYENDSESSION komplizierter zu werden.
lg
Gerold
Theoretisch funktioniert das mit WM_QUERYENDSESSION. Praktisch noch nicht. Da werde ich mich wahrscheinlich eine Weile damit spielen müssen. Aber vielleicht komme ich auch ohne Abhorchen von Events aus.
Ich würde am Liebsten vor dem Herunterfahren eingreifen. Also nur wenn der Benutzer selbst im Startmenü auf "Computer ausschalten..." klickt. Man müsste nur herausfinden, was nach dem Klicken ausgeführt wird. Vielleicht steht das sogar irgendwo in der Registry.
Falls das eine EXE ist, würde ich eine CMD-Datei dazwischenschieben. Falls man das aufzurufende Programm konfigurieren kann, würde ich gerne den Aufruf auf mein Programm umleiten. Und mein Programm würde dann danach den "Computer ausschalten"-Dialog aufrufen. So würde ich am Wenigsten ins System eingreifen müssen. Denn unter Vista scheint die Sache mit dem WM_QUERYENDSESSION komplizierter zu werden.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ich schwöre dir, hättest du mich vor einem Monat gefragt, hätte ich es dir noch sagen können, wie der Befehl unter ausführen heißt. Ich will dir nur damit sagen --> Es geht. Ich weiß nur leider nicht mehr wie Ich schau' mich mal um, okay?
^_^
^_^
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
In Tirol sagt man zu so etwas: "Sou a Schaß!"
http://thread.gmane.org/gmane.comp.pyth ... thon/54673
PS: Ich übersetze das lieber mal... "So ein Furz!"
http://thread.gmane.org/gmane.comp.pyth ... thon/54673
PS: Ich übersetze das lieber mal... "So ein Furz!"
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Hi nochmal,
es gibt doch auch nen Konsolenbefehl um den Shutdown abzubrechen, oder? "shutdown /a" ist es unter Vista.
Ansonsten haette ich da noch was aus einem VB-Forum. Vielleicht kann man da was ummuenzen:
http://www.xtremevbtalk.com/showthread.php?t=30002
EDIT: Mist... das irgendwer das Event schluckt ist bloed... :/
es gibt doch auch nen Konsolenbefehl um den Shutdown abzubrechen, oder? "shutdown /a" ist es unter Vista.
Ansonsten haette ich da noch was aus einem VB-Forum. Vielleicht kann man da was ummuenzen:
http://www.xtremevbtalk.com/showthread.php?t=30002
EDIT: Mist... das irgendwer das Event schluckt ist bloed... :/
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo nkoehring!
Die andere Variante ist die, dass man mit "CallWindowProc" die Windows-Nachrichten an eine Prozedur weiterleitet. Das kenne ich auch von Visual Basic her. Aber genau so etwas möchte ich vermeiden, da es wahrscheinlich unter Vista nicht mehr wie gewünscht funktioniert und unter Python wahrscheinlich einiges an Kopfzerbrechen verursacht.
Aber vielleicht bleibt mir auch nichts anderes übrig und ich muss mit CallWindowProc arbeiten. Aber vorher warte ich noch ein paar Tage, ob nicht doch noch jemandem etwas besseres einfällt.
lg
Gerold
PS: Visual Basic 6 kennt "AddressOf". Damit kann man die Adresse einer Prozedur ermitteln. Wie finde ich unter Python die Adresse einer Prozedur heraus? Denn diese muss man an "CallWindowProc" übergeben.
EDIT:
OK, das Problem mit CallWindowProc und AddressOf wäre gelöst. --> http://aspn.activestate.com/ASPN/Cookbo ... ipe/355593
Leider kann man damit nur einen Shutdown-Countdown abbrechen. Wenn der Shutdown schon eingeleitet wurde funktioniert das nicht mehr.nkoehring hat geschrieben:es gibt doch auch nen Konsolenbefehl um den Shutdown abzubrechen, oder? "shutdown /a" ist es unter Vista.
"QueryUnload" kenne ich von Visual Basic 6. Das ist genau das Gegenstück zum wxPython-Event "wx.EVT_QUERY_END_SESSION". Leider funktioniert das im Moment unter wxPython nicht.nkoehring hat geschrieben:Ansonsten haette ich da noch was aus einem VB-Forum. Vielleicht kann man da was ummuenzen:
http://www.xtremevbtalk.com/showthread.php?t=30002
Die andere Variante ist die, dass man mit "CallWindowProc" die Windows-Nachrichten an eine Prozedur weiterleitet. Das kenne ich auch von Visual Basic her. Aber genau so etwas möchte ich vermeiden, da es wahrscheinlich unter Vista nicht mehr wie gewünscht funktioniert und unter Python wahrscheinlich einiges an Kopfzerbrechen verursacht.
Aber vielleicht bleibt mir auch nichts anderes übrig und ich muss mit CallWindowProc arbeiten. Aber vorher warte ich noch ein paar Tage, ob nicht doch noch jemandem etwas besseres einfällt.
lg
Gerold
PS: Visual Basic 6 kennt "AddressOf". Damit kann man die Adresse einer Prozedur ermitteln. Wie finde ich unter Python die Adresse einer Prozedur heraus? Denn diese muss man an "CallWindowProc" übergeben.
EDIT:
OK, das Problem mit CallWindowProc und AddressOf wäre gelöst. --> http://aspn.activestate.com/ASPN/Cookbo ... ipe/355593
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Nachtrag:
Dieser Code fängt Windows-Nachrichten ab. Dass es funktioniert, habe ich mit dem Event ``WM_CHAR`` ausprobiert.
Aber von WM_QUERYENDSESSION bekomme ich nichts mit. Die Textdatei wird nicht erstellt. Kann es sein, dass schon XP das Event verschluckt und nicht erst wxPython?
mfg
Gerold, der die Sache für heute ruhen lässt
Dieser Code fängt Windows-Nachrichten ab. Dass es funktioniert, habe ich mit dem Event ``WM_CHAR`` ausprobiert.
Aber von WM_QUERYENDSESSION bekomme ich nichts mit. Die Textdatei wird nicht erstellt. Kann es sein, dass schon XP das Event verschluckt und nicht erst wxPython?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
import win32gui
import win32con
import win32api
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.hwnd = self.GetHandle()
self.oldWndProc = win32gui.SetWindowLong(
self.hwnd, win32con.GWL_WNDPROC, self.MyWndProc
)
def MyWndProc(self, hWnd, msg, wParam, lParam):
if msg == win32con.WM_CHAR:
print "x"
elif msg == win32con.WM_QUERYENDSESSION:
f = file("J:\\Ablage\\queryendsession.txt", "w")
f.write("queryendsession")
f.close()
if msg == win32con.WM_DESTROY:
win32api.SetWindowLong(
self.hwnd, win32con.GWL_WNDPROC, self.oldWndProc
)
return win32gui.CallWindowProc(
self.oldWndProc, hWnd, msg, wParam, lParam
)
app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
app.MainLoop()
Gerold, der die Sache für heute ruhen lässt
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Hi Gerold!
Hmh, hilft Dir dat?
http://www.philognosie.net/index.php/tip/tipview/283/
Ich glaube so etwas hast Du eher gesucht. Ist wahrscheinlich ein wenig einfacher, als wenn man das über COM lösen müsste.
Gruß Andy
Hmh, hilft Dir dat?
http://www.philognosie.net/index.php/tip/tipview/283/
Ich glaube so etwas hast Du eher gesucht. Ist wahrscheinlich ein wenig einfacher, als wenn man das über COM lösen müsste.
Gruß Andy
Zuletzt geändert von Andy am Montag 21. Januar 2008, 19:11, insgesamt 2-mal geändert.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Andy!Andy hat geschrieben:Hmh, hilft Dir dat?
Danke. Eigentlich suche ich nur einen Hook, der es mir erlaubt, ein Programm ausführen zu lassen, bevor der "Computer ausschalten"-Dialog angezeigt wird. -- Also nicht wenn schon heruntergefahren wird. -- Wenn mein Programm fertig ist, wird mit "shutdown" heruntergefahren. Wenn mein Programm übersprungen wird, dann wird der "Computer ausschalten"-Dialog angezeigt. Das wäre die Ideallösung für mich.
Warum? Weil so noch keine Dienste heruntergefahren wurden und ich so auch Datenbanken sichern kann, ohne mich vorher darum kümmern zu müssen, dass diese nocheinmal hochgefahren werden. Außerdem wäre das der geringste Eingriff ins System. Ideal für Datensicherungen von DAU-Computern.
Der Benutzer klickt am Abend auf START->"Computer ausschalten". Dann poppt ein Dialog auf in dem er gefragt wird, ob er eine Sicherung durchführen und danach den Computer automatisch herunterfahren will, oder ob die Sicherung übersprungen werden soll. Wird die Sicherung übersprungen, dann öffnet sich ganz normal der "Computer ausschalten"-Dialog.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Naja, den Hook habe ich nicht gerade.
Aber zumindest kann man so den Ausschalten-Dialog erzwingen:
Neues Textdokument erstellen. Hier hinein schreibt man:
Das sichert man dann Beispielsweise als Tschau.js ab. Per Doppelklick darauf, erhält man den Ausschalten-Diaog.
Ich geh aber davon aus, dass Du das schon kennst.
Aber zumindest kann man so den Ausschalten-Dialog erzwingen:
Neues Textdokument erstellen. Hier hinein schreibt man:
Code: Alles auswählen
(new ActiveXObject("Shell.Application")). ShutdownWindows();
Ich geh aber davon aus, dass Du das schon kennst.
Hallo Gerold,
ich glaube zwar mein Lösung gefällt dir nicht, aber ich poste sie trotzdem:
Start -> Ausführen -> mmc -> Konsole -> Snap-In hinzufügen -> Hinzufügen -> Gruppenrichtlinien -> Hinzufügen -> Fertigstellen -> Schließen -> Ok -> Richtlinien für lokaler Computer -> Computerkonfiguration -> Skripts -> Herunterfahren -> hinzufügen
Bzw. noch eine Lösung:
http://www.pctipp.ch/praxishilfe/kummer ... ehren.html
Alle guten Dinge sind 3:
http://www.tech-archive.net/pdf/Archive ... g00051.pdf
Hoffe eine davon stellt dich zufrieden. =)
ich glaube zwar mein Lösung gefällt dir nicht, aber ich poste sie trotzdem:
Start -> Ausführen -> mmc -> Konsole -> Snap-In hinzufügen -> Hinzufügen -> Gruppenrichtlinien -> Hinzufügen -> Fertigstellen -> Schließen -> Ok -> Richtlinien für lokaler Computer -> Computerkonfiguration -> Skripts -> Herunterfahren -> hinzufügen
Bzw. noch eine Lösung:
http://www.pctipp.ch/praxishilfe/kummer ... ehren.html
Alle guten Dinge sind 3:
http://www.tech-archive.net/pdf/Archive ... g00051.pdf
Hoffe eine davon stellt dich zufrieden. =)
mfg
Thomas :-)
Thomas :-)
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Python 47!Python 47 hat geschrieben:Start -> Ausführen -> mmc -> Konsole -> Snap-In hinzufügen -> Hinzufügen -> Gruppenrichtlinien -> Hinzufügen -> Fertigstellen -> Schließen -> Ok -> Richtlinien für lokaler Computer -> Computerkonfiguration -> Skripts -> Herunterfahren -> hinzufügen
Danke. Das Problem bei Shutdown-Scripts ist, dass diese nur eine kurze Zeitspanne überleben. Dauern diese länger als (ich glaube) 60 Sekunden, dann werden sie von Windows gekillt, damit sie den Shutdown-Prozess nicht unterbrechen. Zumindest war das noch unter Windows NT so.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo SchneiderWeisse!SchneiderWeisse hat geschrieben:LOL, warum ignoriert eigentlich jeder meinen Post?^^
Ich habe ihn nicht ignoriert. Danke für deinen Link. Aber mein Ziel ist es ein solches Programm selber zu schreiben. Ein Programm, das ausgeführt wird -- ohne Drittprogramme -- wenn der Benutzer START --> "Computer ausschalten" klickt. Der Herunterfahr-Prozess soll also noch gar nicht stattfinden. Das ist nur meine Notlösung, dass ich den Herunterfahrprozess abbreche, wenn ich sonst nichts finde.
Ich hätte vielleicht nicht nach Offtopic posten sollen.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.