Delphi-PRAXiS

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 30. Okt 2006 16:28


Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Hallo zusammen,

kennt jemand von euch eine einfache routine, mit der man auslesen kann, ob der angeschlossene monitor ein- bzw. ausgeschaltet wurde?

es geht dabei um eine applikation, die auf einem "unbemannten" pc läuft und per e-mail meldet, dass der monitor ausgeschaltet wurde.

vielen dank im voraus.

hoika 30. Okt 2006 17:18

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

also ich denke, so eine Funktion kann es gar nicht geben,
zumindestens auf dem Software-Level.


Heiko

iPaule 30. Okt 2006 17:49

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

Zitat von hoika
Hallo,

also ich denke, so eine Funktion kann es gar nicht geben,
zumindestens auf dem Software-Level.


Heiko


aber man kann doch über dde sogar die seriennummer des monitors (zumindest bei den neueren) auslesen. warum soll es keine möglichkeit geben, festzustellen, ob der monitor aktiv oder passiv ist - sprich: ein- oder ausgeschgaltet...?

RobertP 30. Okt 2006 17:55

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Also ich glaub man kann nur feststellen, ob sich der PC im Standbymodus befindet, also der Monitor vom Rechner ausgeschaltet wurde. Aber ob der User jetzt den Monitor aus oder eingeschaltet hat kann man meines Wissens nach nicht feststellen.

dbdeath74 31. Okt 2006 15:05

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

Zitat von iPaule
aber man kann doch über dde sogar die seriennummer des monitors (zumindest bei den neueren) auslesen. warum soll es keine möglichkeit geben, festzustellen, ob der monitor aktiv oder passiv ist - sprich: ein- oder ausgeschgaltet...?

Hallo,

hast du vielleicht einen Link wie man die seriennummer des Monitors auslesen kann? Das würde mich auch interessieren :)
bei deinem Problem kann ich dir leider nicht weiterhelfen :(

gruß Oliver

TeronG 31. Okt 2006 15:18

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
: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:

OldGrumpy 31. Okt 2006 16:22

Re: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
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.

Christian Seehase 31. Okt 2006 17:03

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

nur um die Begrifflichkeit zu korrigieren:
Wenn, dann geht es mit DDC nicht DDE.

Der einfachste Weg die Seriennummer des Monitores herauszubekommen geht über die Registry.
Im Key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\D ISPLAY findet man alle möglichen Monitore, die dem System mal bekannt waren.
Innerhalb dieser Keys gibt es dann noch eine weitere Ebene, in der die Keys ähnlich aussehen wie 6&471624d7&0&11443344&01&00, und unterhalb dieser Keys wiederum gibt es den Key namenes "Device Parameters", in dem sich der Wert EDID befindet, ein Binärwert.
An Offset $48 (also 72 dezimal) beginnt ein Block der sich aus vier Werten zusammensetzt.
Aufbau
Kennung DWORD
Inhalt Array [1..14] of Byte
Kennung DWORD
Inhalt Array [1..14] of Byte
Kennung DWORD
Inhalt Array [1..14] of Byte
Kennung DWORD
Inhalt Array [1..14] of Byte

Das erste Byte des Inhaltes ist bei den in Frage kommenden Einträgen immer 00
Als Kennungen gibt es:
000000FF => Seriennummer
000000FE => Hersteller
000000FC => Modellbezeichnung
Bei diesen drei Kennungen handelt es sich dann um Klartext. Dieser ist mit Blanks auf 13 Byte aufgefüllt.
Die Reihenfolge liegt nicht fest, und die Angaben sind optional, was sogar zur Folge haben kann, dass man eine bestimmte Kennung mehrfach vorfindet, oder eben auch gar nicht.

Wenn sich parallel zum Key "Device Parameters" noch der Key "Control" befindet so hat man den Key erwischt, der aktuell gültige Daten für EDID enthält.

[EDIT]
Der aufwändigere, dafür aber sauberere Weg (da man nicht selber suchen muss ;-)) führt über die SetupApi.
[/EDIT]

iPaule 1. Nov 2006 09:00

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

Zitat von dbdeath74
Zitat:

Zitat von iPaule
aber man kann doch über dde sogar die seriennummer des monitors (zumindest bei den neueren) auslesen. warum soll es keine möglichkeit geben, festzustellen, ob der monitor aktiv oder passiv ist - sprich: ein- oder ausgeschgaltet...?

Hallo,

hast du vielleicht einen Link wie man die seriennummer des Monitors auslesen kann? Das würde mich auch interessieren :)
bei deinem Problem kann ich dir leider nicht weiterhelfen :(

gruß Oliver

http://www.delphipraxis.net/internal...t.php?p=188327

iPaule 1. Nov 2006 09:03

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

Zitat von Christian Seehase
Moin Zusammen,

nur um die Begrifflichkeit zu korrigieren:
Wenn, dann geht es mit DDC nicht DDE.


stimmt.

Zitat:

Zitat von Christian Seehase
Der einfachste Weg die Seriennummer des Monitores herauszubekommen geht über die Registry.

leider bringt mich das nicht weiter. das auslesen der seriennummer müsste direkt aus dem monitor erfolgen, denn der eintrag in der registry sagt nichts darüber aus, ob der monitor wirklich angeschlossen ist.

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;

sx2008 28. Apr 2013 13:08

AW: Routine gesucht, die feststellt, ob Monitor an oder aus.
 
Die
Delphi-Quellcode:
function CheckMonitorState
sollte am Besten einen 3-wertigen Rückgabewert haben:
Monitor an, Monitor aus oder Zustand unbekannt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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