Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Routine gesucht, die feststellt, ob Monitor an oder aus. (https://www.delphipraxis.net/79893-routine-gesucht-die-feststellt-ob-monitor-oder-aus.html)

iPaule 1. Nov 2006 09:06

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Zitat:

Zitat von TeronG
:gruebel:
Wenn es sich eh nur um einen "unbemannten pc" handelt warum isses dann so schlimm, wenn der Monitor aus ist?
Dringende Alarmmeldungen wirst du ja bestimmt nicht nur über Monitor ausgeben oder? (Blink-/Blitz-leuchte, Tröte, Summer, Modem, Wählgerät, eMail, 1Euro-Jobler, ...)

Nagut .. das hilft jetzt nicht wirkllich bei deinem Problem .... :oops:

stimmt auch - bringt mich nicht wirklich weiter :). aber trotzdem möchte ich dir den grund nennen. an einem system hängen viele verschiedene clients mit angeschlossenen grossbild-tfts. auf den cleints läuft so eine art präsentations-software (commercials). da bei vielen clients die putzkolonne, die screens ausschaltet und wieder vergisst einzuschalten, zeigen diese dann den ganzen tag schöne schwarze bilderschirme hinter teuren schaufensterscheiben :o). das soll verhindert werden.

iPaule 1. Nov 2006 09:14

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Zitat:

Zitat von OldGrumpy
Wenn man per DDE die Seriennummer auslesen kann, dann kann man das auch (Achtung, dirty hack!) dazu verwenden, nachzusehen ob der Monitor noch an ist. Dann reagiert er nämlich auf die DDE-Anfrage. Wenn er ausgeschaltet ist, kann er das natürlich nicht...

Ist natürlich keine "ordentliche" Lösung, mag aber für den einen oder anderen Anwendungsfall praktikabel sein.


jaaaa genau so! diesen lösungsansatz hatte ich mir auch überlegt. mir ist völlig egal, ob ich die info über umwegen oder dirty hacks zustande kommen :). leider finde ich nur hinweise darauf, wie ich die vom windows in die registry (d. plug'n play) eingetragene seriennummer auslese und nicht, wie man direkt diese über die graka erhalten kann.

geht man nämlich davon aus, dass man den monitor über die graka auslesen kann, dann kann man auch davon ausgehen, dass dieser eingeschaltet und angeschlossen ist, wenn man diese infos über ddc bekommt. es sei denn, dass ein monitor über ddc auch daten liefert, selbst wenn dieser ausgeschaltet sein sollte, was ich nicht glaub (bzw. hoffe) :).

ich habe da einen lösungansatz erhalten, den ich testen und anschliessend hier posten werde (wenn's klappt).

gruss
paul

Christian Seehase 1. Nov 2006 11:41

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Moin Paul,

bitte erstelle künftig eine Antwort auf verschiedene Beiträge, und nicht eine je Beitrag.
Danke.

berens 18. Apr 2008 11:39

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Gibt es "schon" eine Lösung zu dem Problem?

Reinhard Kern 18. Apr 2008 14:27

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Zitat:

Zitat von berens
Gibt es "schon" eine Lösung zu dem Problem?

Hallo,

wenn ein Monitor keinen "Rückkanal" hat wie DDC, kann man nicht feststellen, ob er eingeschaltet ist, Punkt.

Dann bleibt einem nur übrig, selbst einen Sensor vor den Bildschirm zu setzen und abzufragen. Ob übliche Grossbildschirme eine Rückmeldung haben, weiss ich nicht, ich glaube eher nicht.

Gruss Reinhard

shmia 18. Apr 2008 15:01

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Zitat:

Zitat von Reinhard Kern
Ob übliche Grossbildschirme eine Rückmeldung haben, weiss ich nicht, ich glaube eher nicht.

Also meine Grafikkarte kennt die maximale Auflösung und mögliche Bildwiederholungsraten von meinem Billig-TFT.
Man kann wohl davon ausgehen, dass alle neueren Monitore einen Rückkanal über DDC haben. Diese werden von Windows als Plug 'n' Play Monitor geführt.
Nur wie man selbst Daten über DDC überträgt ist die Frage, denn das machen die Grafikkarte, der Treiber und Windows unter sich aus.

berens 18. Apr 2008 15:04

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Angenommen meine Bildschirme haben DCC, wie kann ich das auslesen?

Die Links hier aus dem Forum führen nur zur eine Seite bei M$; das Demo-Programm wird aber nicht zum download angeboten. Da steht auch nirgendwo ein kleines Stück API, Code, o.ä.

Momentan klappt bei mir die SuFu von DP nicht, ich suche aber mal nachher nach "DCC", wenn es wieder geht.

Evtl. hat von Euch jemand ein Stück Quellcode zur Hand zu dem Thema?

Zitat Paul:
Zitat:

ich habe da einen lösungansatz erhalten, den ich testen und anschliessend hier posten werde (wenn's klappt).

shmia 18. Apr 2008 15:05

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Zitat:

Zitat von Reinhard Kern
Ob übliche Grossbildschirme eine Rückmeldung haben, weiss ich nicht, ich glaube eher nicht.

Also meine Grafikkarte kennt die maximale Auflösung und mögliche Bildwiederholungsraten von meinem Billig-TFT.
Man kann wohl davon ausgehen, dass alle neueren Monitore einen Rückkanal über DDC haben. Diese werden von Windows als Plug 'n' Play Monitor geführt.
Nur wie man selbst Daten über DDC überträgt ist die Frage, denn das machen die Grafikkarte, der Treiber und Windows unter sich aus.

Reinhard Kern 18. Apr 2008 16:15

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Zitat:

Zitat von shmia
...Nur wie man selbst Daten über DDC überträgt ist die Frage, denn das machen die Grafikkarte, der Treiber und Windows unter sich aus.

Es gibt eine recht verbreitete Shareware: WinI2C/DDC von Nicomsoft Ltd.

Gruss Reinhard

hathor 28. Apr 2013 10:25

AW: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
GetDevicePowerState von '\\.\LCD'

Delphi-Quellcode:
function GetDevicePowerState(hDevice:DWORD;var pfOn:BOOL):BOOL; stdcall; external kernel32;
function CheckMonitorState:Boolean;
var
      Hwnd:THandle;
      Stat:LongBool;
begin
      Hwnd:=CreateFile('\\.\LCD' , 0, 0, nil, OPEN_EXISTING, 0, 0);
      if Hwnd <> INVALID_HANDLE_VALUE then GetDevicePowerState(Hwnd,Stat);
      Result:=Stat;
      CloseHandle(Hwnd);
end;

//Beispiele
procedure TForm1.FormCreate(Sender: TObject);
begin
    if CheckMonitorState then Caption:='Monitor ON' else Caption:='Monitor OFF';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    if CheckMonitorState then Panel1.Color:= clGreen else Panel1.Color:= clRed;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Seite 2 von 3     12 3      

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