Seite 3 von 3
Re: Bildschirm ein/aus- schalten
Verfasst: 20.03.2011 12:19
von OnkelM
Da scheinst du etwas recht zu haben. Komisch ist nur, dass bei mir es nicht sauber funktioniert.
Windows: 7 x64
PC: Notebook Lenovo SL500
Grafik: Nvidia
Standby funktioniert überhaupt nicht bei mir. Da hängt das Programm einfach.
Monitor ausschalten dagegen funktioniert! Aber nur bis zum ausschalten (bzw. im Notebook-fall standby) danach hängt das Programm auch. Wenn ich die Maus Bewege zum reaktivieren des Bildschirmes sehe ich das (2 Sekunden Delay).
Beim Debugen hängt er wie vermutet gleich nach dem Sendessage_ Befehl.
Re: Bildschirm ein/aus- schalten
Verfasst: 20.03.2011 12:45
von c4s
Habe es nochmal auf einem Vista-Laptop getestet: Standby geht nicht, Ausschalten hingegen schon.
Ich verstehe aber nicht, was du mit dem Aufhängen des Programmes meinst. Delay() hält das Programm für die eingegebene Zeit an, was ja nichts neues sein sollte. Eventuell ist die Daeuer einfach zu kurz. Probier es mal mit 10 Sekunden anstatt 2...
Re: Bildschirm ein/aus- schalten
Verfasst: 20.03.2011 12:48
von OnkelM
Das aufhängen meine ich eben ein richtiges hängen.
Ich habe schon 10 minuten gewartet. Das Programm reagiert danach einfach nicht mehr. Kann es also auch nicht normal über X ausschalten.
Wenn ich ein anderes Handle probiere z.B. #HWND_TOP dann passiert nichts, aber das programm hängt dann auch nicht. Man sieht richtig wie die Buttons für 2 Sekunden sich nicht verändern und danach wieder den Focus bekommen wenn die Maus drüber streift.
Re: Bildschirm ein/aus- schalten
Verfasst: 20.03.2011 12:59
von OnkelM
Ich habe mal eben einen Test in C++ gemacht und hier funktioniert das Programm ohne hängen zu bleiben. Zwar geht auch hier kein Standby sondern nur Ausschalten. Aber das ist wohl ein Vista+ Feature...
Code: Alles auswählen
#include <iostream>
#include <Windows.h>
int main(void)
{
std::cout << "Starte Sleep Befehl..." << std::endl;
SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 1);
Sleep(5000);
std::cout << "Starte Shutdown Befehl..." << std::endl;
SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
Sleep(5000);
std::cout << "Starte Wake Befehl..." << std::endl;
SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, -1);
Sleep(5000);
std::cout << "Alle Befehle erfolgreich abgelaufen!" << std::endl;
system("PAUSE");
return 0;
}
// EDIT
Ich denke ich habe den Fehler (zumindest für mich) im PB Code gefunden. Dass es hängt lag wohl am #HWND_BROADCAST
Wenn ich dieses in GetForegroundWindow_() ändere hängt es nicht mehr. Hier nochmal als Beweis.
Code: Alles auswählen
OpenConsole()
PrintN("Starte Sleep Befehl...")
SendMessage_(GetForegroundWindow_(), #WM_SYSCOMMAND, #SC_MONITORPOWER, 1)
Delay(5000)
PrintN("Starte Shutdown Befehl...")
SendMessage_(GetForegroundWindow_(), #WM_SYSCOMMAND, #SC_MONITORPOWER, 2)
Delay(5000)
PrintN("Starte Wake Befehl...")
SendMessage_(GetForegroundWindow_(), #WM_SYSCOMMAND, #SC_MONITORPOWER, -1)
Delay(5000)
Input()
CloseConsole()
End