Bildschirm ein/aus- schalten

Für allgemeine Fragen zur Programmierung mit PureBasic.
OnkelM
Beiträge: 7
Registriert: 17.03.2011 15:21

Re: Bildschirm ein/aus- schalten

Beitrag 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.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Bildschirm ein/aus- schalten

Beitrag 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...
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
OnkelM
Beiträge: 7
Registriert: 17.03.2011 15:21

Re: Bildschirm ein/aus- schalten

Beitrag 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.
OnkelM
Beiträge: 7
Registriert: 17.03.2011 15:21

Re: Bildschirm ein/aus- schalten

Beitrag 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
Antworten