Laden...

Screen.AllScreens funktioniert nicht bei Windows-Dienst nicht richtig

Erstellt von ma_walter vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.038 Views
M
ma_walter Themenstarter:in
8 Beiträge seit 2007
vor 13 Jahren
Screen.AllScreens funktioniert nicht bei Windows-Dienst nicht richtig

Hallo C#-Experten,

zu folgendem Problem hab ich im Netz keine Erklärung gefunden:

Ich verwende zwei Monitore.
In einem Standard-Programm liefert mir Screen.AllScreens eine Collection mit zwei Screens und den korrekten Auflösungen.
Nutze ich den gleichen Code in einem Windows-Dienst, enthält die Collection nur einen Monitor mit der doppelten Auflösung, also im Prinzip die Daten des erweiterten Desktops.

Woran liegt das und kann ich auch im Windows-Dienst Infos über alle tatsächlich angeschlossen Monitore erhalten?

(Das einzige, was ich zu dem Thema gefunden habe, ist folgender Link:
SystemInformation.MonitorCount versus Screen.AllScreens.Length)

Viele Grüße und besten Dank
Markus

199 Beiträge seit 2006
vor 13 Jahren

Ohne es jetzt ausprobiert zu haben, aber bei einer Delphi-Komponente war es genauso. Allerdings konnte man es da umgehen, indem man den Dienst als Benutzer gestartet hat.
Hintergrund war, dass die Komponente nicht die Anzahl der angeschlossenen Monitore ausgegeben hat, sondern die Anzahl der konfigurierten Monitore. Der System-Account unter dem ein Dienst normalerweise läuft beinhaltet keine konfigurierten Monitore. Daher hat es funktioniert, wenn man den Dienst mit einem User-Account gestartet hat, da dieser ja entsprechend konfiguriert ist.

I
1.739 Beiträge seit 2005
vor 13 Jahren

Dienste haben im allgemeinen keinen Zugriff zur UI.(unter XP war es noch möglich, man konnte den Dienst als "interactive with Desktop" konfigurieren, war jedoch schon als obsolete markiert).
Der "richtige Weg" ist: ein Dienst und für die UI eine seperate App(Tray-Anwendung) die mit dem Dienst kommuniziert.
Also der Desktop gehört dem User nicht dem Dienst...

1.457 Beiträge seit 2004
vor 13 Jahren

Hallo ma_walter,

Was soll der Dienst mit dieser Information machen? An der UI kann er doch so oder nichts durchführen.

M
ma_walter Themenstarter:in
8 Beiträge seit 2007
vor 13 Jahren

Danke für die Antworten.

Der Dienst soll mitloggen, ob bzw. wann die Monitore eingeschaltet sind (zur Energieüberwachung).
Ich habe es nicht geschafft, den Dienst automatisch unter einem bestimmten Benutzeraccount laufen zu lassen, verwende aber jetzt eine andere Lösung, die SystemInformation.MonitorCount sowie SystemInformation.PrimaryMonitorSize nutzt.

Markus

1.457 Beiträge seit 2004
vor 13 Jahren

Hallo ma_walter,

Die Energieüberwachung würde ja dann garnicht so richtig stimmen, da ein Monitor auch ein StandBy hat und meist auch weniger Energie verbraucht. Ich weiß jetzt nicht ob dann Windows meldet das der Monitor dann ausgeschaltet ist.

699 Beiträge seit 2007
vor 13 Jahren

Der Dienst soll mitloggen, ob bzw. wann die Monitore eingeschaltet sind (zur Energieüberwachung).

Meinem Windows ist es wurscht ob ich den Monitor an habe.
Darum sage ich mal, ist dein Ansatz der Energieüberwachung durch einen Dienst auf dem PC am Ziel meilenweit vorbei geschossen.
Um Verbraucher zu überwachen gibt es andere Methoden, welche aber nicht in einem C# Programm und auf einem Rechner zu finden sind.

Man muss dazu die Stromaufnahme der Verbraucher messen "Wie es das Kraftwerk auch macht" und dies gemessenen Werte kann man dann wieder Visualiseren, wenn man die Digitalisiert hat.

Weiß jetzt nicht, in welchem Umfang Du das betreiben möchtest.
Aber folgenden Link kann ich Dir mal anbieten Energiemanagment .

Grüße Stephan