[Erledigt]PB Programm soll auf das Herunterfahren reagieren
- tft
- Beiträge: 605
- Registriert: 08.09.2004 20:18
- Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
- Wohnort: Dachsen
- Kontaktdaten:
[Erledigt]PB Programm soll auf das Herunterfahren reagieren
Hallo,
ich schreibe ein PB Tool, das die ganze Zeit im Hintergrund läuft. Wenn der Rechner jetzt herunter gefahren werden soll. Möchte ich, das das Programm noch schnell Daten Speichert und Windows solange mit dem herunterfahren wartet. Bis das Programm sich beendet hat.
Wie muss ich da vorgehen?
Gruss TFT
ich schreibe ein PB Tool, das die ganze Zeit im Hintergrund läuft. Wenn der Rechner jetzt herunter gefahren werden soll. Möchte ich, das das Programm noch schnell Daten Speichert und Windows solange mit dem herunterfahren wartet. Bis das Programm sich beendet hat.
Wie muss ich da vorgehen?
Gruss TFT
Zuletzt geändert von tft am 05.04.2021 13:25, insgesamt 1-mal geändert.
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
- 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: Ein PB Programm soll auf das Herunterfahren reagieren
Hier mal ein Einstieg:
Als erstes benötige ich das Recht zum Runterfahren: SeShutdownPrivilege, hier als kompakte Procedure:Einfach aufrufen!
Jetzt noch ein etwas längerer engl. Artikel von MS: https://docs.microsoft.com/en-us/window ... plications
Als erstes benötige ich das Recht zum Runterfahren: SeShutdownPrivilege, hier als kompakte Procedure:
Code: Alles auswählen
Procedure EnableShutDown()
Protected *Privileges.TOKEN_PRIVILEGES = AllocateMemory(8 + (1 * SizeOf(LUID_AND_ATTRIBUTES)))
Protected htoken.i
OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @htoken)
*Privileges\PrivilegeCount = 1
*Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
LookupPrivilegeValue_(0, "SeShutdownPrivilege", @*Privileges\Privileges[0]\Luid)
AdjustTokenPrivileges_(htoken, 0, *Privileges, 0, 0, 0)
CloseHandle_(htoken)
FreeMemory(*Privileges)
EndProcedure
Jetzt noch ein etwas längerer engl. Artikel von MS: https://docs.microsoft.com/en-us/window ... plications
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
- tft
- Beiträge: 605
- Registriert: 08.09.2004 20:18
- Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
- Wohnort: Dachsen
- Kontaktdaten:
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Hallo,
ich habe mir den Link zu gemühte geführt. Grundsätzlich habe ich die Funktionsweise des ReBoot Manager verstanden. Aber was genau ist der sinn deiner Procedure? Ich bekomme ja über das EVENT ein Signal, das der Rechner runter gefahren wird. und muss dann das Programm so beenden wie wenn jemand den CloseButton des Fensters betätigt. Und beim Beenden muss ich noch einen Signal "Ich habe fertig" erzeugen. ????? Ich möchte das das Runterfahren des Rechnet solange wartet bis Das Programm fertig ist. Das kann auch mal länger benötigen. Was ist zu tun????
Gruss TFT
ich habe mir den Link zu gemühte geführt. Grundsätzlich habe ich die Funktionsweise des ReBoot Manager verstanden. Aber was genau ist der sinn deiner Procedure? Ich bekomme ja über das EVENT ein Signal, das der Rechner runter gefahren wird. und muss dann das Programm so beenden wie wenn jemand den CloseButton des Fensters betätigt. Und beim Beenden muss ich noch einen Signal "Ich habe fertig" erzeugen. ????? Ich möchte das das Runterfahren des Rechnet solange wartet bis Das Programm fertig ist. Das kann auch mal länger benötigen. Was ist zu tun????
Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
- Dave
- Beiträge: 22
- Registriert: 12.06.2011 21:39
- Computerausstattung: Windows 10 x64, Intel Core i7 7700k @4.2Ghz, 16GB RAM, PureBasic 5.72
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Hallo
Probiers mal damit: (halt nur für Windows)
Copyright RSBasic
Edit: Der Code wartet leider nicht auf dein Programm, ich hab erst jetz gelesen, dass dein Programm manchmal länger hat.
Gruss Dave
Probiers mal damit: (halt nur für Windows)
Code: Alles auswählen
EnableExplicit
Define EventID
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
If uMsg = #WM_ENDSESSION
;Windows wird heruntergefahren.
;Hier können noch wichtige Einstellungen gespeichert werden.
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WinCallback())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Edit: Der Code wartet leider nicht auf dein Programm, ich hab erst jetz gelesen, dass dein Programm manchmal länger hat.
Gruss Dave
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Da gibt es noch mehr Details zu beachten: https://devblogs.microsoft.com/oldnewth ... 0/?p=95855
Es gibt z.B. die Message WM_QUERYENDSESSION, nach der man mit #True oder #False antworten kann, ob Windows nun herunterfahren darf.
Und bei WM_ENDSESSION sollte man auch noch wParam überprüfen. Ist der nämlich 0, dann wird die Session gar nicht beendet. Und dann sollte man auch einfach nichts tun.
In dem Blobeintrag oben heißt es weiterhin, dass man bei WM_ENDSESSION besser keine längeren Aktivitäten ausführt, da man kurz darauf im schlechtesten Fall auch schon gekillt werden kann. Lieber macht man das alles also in WM_QUERYENDSESSION.
Da ich kein Windows habe, kann ich aber sonst nicht weiter helfen.
Es gibt z.B. die Message WM_QUERYENDSESSION, nach der man mit #True oder #False antworten kann, ob Windows nun herunterfahren darf.
Und bei WM_ENDSESSION sollte man auch noch wParam überprüfen. Ist der nämlich 0, dann wird die Session gar nicht beendet. Und dann sollte man auch einfach nichts tun.
In dem Blobeintrag oben heißt es weiterhin, dass man bei WM_ENDSESSION besser keine längeren Aktivitäten ausführt, da man kurz darauf im schlechtesten Fall auch schon gekillt werden kann. Lieber macht man das alles also in WM_QUERYENDSESSION.
Da ich kein Windows habe, kann ich aber sonst nicht weiter helfen.
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Ist dieses Thema hier nicht schon ein halbes Dutzend mal diskutiert worden?
- tft
- Beiträge: 605
- Registriert: 08.09.2004 20:18
- Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
- Wohnort: Dachsen
- Kontaktdaten:
Re: Ein PB Programm soll auf das Herunterfahren reagieren
mag sein ...... aber die Suchfunktion ist unterirdisch .Zumindestens bei mir. Wenn du einen Link hast. Immer her damit.
Gruss TFT
Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
- HeX0R
- Beiträge: 2961
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Also ehrlich gesagt liegt das eher an einem schlecht programmierten Tool!
Einem Programm sollte es egal sein, ob der Rechner heruntergefahren wird, oder der Benutzer es einfach schließt, in beiden Fällen sendet Windows ein #WM_CLOSE (oder #PB_Event_CloseWindow) und gibt jedem Programm auch genügend Zeit zu enden.
Wenn Dein Programm natürlich irgendwo festsitzt und keine Events mehr aus der Queue zupft, kann es auch nicht schnell genug reagieren.
Einem Programm sollte es egal sein, ob der Rechner heruntergefahren wird, oder der Benutzer es einfach schließt, in beiden Fällen sendet Windows ein #WM_CLOSE (oder #PB_Event_CloseWindow) und gibt jedem Programm auch genügend Zeit zu enden.
Wenn Dein Programm natürlich irgendwo festsitzt und keine Events mehr aus der Queue zupft, kann es auch nicht schnell genug reagieren.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Wenn ich einen passenden Link hätte, hätte ich ihn sicherlich gleich mitgepostet.tft hat geschrieben:Wenn du einen Link hast. Immer her damit.
Re: Ein PB Programm soll auf das Herunterfahren reagieren
Wenn Du einen 'ShutdownBlockReasonCreate' erstellst, kannst du im WindowsCallback die WM_QUERYENDSESSION Nachricht mit #Null beantworten. Dann wartet Windows auf dein Programm und du hast noch genug Zeit dein Programm sauber zu beenden..
viewtopic.php?f=3&t=25807
viewtopic.php?f=3&t=25807
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."