Wenn der Computer runtergefahren wird.....
Wenn der Computer runtergefahren wird.....
...dann wird mein Programm ja immer direkt beendet ohne das ich noch etwas vorher bewirken kann ?
Nun würde mich aber intressieren wie die MS Office Produkte aber das Runterfahren verhindern können bzw können noch etwas ausführen.
Um es anhand meines Vorhabens zu erklären, ich habe einen Internet Chat geschrieben der sowohl im Browser als auch über eine Anwendung funktioniert.
Wenn der Chat geschlossen wird, wird eine Nachricht an den Server gesendet das der Chat Teilnehmer Offline ist.
Wenn man nun aber einfach so den Computer runterfährt wird dies nicht an den Server gesendet und man bleibt Online für die anderen User.
Nun könnte ich ein Online Script schreiben was z.b alle 5Minuten durch einen Cronjob ausgeführt wird und berechnet ob die User noch Online sind, aber ich möchte dies gerne anders lösen.
(das müsste ich zwar fast zusätzlich tun falls das Programm abstürtzt, aber dies kommt ja wesentlich weniger vor (normalerweise))
Über eine Anwort würde ich mich freuen, da man das bestimmt auch später wieder verwenden kann ( z.b für einen eigenen Editor oder änliches )
Nun würde mich aber intressieren wie die MS Office Produkte aber das Runterfahren verhindern können bzw können noch etwas ausführen.
Um es anhand meines Vorhabens zu erklären, ich habe einen Internet Chat geschrieben der sowohl im Browser als auch über eine Anwendung funktioniert.
Wenn der Chat geschlossen wird, wird eine Nachricht an den Server gesendet das der Chat Teilnehmer Offline ist.
Wenn man nun aber einfach so den Computer runterfährt wird dies nicht an den Server gesendet und man bleibt Online für die anderen User.
Nun könnte ich ein Online Script schreiben was z.b alle 5Minuten durch einen Cronjob ausgeführt wird und berechnet ob die User noch Online sind, aber ich möchte dies gerne anders lösen.
(das müsste ich zwar fast zusätzlich tun falls das Programm abstürtzt, aber dies kommt ja wesentlich weniger vor (normalerweise))
Über eine Anwort würde ich mich freuen, da man das bestimmt auch später wieder verwenden kann ( z.b für einen eigenen Editor oder änliches )
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Wenn der Computer runtergefahren wird.....
wenn der Rechner runtergefahren wird und dein Programm abgeschaltet wird,
erhält es ein Event, frag mich nicht welches genau, das ihm ermöglicht darauf zu reagieren,
z.b. um noch mal zu fragen, ob gespeichert werden soll.
wenn du die Meldung "Programm reagiert nicht, sofort beenden?" siehst,
bedeutet das, dass keine Eventbearbeitung mehr vom Programm durchgeführt wird,
dass es also auf das "Hallo du wirst jetzt abgeschaltet"-Event nicht reagiert.
erhält es ein Event, frag mich nicht welches genau, das ihm ermöglicht darauf zu reagieren,
z.b. um noch mal zu fragen, ob gespeichert werden soll.
wenn du die Meldung "Programm reagiert nicht, sofort beenden?" siehst,
bedeutet das, dass keine Eventbearbeitung mehr vom Programm durchgeführt wird,
dass es also auf das "Hallo du wirst jetzt abgeschaltet"-Event nicht reagiert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Wenn der Computer runtergefahren wird.....
Solche Aufgaben gehören in die Hände des Servers.
Einfach aus dem Grunde, dass man sich auf den Clienten allein nie verlassen sollte: Es könnte ja jemand seinen Clienten bzw. den Datenverkehr manipulieren. Oder in deinem Beispiel: Ich könnte dein Proggie auch mit dem Taskmanager gewaltsam beenden. Was machst du denn dann? Dann hilft dir deine noch-schnell-Nachricht-an-Server-verschick-Prozedur auch nichts mehr.
Deswegen lässt du den Server am besten alle 5 Sekunden eine Art Ping an jeden Clienten schicken, den dieser bestätigt. Sobald die Bestätigung "Bin noch online" nicht mehr kommt, weiß der Server, dass der Client offline ist. Trotzdem würde ich an deiner Stelle zusätzlich einbauen, dass der Client sich beim Beenden durch ein #PB_Event_CloseWindow eine ordentliche Abmeldenachricht an den Server schickt.
Einfach aus dem Grunde, dass man sich auf den Clienten allein nie verlassen sollte: Es könnte ja jemand seinen Clienten bzw. den Datenverkehr manipulieren. Oder in deinem Beispiel: Ich könnte dein Proggie auch mit dem Taskmanager gewaltsam beenden. Was machst du denn dann? Dann hilft dir deine noch-schnell-Nachricht-an-Server-verschick-Prozedur auch nichts mehr.
Deswegen lässt du den Server am besten alle 5 Sekunden eine Art Ping an jeden Clienten schicken, den dieser bestätigt. Sobald die Bestätigung "Bin noch online" nicht mehr kommt, weiß der Server, dass der Client offline ist. Trotzdem würde ich an deiner Stelle zusätzlich einbauen, dass der Client sich beim Beenden durch ein #PB_Event_CloseWindow eine ordentliche Abmeldenachricht an den Server schickt.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Vera
- Beiträge: 928
- Registriert: 18.03.2009 14:47
- Computerausstattung: Win XP SP2, Suse 11.1
- Wohnort: Essen
Re: Wenn der Computer runtergefahren wird.....
Hallo X360 Andy,
habe mal gesucht und einen alten forums-thread gefunden: How intercept shutdown or logoff ?
und noch folgende Links, die Dir vielleicht weiter helfen:
- http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx
- http://entwickler-forum.de/showthread.php?t=36348
Gruß ~ Vera
habe mal gesucht und einen alten forums-thread gefunden: How intercept shutdown or logoff ?
und noch folgende Links, die Dir vielleicht weiter helfen:
- http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx
- http://entwickler-forum.de/showthread.php?t=36348
Gruß ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Re: Wenn der Computer runtergefahren wird.....
Vielen dank das was ich gerade in der schnelle gelesen habe dürfte genau dem entsprechen was ich wollte.
Muss ich heute Abend mal "testen"
@AND51
Es gibt nicht wirklich einen Server, das ganze funktioniert mit einfachen PHP Scripts die Post Request auswerten und in einer Datenbank speichert.
Der Client fordert Daten an und bekommt sie durch die Datenbank, diese werden durch den Clienten berechnet.
Eine Abfrage dauert 20-25ms (bei mir) damit würde sich auch locker eine Multiplayer Game erstellen lassen, was komplett über PHP Scripte laufen würden.
Ich mache zustätzlich noch ein Lösch Script über einen Cronjob was alle 5 Minuten errechnet (durch die letzte Anfragezeit) ob man noch Online ist, falls der Taskmanger oder änliches zum Einsatz kommt.
Muss ich heute Abend mal "testen"

@AND51
Es gibt nicht wirklich einen Server, das ganze funktioniert mit einfachen PHP Scripts die Post Request auswerten und in einer Datenbank speichert.
Der Client fordert Daten an und bekommt sie durch die Datenbank, diese werden durch den Clienten berechnet.
Eine Abfrage dauert 20-25ms (bei mir) damit würde sich auch locker eine Multiplayer Game erstellen lassen, was komplett über PHP Scripte laufen würden.
Ich mache zustätzlich noch ein Lösch Script über einen Cronjob was alle 5 Minuten errechnet (durch die letzte Anfragezeit) ob man noch Online ist, falls der Taskmanger oder änliches zum Einsatz kommt.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Wenn der Computer runtergefahren wird.....
... für ein Multiplayer Game wäre alle 5min für den Chron ein bissel wenig...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Wenn der Computer runtergefahren wird.....
Ich habe den Code von Derlidio erfolgreich bei mir eingebaut, er fährt den Computer auch nicht runter, aber nun müsste das Herunterfahren noch abgebrochen werden, dazu muss ich ja als Antwort 1 an Windows senden. (WIN API Noob)
Was muss ich dazu alles in SendMessage stecken damit das funktioniert ?
Das Herunterfahren soll immer gestoppt werden wenn eine bedingung noch nicht erfüllt ist.
Danke schonmal
P.s @ KG war auch mehr ein (schlechtes) Beispiel
Was muss ich dazu alles in SendMessage stecken damit das funktioniert ?
Das Herunterfahren soll immer gestoppt werden wenn eine bedingung noch nicht erfüllt ist.
Danke schonmal
Code: Alles auswählen
Declare.l MyWindowCallback(WindowID, Message, wParam, lParam)
OpenWindow(0,0,0,320,200,#PB_Window_SystemMenu, "Test Window")
SetWindowCallback(@MyWindowCallback())
Procedure.l MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If Message = $16 ; End Session Message
If wParam
; the section is ending
If lParam
;user is logging off
MessageRequester("X", "User is is logging off.")
Else
;user is shutting down the system.
MessageRequester("X", "User is shutting down the system.")
EndIf
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Repeat
If WaitWindowEvent() = #PB_Event_CloseWindow: Break: EndIf
ForEver
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Wenn der Computer runtergefahren wird.....
Code: Alles auswählen
EnableExplicit
Declare MyWindowCallback(WindowID, Message, wParam, lParam)
OpenWindow(0, 0, 0, 320, 200, "Test Window", #PB_Window_SystemMenu)
SetWindowCallback(@MyWindowCallback())
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Protected Result = #PB_ProcessPureBasicEvents
If Message = #WM_QUERYENDSESSION
If lParam = 0
; Neustart oder Herunterfahren
; mach was, aber mach es schnell
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Repeat
If WaitWindowEvent() = #PB_Event_CloseWindow: Break: EndIf
ForEver
Nein, der Userwunsch ist grundsätzlich zu akzeptieren!X360 Andy hat geschrieben:Das Herunterfahren soll immer gestoppt werden wenn eine bedingung noch nicht erfüllt ist.
Das Herunterfahren sollte niemals gestoppt werden, es sei den das Leben des PC hängt davon ab.
Gruß
Thomas
Re: Wenn der Computer runtergefahren wird.....
Ich nehm mal an ein MessageRequester wäre da wohl fehl am platze.ts-soft hat geschrieben:Code: Alles auswählen
; mach was, aber mach es schnell

Anderseits, wie wäre es denn bspw. mit sowas ?

Als frage kann man ja "Möchten Sie noch SCHNELL Speichern ?" einfügen.




Re: Wenn der Computer runtergefahren wird.....
Danke erstmal für den Code, werde ich morgen genauer anschauen.ts-soft hat geschrieben: Nein, der Userwunsch ist grundsätzlich zu akzeptieren!
Das Herunterfahren sollte niemals gestoppt werden, es sei den das Leben des PC hängt davon ab.
Das Programm ist nur für mich und meinem Schulkonto, da ich wirklich viel zu oft meinen USB Stick dort veliere / vergesse schreib ich mir nun eine hintergrund Software die per Autostart gestartet wird und überwacht falls ein USB Stick eingesteckt wird, wenn ich dann herunterfahre und der USB Stick noch drinsteckt, soll das Herunterfahren abgebrochen werden, mit einem einfachen Messegrequester der mich an das Austecken errinert.