AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi In einem Dienst feststellen, ob sich ein User anmeldet
Thema durchsuchen
Ansicht
Themen-Optionen

In einem Dienst feststellen, ob sich ein User anmeldet

Ein Thema von Cluni · begonnen am 8. Sep 2003 · letzter Beitrag vom 9. Sep 2003
Antwort Antwort
Benutzerbild von Cluni
Cluni

Registriert seit: 2. Sep 2003
6 Beiträge
 
#1

In einem Dienst feststellen, ob sich ein User anmeldet

  Alt 8. Sep 2003, 16:37
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!

Gruß, Cluni

http://www.gsm-multifund.de
http://www.gsm-dev.com
http://www.cluni.de
  Mit Zitat antworten Zitat
Benutzerbild von Cluni
Cluni

Registriert seit: 2. Sep 2003
6 Beiträge
 
#2

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

  Alt 9. Sep 2003, 08:52
Hmmm - kann mir niemand helfen???

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!)...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 9. Sep 2003, 09:10
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

......

P.S. Entsprechend der Regeln bitte nur solche Links posten, die direkt mit dem Beitrag zu tun haben - keine Links just so
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Cluni
Cluni

Registriert seit: 2. Sep 2003
6 Beiträge
 
#4

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

  Alt 9. Sep 2003, 09:17
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 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...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 9. Sep 2003, 09:27
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

......

P.S. In der neuesten Version unserer Software bauen wir das Prinzip weiter aus.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 9. Sep 2003, 09:30
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

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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Cluni
Cluni

Registriert seit: 2. Sep 2003
6 Beiträge
 
#7

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

  Alt 9. Sep 2003, 09:45
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 9. Sep 2003, 09:50
Okay: Vielleicht hast Du ja Erfolg

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.

......

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
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Cluni
Cluni

Registriert seit: 2. Sep 2003
6 Beiträge
 
#9

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

  Alt 9. Sep 2003, 09:58
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...

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 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