Announcement

Collapse
No announcement yet.

Dienst mit Formular ????

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dienst mit Formular ????

    Hallo,<br>
    jetzt habe ich mich schon durch sämtlich API-Funktionen (GetDesktopWindow, GetProcessWindowStation, GetThreadDesktop(dwThreadId) usw.) gekämpft und habe jetzt sogar schon eine MessageBox hinbekommen, aber ein Form anzuzeigen habe ich noch nicht geschafft.<br>
    Zur Info: Ich schreibe einen Dienst, der mit einem speziellen Useraccount läuft (also nicht Interaktiv). Daraufhin habe ich das Forum durchsucht und einen Weg gefunden eine MessageBox auf dem Userdesktop darzustellen.<br>Das reicht aber noch nicht. Ich brauche ein ganzes Formular. Weiß jemand wie man das anstellt?<p>
    Danke...
    ah.

  • #2
    Hallo,

    das ist eine ganz schlechte Idee. Die VCL von Delphi ist auf diesen Fall nicht vorbereitet. Da das eine lange Story ist, kommt hier die Kurzfassung:

    1. VCL legt Daten in der Global Atom Table von Windows ab und speichert die erhaltene Atom-ID als eigene Fenstereigenschaft:
    <pre>
    ...
    WindowAtomString := Format('Delphi%.8X',[GetCurrentProcessID]);
    WindowAtom := GlobalAddAtom(PChar(WindowAtomString));
    ControlAtomString := Format('ControlOfs%.8X%.8X', [HInstance, GetCurrentThreadID]);
    ControlAtom := GlobalAddAtom(PChar(ControlAtomString));
    ...
    SetProp(HWindow, MakeIntAtom(ControlAtom), THandle(CreationControl));
    SetProp(HWindow, MakeIntAtom(WindowAtom), THandle(CreationControl));
    </pre>
    2. Wenn sich der interaktiv angemeldete Benutzer abmeldet, leert Windows aus Sicherheitsgründen die Global Atom Table.

    3. Wenn sich der Benutzer später erneut interaktiv anmeldet, wird die GAT erneut aufgebaut und mit neuen Einträgen gefüllt.

    4. Wenn der Dienst das Fenster ein zweites Mal anzeigen will/soll, spielt man russisches Roulette (da die dann aktuellen Global Atom Table-Einträge nicht mehr zur von der VCL gespeicherten ID passen müssen)

    Besser ist es, den Dienst von der GUI zu trennen (also 2 separate EXE) oder komplett auf die VCL zu verzichten

    Comment

    Working...
    X