Announcement

Collapse
No announcement yet.

Service-Anwendung (HIlfe)

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

  • Service-Anwendung (HIlfe)

    Hallo,

    ich benötige drigend Hilfe! Ich habe einen Service-Anwendung geschrieben,
    die funktioniert. Ich möchte noch folgendes realisieren:

    Ich benötige eine Programmgerüst, welches im TryIcon-Bereich Zeigt,
    daß der Service gestartet ist und das man dann via PopUpmMenu verschiedene
    Optionen anstoßen kann.

    Die Beispiele die ich bis dato gefunden haben sind viel zu umfangreich,
    oder es handelt sich z.B. um einen Midas-Dienst. Eine Ensprechende
    Komponente zum Anzeige eines Icon im TryIcon-Bereich habe ich.

    Bei der Registrieung des wind das Icon kurz angezeigt, aber nicht wenn
    der Service über den Dienstmanger (oder beim Booten) gestartet wird.

    Ich würde mich über ein einfaches Programmbeispiel sehr freuen!

    vielen Dank

  • #2
    Hallo,

    in diesem Fall würde ich 2 Anwendungen implementieren: <br>
    a) NT-Service ohne Interaktion mit der Benutzeroberfläche <br>
    b) "Bedienteil" als normale Win32-Anwendung für die TNA (Taskbar Notification Area). <br>
    Das "Bedienteil" kann dann über den Service Control Manager den Dienst fernsteuern (starten, stoppen, anhalten). Die Konfigurationsoptionen können über die Registry zwischen beiden Teilen ausgetauscht werden.

    Unter Windows NT ist nur dann eine Programmoberfläche sichtbar, wenn die Anwendung in der gleichen <i>Window Station</i> (WinSTA0) und im gleichen Desktop des interaktiv angemeldeten Benutzers ausgeführt wird. Bei einem NT-Service ist das in der Regel aber nicht der Fall, sondern der Dienst verwendet ein eigenes Konto. Es gibt zwar Mittel und Wege, trotzdem eine Verbindung zum aktuellen Desktop herzustellen, aber die Trennung in 2 Anwendungen ist in jedem Fall sauberer

    Comment


    • #3
      Hallo wollte mich nur mal bedanken für die
      zahlreiche Hilfe

      Comment


      • #4
        Hallo Klaus,
        ich habe ein kleines Demoprogramm, das auf einfache Weise
        zwei Icons (im Wechsel) in der Taskbar-Area anzeigt.
        Mit RightMouseClick auf das Icon wird ein Popup-Menu angezeigt,
        in dem man das Programm schliessen kann.
        Wenn Du mir Deine Email-adresse mitteilst, sende ich Dir gerne
        die komplette Source.

        Ich waere uebrigens sehr daran interessiert den Source von
        der NT-Serviceanwendung zu bekommen, da ich gerade ein
        ähnliches Problem zu loesen habe.

        Viele Gruesse
        Gary

        (************************************************* ***)

        unit Unit1;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls,
        Forms, Dialogs, ShellAPI, StdCtrls, Buttons, ExtCtrls, Menus;

        CONST
        WM_TASKBAREVENT = WM_USER + 1;

        type
        TForm1 = class(TForm)
        BitBtn1: TBitBtn;
        Image1: TImage;
        PopupMenu1: TPopupMenu;
        Close1: TMenuItem;
        Show1: TMenuItem;
        Timer2: TTimer;
        Image2: TImage;
        Timer3: TTimer;
        Memo1: TMemo;
        procedure BitBtn1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Close1Click(Sender: TObject);
        procedure Show1Click(Sender: TObject);
        procedure Timer2Timer(Sender: TObject);
        procedure Timer3Timer(Sender: TObject);
        protected
        procedure WMTASKBAREVENT(var message:TMessage); message WM_TaskBarEvent;
        end;

        var
        Form1: TForm1;
        Ind : INTEGER;

        procedure TaskBarIcon(dwMessage:Cardinal; index:INTEGER);

        implementation

        {$R *.DFM}

        procedure TaskBarIcon(dwMessage:Cardinal; index:INTEGER);
        var tnid: TNOTIFYICONDATA;
        begin
        tnid.cbSize := sizeOf(TNOTIFYICONDATA);
        tnid.Wnd := Form1.handle;
        tnid.uID := 1;
        tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
        tnid.uCallbackMessage := WM_TaskbarEvent;
        CASE index OF
        0 : BEGIN
        tnid.hicon := form1.image1.picture.icon.handle;
        strcopy(tnid.szTip,'DummyProg 1');
        END;
        ELSE BEGIN
        tnid.hicon := form1.image2.picture.icon.handle;
        strcopy(tnid.szTip,'DummyProg 2');
        END;
        END;

        Shell_NotifyIcon(dwMessage, @tnid );
        end;

        (* TForm1 ************************************************** )

        procedure TForm1.FormCreate(Sender: TObject);
        begin
        Ind := 0;
        TaskBarIcon( NIM_ADD,Ind); (* Icon in Taskbar anzeigen *)
        end;

        procedure TForm1.FormDestroy(Sender: TObject);
        begin
        TaskBarIcon( NIM_DELETE,Ind); (* Icon aus der Taskleiste entfernen *)
        end;

        procedure TForm1.WMTaskBarEvent( var Message:TMessage );
        var point: TPoint;
        begin
        case Message.LParamLo OF
        WM_LBUTTONDBLCLK: BEGIN
        Close;
        END;
        WM_RBUTTONDOWN : BEGIN
        GetCursorPos(Point);
        Popupmenu1.popup(point.x,point.y);
        END;
        END;
        end;

        procedure TForm1.Close1Click(Sender: TObject);
        begin
        Close;
        end;

        procedure TForm1.Show1Click(Sender: TObject);
        begin
        Self.Show;
        Timer2.Enabled := TRUE;
        end;

        procedure TForm1.Timer2Timer(Sender: TObject);
        begin
        Self.Hide;
        Timer2.Enabled := FALSE;
        end;

        procedure TForm1.Timer3Timer(Sender: TObject);
        begin
        TaskBarIcon( NIM_MODIFY,Ind );
        Ind := (Ind + 1) MOD 2;
        end;

        procedure TForm1.BitBtn1Click(Sender: TObject);
        begin
        Close;
        end;

        end.

        (************************************************* ********)
        (** FORM1 ************************************************)
        (************************************************* ********)

        object Form1: TForm1
        Left = 522
        Top = 119
        Width = 401
        Height = 135
        Caption = 'TaskbarIcon'
        Color = clBtnFace
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        OldCreateOrder = False
        OnCreate = FormCreate
        OnDestroy = FormDestroy
        PixelsPerInch = 96
        TextHeight = 13
        object Image1: TImage
        Left = 6

        Comment


        • #5
          Hallo Klaus,
          ich habe ein kleines Demoprogramm, das auf einfache Weise
          zwei Icons (im Wechsel) in der Taskbar-Area anzeigt.
          Mit RightMouseClick auf das Icon wird ein Popup-Menu angezeigt,
          in dem man das Programm schliessen kann.
          Wenn Du mir Deine Email-adresse mitteilst, sende ich Dir gerne
          die komplette Source.

          Ich waere uebrigens sehr daran interessiert den Source von
          der NT-Serviceanwendung zu bekommen, da ich gerade ein
          ähnliches Problem zu loesen habe.

          Ich verwende Delphi 4 professional und finde im Assistent kein
          Geruest für eine Serviceanwendung, wie dies in der Hilfe beschrieben ist.

          Viele Gruesse
          Gary

          (***********************************************)

          unit Unit1;

          interface

          uses
          Windows, Messages, SysUtils, Classes, Graphics, Controls,
          Forms, Dialogs, ShellAPI, StdCtrls, Buttons, ExtCtrls, Menus;

          CONST
          WM_TASKBAREVENT = WM_USER + 1;

          type
          TForm1 = class(TForm)
          BitBtn1: TBitBtn;
          Image1: TImage;
          PopupMenu1: TPopupMenu;
          Close1: TMenuItem;
          Show1: TMenuItem;
          Timer2: TTimer;
          Image2: TImage;
          Timer3: TTimer;
          Memo1: TMemo;
          procedure BitBtn1Click(Sender: TObject);
          procedure FormCreate(Sender: TObject);
          procedure FormDestroy(Sender: TObject);
          procedure Close1Click(Sender: TObject);
          procedure Show1Click(Sender: TObject);
          procedure Timer2Timer(Sender: TObject);
          procedure Timer3Timer(Sender: TObject);
          protected
          procedure WMTASKBAREVENT(var message:TMessage); message WM_TaskBarEvent;
          end;

          var
          Form1: TForm1;
          Ind : INTEGER;

          procedure TaskBarIcon(dwMessage:Cardinal; index:INTEGER);

          implementation

          {$R *.DFM}

          procedure TaskBarIcon(dwMessage:Cardinal; index:INTEGER);
          var tnid: TNOTIFYICONDATA;
          begin
          tnid.cbSize := sizeOf(TNOTIFYICONDATA);
          tnid.Wnd := Form1.handle;
          tnid.uID := 1;
          tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
          tnid.uCallbackMessage := WM_TaskbarEvent;
          CASE index OF
          0 : BEGIN
          tnid.hicon := form1.image1.picture.icon.handle;
          strcopy(tnid.szTip,'DummyProg 1');
          END;
          ELSE BEGIN
          tnid.hicon := form1.image2.picture.icon.handle;
          strcopy(tnid.szTip,'DummyProg 2');
          END;
          END;

          Shell_NotifyIcon(dwMessage, @tnid );
          end;

          (* TForm1 ************************************************** )

          procedure TForm1.FormCreate(Sender: TObject);
          begin
          Ind := 0;
          TaskBarIcon( NIM_ADD,Ind); (* Icon in Taskbar anzeigen *)
          end;

          procedure TForm1.FormDestroy(Sender: TObject);
          begin
          TaskBarIcon( NIM_DELETE,Ind); (* Icon aus der Taskleiste entfernen *)
          end;

          procedure TForm1.WMTaskBarEvent( var Message:TMessage );
          var point: TPoint;
          begin
          case Message.LParamLo OF
          WM_LBUTTONDBLCLK: BEGIN
          Close;
          END;
          WM_RBUTTONDOWN : BEGIN
          GetCursorPos(Point);
          Popupmenu1.popup(point.x,point.y);
          END;
          END;
          end;

          procedure TForm1.Close1Click(Sender: TObject);
          begin
          Close;
          end;

          procedure TForm1.Show1Click(Sender: TObject);
          begin
          Self.Show;
          Timer2.Enabled := TRUE;
          end;

          procedure TForm1.Timer2Timer(Sender: TObject);
          begin
          Self.Hide;
          Timer2.Enabled := FALSE;
          end;

          procedure TForm1.Timer3Timer(Sender: TObject);
          begin
          TaskBarIcon( NIM_MODIFY,Ind );
          Ind := (Ind + 1) MOD 2;
          end;

          procedure TForm1.BitBtn1Click(Sender: TObject);
          begin
          Close;
          end;

          end

          Comment


          • #6
            Hallo Klaus,
            Ich waere uebrigens sehr daran interessiert den Source von
            der NT-Serviceanwendung zu bekommen, da ich gerade ein
            ähnliches Problem zu loesen habe.

            Ich verwende Delphi 4 professional und finde im Assistent kein
            Geruest für eine Serviceanwendung, wie dies in der Hilfe beschrieben ist.

            Viele Gruesse
            Gar

            Comment


            • #7
              Ich waere uebrigens sehr daran interessiert den Source von
              der NT-Serviceanwendung zu bekommen, da ich gerade ein
              ähnliches Problem zu loesen habe.

              Ich verwende Delphi 4 professional und finde im Assistent kein
              Geruest für eine Serviceanwendung, wie dies in der Hilfe beschrieben ist.

              Meine Email-Adresse ist [email protected]

              Vielen Dank und viele Gruesse
              Gar

              Comment

              Working...
              X