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/)
-   -   Bildschirm bei Bewegungserkennung anschalten (https://www.delphipraxis.net/140455-bildschirm-bei-bewegungserkennung-anschalten.html)

henkman05 18. Sep 2009 13:52


Bildschirm bei Bewegungserkennung anschalten
 
Hallo liebe Community,

wir setzen einen All-in-One PC mit Touchscreen + RFID-Scanner im Eingangsbereich als Zeiterfassung ein.
Dieser hat eine integrierte Webcam, wodurch sich uns die Idee ergeben hat, den Bildschirm anzuschalten, sobald sich etwas davor bewegt.
Das Betriebssystem ist Windows 7.

Ich habe bereits ein Delphi-Prog geschrieben, das den Monitor anschalten soll (funktioniert bei meinem Vista-Rechner nur bedingt):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MONITORPOWER,-1);
  halt;
end;
Ich hatte es ebenfalls mit einem Prog versucht, das den Cursor an eine zufällige Position setzt, dadurch geht der Monitor aber nicht an. (Quelltext auf Anfrage)

Die Software, die wir zur Bewegungserkennung einsetzen wollen, ist WebCamXP 5.3.4.295.
Diese kann man auch im Dienstmodus laufen lassen und bei Bewegungserkennung (grob gesagt) u.a. ein Programm starten.
Im "Normalmodus" (*.exe im Autostart) funktioniert diese nicht, weil wir die Explorer.exe per Anmeldeskript killen, da sie dort nicht benötigt wird. (Dann kommt ein Error, dass das Tray Icon nicht erstellt werden konnte)


Hat einer von euch eine Idee, wie man den Bildschirm aus einem/diesem Dienst heraus anschalten kann?

himitsu 18. Sep 2009 13:56

Re: Bildschirm bei Bewegungserkennung anschalten
 
Also erstmal HALT ist nicht grad geeignet, um ein Programm ordnungsgemäß zu beenden!

SendMessage(Application.Handle damit sendet du die Nachricht an dein eigenes Programm und das kann damit nun überhaupt nichts anfangen.
Wenn, dann sollte man es mindestens an die Anwendung (bzw. das Fenster) schicken, welches den Monitor steuert oder einfach also globele Broadcast-Nachricht an alle :duck:

henkman05 18. Sep 2009 14:19

Re: Bildschirm bei Bewegungserkennung anschalten
 
Unter Vista ging der Monitor kurz an und dann gleich wieder aus... könnte also am "halt" liegen?

mit der Win API hab ich bisher nie gearbeitet, deswegen weiß ich auch nicht, wie ich eine Nachricht global senden kann.
Die Nachricht an sich wär ja vermutlich die gleiche.
Es gibt eine Anwendung.exe, die während der Systemlaufzeit an ist, diese könnte man notfalls ja auch als "Ziel" angeben.
Aber: Wie? Ob das ganze aus einem Dienst heraus funktioniert, würde ich dann testen.

Tyrael Y. 18. Sep 2009 14:26

Re: Bildschirm bei Bewegungserkennung anschalten
 
Zitat:

Zitat von henkman05
.
Aber: Wie? Ob das ganze aus einem Dienst heraus funktioniert, würde ich dann testen.

Nein funktioniert nicht...bzw. unter Vista nicht mehr.
Dienste sidn in einem eigenen Kontext und können mit anderen Fenstern nicht kommunizieren.

Der Weg ist also eine andere Interprozesskommunikation... Pipes zB.

Edit:
Um den Bildschirm einzuschalten kannst mal folgendes testen.

Delphi-Quellcode:
Mouse_Event(Mouseeventf_move, 10,10,0,0);

hathor 20. Jun 2010 09:00

AW: Bildschirm bei Bewegungserkennung anschalten
 
Folgender Code funktioniert auch unter WINDOWS 7 ULTIMATE 64:

Delphi-Quellcode:
program DISPLAYOFF;      //oder DISPLAYON

//{$APPTYPE CONSOLE}

uses
  Windows;

const WM_SYSCOMMAND = 274;
      MONITOR_OFF = 2;
      MONITOR_ON = -1;
Begin
  sleep(2000);
      PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);// oder MONITOR_ON
  sleep(2000);
  Exit;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz