![]() |
Timer des Bildschirmschoners zurücksetzen
Hallo,
ich befürchte zwar, dass mir niemand diese Frage beantworten kann, aber einen Versuch ist es vielleicht doch wert. Meine Anwendung lässt sich über einen Joystick steuern und auch beenden. Das Starten des Bildschirmschoners unterdrücke ich erfolgreich mit folgenden Zeilen Code:
Delphi-Quellcode:
Sobald ich jedoch meine Anwendung beende, startet der Bildschirmschoner, da das Timeout abgelaufen ist und nicht zurückgesetzt wird. Ein Simulieren des Tastendrucks oder einer Mouse-Bewegung bringt leider nicht den gewünschten Erfolg, und zwar anscheinend aus folgendem Grund:
procedure TForm1.WMSysCommand(var Msg: TMessage);
begin IF (Msg.wParam = SC_SCREENSAVE) OR (Msg.WParam = SC_MONITORPOWER) then Msg.Result := 1 else inherited; end; Zitat:
P.S.: In der Online-Hilfe von Delphi steht als Konstante SPI_SETBLOCKSENDINPUTREQUESTS, ich bin mir jedoch sehr sicher, dass das ein Schreibfehler ist. Hat vielleicht jemand einen Tipp für mich? Nutze Delphi 2005 PE und Vista. Kein gravierendes Problem, aber einfach nervig, wenn ich die Anwendung beende und der Bildschirmschoner springt an. Viele Grüße |
AW: Timer des Bildschirmschoners zurücksetzen
Zitat:
OK, nicht von AAllem ist der Wert da aufgeführt, aber oftmals hilft dann Google und wenn man es direkt vom Hersteller wissen will, dann läd man sich das PSDK runter. Im Vista-PSDK stehen halle Functionsheader und vorallem auch die Konstanten und ihre Werte drinnen, bzw. es gibt darin die Header-Files der WinAPI, wo das drin steht. PS: Die Windows.pas ist zu großen Teilen z.B. eine Übersetzung der windows.h (Header-File), welche nie ganz aktuell sein kann. |
AW: Timer des Bildschirmschoners zurücksetzen
![]() Lastinput muss man resetten:
Delphi-Quellcode:
keybd_event(0, 0, 0, 0); //Reset LastInput
|
AW: Timer des Bildschirmschoners zurücksetzen
Vielen Dank für Eure Antworten!
Das alleinige Resetten von LastInput funktioniert bei mir nicht, der Bildschirmschoner springt trotzdem beim Beenden der Anwendung an. Zitat:
Delphi-Quellcode:
Es funktioniert, und das ist ersteinmal positiv. Merkwürdig ist das ganze jedoch schon, denn es funktioniert genauso gut, wenn ich den Wert von SPI_SETBLOCKSENDINPUTRESETS auf True setze und manchmal sogar, wenn ich keinen Code im OnClose-Ereignis stehen habe :shock: Das witzige ist, dass der Bildschirmschoner auch nach einer Weile startet, wenn ich ihn mit SPI_SETSCREENSAVEACTIVE deaktiviere :?
Const
SPI_GETBLOCKSENDINPUTRESETS = $1026; SPI_SETBLOCKSENDINPUTRESETS = $1027; Var flag :Boolean; begin SystemParametersInfo(SPI_GETBLOCKSENDINPUTRESETS, 0,@flag, 0); SystemParametersInfo(SPI_SETBLOCKSENDINPUTRESETS, Integer(false),nil, 0) ; keybd_event(0, 0, 0, 0); SystemParametersInfo(SPI_SETBLOCKSENDINPUTRESETS, Integer(flag),nil,0) ; end; |
AW: Timer des Bildschirmschoners zurücksetzen
Vielen dank nochmal an Euch beide! Ziemlich nervig, das zu testen, da ich immer eine gewisse Zeit warten musste. Das Problem ist nun einfach durch ein Setzen des entsprechenden Wertes auf TRUE reproduzierbar. Der Vollständigkeit halber, wie ich das ganze nun letzendlich gelöst habe. Ich denke diese Methode ist besser, als den Bildschirmschoner zu deaktivieren.
Delphi-Quellcode:
Die IF-Abfrage ist natürlich nicht zwingend erforderlich. :stupid:
public
procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND; ... procedure TForm1.WMSysCommand(var Msg: TMessage); begin IF (Msg.wParam = SC_SCREENSAVE) OR (Msg.WParam = SC_MONITORPOWER) then Msg.Result := 1 ELSE inherited; end; procedure TForm1.FormCreate(Sender: TObject); Const SPI_GETBLOCKSENDINPUTRESETS = $1026; SPI_SETBLOCKSENDINPUTRESETS = $1027; Var flag :Boolean; begin SystemParametersInfo(SPI_GETBLOCKSENDINPUTRESETS, 0,@flag, 0) ; IF flag then SystemParametersInfo(SPI_SETBLOCKSENDINPUTRESETS, Integer(false),nil, 0); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin keybd_event(0, 0, 0, 0); end; Viele Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz