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 In einem Dienst feststellen, ob sich ein User anmeldet (https://www.delphipraxis.net/8599-einem-dienst-feststellen-ob-sich-ein-user-anmeldet.html)

Cluni 8. Sep 2003 16:37


In einem Dienst feststellen, ob sich ein User anmeldet
 
Hallo zusammen!

Ich hab mir schon nen Wolf abgesucht, aber weder hier noch irgendwo anders einen Hinweis gefunden.

Also - ich habe einen Dienst programmiert, der direkt nach dem Booten gestartet wird. In diesem Dienst würde ich gerne feststellen, ob sich ein User anmeldet um dann darauf reagieren zu können.

Gibt es für sollche Zwecke einen API-Call, über den ich feststellen kann, ob sich jemand angemeldet hat oder Ähnliches?

Danke schon jetzt für eure Unterstützung! :firejump:

Gruß, Cluni

http://www.gsm-multifund.de
http://www.gsm-dev.com
http://www.cluni.de

Cluni 9. Sep 2003 08:52

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Hmmm - kann mir niemand helfen??? :cry:

Evtl. ginge es auch über einen anderen Weg. Ich schreib mal, was genau ich machen will:

Ich habe auf der Arbeit ein Projekt von jemanden übernommen, mit dem eine Messwerterfassung über ein extern angeschlossenes System (COM-Port) gemacht wird. Diese Messwerterfassung soll auch schon laufen, wenn sich noch niemand eingeloggt hat (dies soll so sein, da es User gibt, die den Rechner einschalten, sich nicht einloggen und nachher sagen: "Wo sind die Daten? Der Rechner ist ne Woche gelaufen!").

Damit dies so funktioniert, habe ich einen Dienst geschrieben, der mir die eig. EXE-Datei nach dem Booten startet und auch zwischendurch (jede Minute) nachschaut, ob die Messung noch läuft und wenn nicht wieder startet. Der Dienst an sich funktioniert soweit auch vollkommen zufriedenstellend.

Die EXE der Messwerterfassung (welche vom Dienst gestartet wird) startet minimiert (so soll es auch sein). Dies hat zur Folge, dass das minimierte Window wie bei Windows 3.1 zwar minimiert ist, aber als kleiner Balken auf dem Desktop liegt (weil halt zum Programmstart noch keine Taskleiste vorhanden ist).

Nun war halt meine Idee, dass ich bei einem Login einmalig das Fenster maximiere und wieder minimiere. Wenn sich nun feststellen ließe, wie das Fenster minimiert ist (also ob es so komisch unten links in der Ecke liegt), dann könnte ich die Sache mit dem Login fallen lassen und es auch auf diesen Weg machen. Aber weder bei der Sache mit dem Login, noch bei der Minimierung ist mir bis jetzt eine brauchbare Lösung über den Weg gelaufen (und ich habe schon verdammt viel gesucht!)...

sakura 9. Sep 2003 09:10

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Hi,

ich bin mir sicher, daß es ein paar Windows-Messages diesbezüglich gibt. Allerdings ist die i.A. präferierte Variante eine andere. Der Service wird nicht als interaktiver Service geschrieben, sondern ermöglicht verschiedenen Desktop Programmen die Steuerung des Services durch IPC (Inter-Process Communication), z.B. Pipes.

D.h., wenn sich jemand anmeldet, dann wird bei Bedarf durch einen Autostart-Eintrag ein Desktop-Anwendung gestartet, welche anschließend mit dem Service kommunizieren kann. Somit kann man den Service auch von anderen Rechnern innerhalb der Domäne erreichen, wenn das so sein soll ;-)

...:cat:...

P.S. Entsprechend der Regeln bitte nur solche Links posten, die direkt mit dem Beitrag zu tun haben - keine Links just so ;-)

Cluni 9. Sep 2003 09:17

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Zitat:

Zitat von sakura
D.h., wenn sich jemand anmeldet, dann wird bei Bedarf durch einen Autostart-Eintrag ein Desktop-Anwendung gestartet, welche anschließend mit dem Service kommunizieren kann. Somit kann man den Service auch von anderen Rechnern innerhalb der Domäne erreichen, wenn das so sein soll ;-)

Das hatte ich auch schon in Betracht gezogen, erschien mir aber zu ungeschickt. Ausserdem könnte dann jeder den Startmenüeintrag löschen (hehe - dann müsste man noch einen Dienst machen, der beim Einloggen gestartet wird *lol*).

Hab aber gerade diesen Thread hier gesehen: Thread
Denke, der könnte mir schon weiterhelfen. Werd's mir mal ansehen...

Zitat:

Zitat von sakura
P.S. Entsprechend der Regeln bitte nur solche Links posten, die direkt mit dem Beitrag zu tun haben - keine Links just so ;-)

Ok - kenn es nur von unserem GSM-Forum, wo ich S-Mod bin, so - da stört es niemanden. Werd ich natürlich aber akzeptieren, dass es hier anders ist... :oops:

sakura 9. Sep 2003 09:27

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Das mit den Pipes ist recht einfach.

Link zu Komponenten: http://www.delphipraxis.net/internal...?p=36961#36961
Link zu Demo: http://www.delphipraxis.net/internal...?p=37034#37034

(selber Thread)

Einfach mal durchlesen, weitere Infos in meinen Beiträgen. Btw, genauso verfahre ich seit drei Jahren und meine Kunden sind zufrieden ;-)

...:cat:...

P.S. In der neuesten Version unserer Software bauen wir das Prinzip weiter aus.

sakura 9. Sep 2003 09:30

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Noch ein Tipp. Falls Eure Software auch auf Rechnern zum Einsatz kommen, welche über den MS Terminal Client angesprochen werden, dann nutzt die Interaktivität der Dienste mit dem Desktop gar nichts mehr, da die User meistens einen virtuellen Desktop erhalten ;-) So habe ich es damals schmerzhaft gelernt diesen Weg zu gehen :mrgreen:

Dann geht es nur noch via IPC und z.B. Pipes oder einem TCP/IP Protokoll.

...:cat:...

Cluni 9. Sep 2003 09:45

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Nein - der Rechner wird als Hauptaufgabe die Messung haben. Man kann halt nur nicht so einfach den Leuten vorschreiben, dass sie nicht noch zusätzliche User einrichten.

Es soll halt nur auf einem ganz normalen Rechner (W2k) sichergestellt werden, dass die Messung auch wirklich läuft ohne darauf angewiesen zu sein, dass sich jemand einloggt. Und das funtzt ja schon hervorragend mit meinem Dienst. Ich finde es nur sehr häßlich, dass das minimierte Fenster der Messerfassung unten auf dem Desktop rumschlummert (wobei es sich auch noch in die Taskleiste legt, wo es eig. nur sein sollte).

Werde das gleich mal mit der einen Möglichkeit probieren (also nachschauen, ob die Taskleiste sichtbar ist oder nicht). Sage dann nochmal, ob's geklappt hat...

Gruß, Cluni

sakura 9. Sep 2003 09:50

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Okay: Vielleicht hast Du ja Erfolg :mrgreen:

Ansonsten gibt es folgende Möglichkeit. Bei Installation der Anwednung durch den Admin, trägt sich die Anwendung in der Registry unter dem Schlüssel

HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

ein. Anschließend wird dieser Eintrag für jeden Benutzer bei der nächsten Anmeldung genau einmal ausgeführt. Damit kannst Du dann den entsprechenden Eintrag beim User in

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

eintragen. Damit bekommt jeder die Möglichkeit auf den Client zuzugreifen.

...:cat:...

P.S.: Nicht falsch verstehen. Versuche es erst einmal über die Taskbar, aber wenn es nicht geht, dann versuche diesen Weg. Der dürfte auch Resourcen-schonender sein ;-)

Cluni 9. Sep 2003 09:58

Re: In einem Dienst feststellen, ob sich ein User anmeldet
 
Zitat:

Zitat von sakura
P.S.: Nicht falsch verstehen. Versuche es erst einmal über die Taskbar, aber wenn es nicht geht, dann versuche diesen Weg. Der dürfte auch Resourcen-schonender sein ;-)

Nee - ich verstehe dich schon nicht falsch. Hab in unserm Forum ja auch oft mit DAUs zu tun (also sollchen Leuten, wie ich es hier jetzt bin *lol*).

Ich bin E-Techniker - auf Resourcen schaue ich grundsätzlich nur bei µ-Controllern... :lol:

Ich werde mir eine Boolean machen, die ich auf ein setze, sobald ich das Fenster einmal geuppt habe. Danach wird dann nicht mehr geuppt. Einmal pro Minute schaue ich dann auch, ob die Taskbar noch da ist (falls sich der jenige wieder ausloggt). Wenn nicht, setze ich die Boolean wieder zurück, damit das Fenster beim nächsten Login wieder geuppt wird.


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