Aktuelle Zeit: 22.01.2021 05:58

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 10.11.2020 16:07 
Offline
Benutzeravatar

Registriert: 08.09.2004 20:18
Wohnort: Dachsen
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

_________________
TFT

W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 10.11.2020 17:17 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Hier mal ein Einstieg:

Als erstes benötige ich das Recht zum Runterfahren: SeShutdownPrivilege, hier als kompakte Procedure:
Code:
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
Einfach aufrufen!
Jetzt noch ein etwas längerer engl. Artikel von MS: https://docs.microsoft.com/en-us/window ... plications

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 10.11.2020 19:46 
Offline
Benutzeravatar

Registriert: 08.09.2004 20:18
Wohnort: Dachsen
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

_________________
TFT

W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 10.11.2020 20:05 
Offline
Benutzeravatar

Registriert: 12.06.2011 21:39
Hallo

Probiers mal damit: (halt nur für Windows)
Code:
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

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

_________________
Bild Bild Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 10.11.2020 22:06 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 10.11.2020 22:28 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
Ist dieses Thema hier nicht schon ein halbes Dutzend mal diskutiert worden? :roll:

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 11.11.2020 01:05 
Offline
Benutzeravatar

Registriert: 08.09.2004 20:18
Wohnort: Dachsen
mag sein ...... aber die Suchfunktion ist unterirdisch .Zumindestens bei mir. Wenn du einen Link hast. Immer her damit.

Gruss TFT

_________________
TFT

W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 11.11.2020 09:46 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
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.

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 11.11.2020 09:56 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
tft hat geschrieben:
Wenn du einen Link hast. Immer her damit.

Wenn ich einen passenden Link hätte, hätte ich ihn sicherlich gleich mitgepostet. :-)

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein PB Programm soll auf das Herunterfahren reagieren
BeitragVerfasst: 11.11.2020 11:28 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:53
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

_________________
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye