Autor Beitrag
megaman7de
Hält's aus hier
Beiträge: 10

Win XP Prof.
Delphi 2005
BeitragVerfasst: So 15.08.04 01:57 
wie bekomme ich es hin das ein programm "unsichtbar" ist ?
ich will nemlich ein prog, das wenn es ohne parameter gestartet wird, "unsichtbar" ist aber dennoch da ist.


Moderiert von user profile iconTino: Topic aus VCL (Visual Component Library) verschoben am Sa 26.02.2005 um 20:30
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 15.08.04 02:22 
In OnCreate der Form

ausblenden Delphi-Quelltext
1:
Application.ShowMainForm := false;					

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Look4Alhqeia
Hält's aus hier
Beiträge: 3

WIN NT 4.0, WIN 2000 Pro, WIN XP Pro
D7 Pro
BeitragVerfasst: Fr 20.08.04 23:30 
Titel: Was meinst Du mit: nicht da?
"Nicht da" kann vieles heißen! Du kannst einfach nur das Formular verstecken, Du kannst aber auch das Icon verstecken und Du kannst sogar das Programm aus dem Taskmanager verstecken.

Um das Formular einfach auszublenden ist der Ansatz mit

ausblenden Delphi-Quelltext
1:
Application.ShowMainForm:= false;					


ein guter Ansatz. Hier solltest Du aber überprüfen, ob Übergabeparamter angegeben sind und dieser Aufruf in eine Bedingung setzen.

Auch solltest Du Dir Gedanken darüber machen, wie Du das Programm aktiviert und damit auch sichtbar bekommst! Hier erscheint möglicherweise ein Icon in der NotificationArea sinnvoll.

Die Schaltfläche aus der Taskbar kannst Du mit folgendem Code ausblenden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow( Application.Handle, SW_HIDE );
  SetWindowLong( Application.Handle, GWL_EXSTYLE,
                 GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                 WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
  ShowWindow( Application.Handle, SW_SHOW );
end;


Willst Du das Programm auch aus dem Taskmanager verschwinden lassen, womit Du vorbeugst, dass es nicht einfach so geschlossen werden kann (Achtung: Du kannst es dann bei Fehlverhalten auch nicht mehr schließen, außer durch einen Neustart des Systems), dann kannst Du folgenden Ansatz wählen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
interface
  
uses

  function RegisterServiceProcess
    (dwProcessID, dwType: DWord) : DWord; stdcall;


implementation

{$R *.DFM}

function RegisterServiceProcess
  (dwProcessID, dwType: DWord): DWord; 
  external 'KERNEL32.DLL';'RegisterServiceProcess';


Die Anwendung verstecken:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure VersteckeAnwendung;
begin
  RegisterServiceProcess(0,1);
end;


Die Anwendung wieder einblenden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure ZeigeAnwendung;
begin
  RegisterServiceProcess(0,0);
end;

_________________
:-) Karsten.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.08.04 23:33 
"RegisterServiceProcess" funktioniert nicht unter NT-Systemen. Und Nein, eine einfache Möglichkeit, sein Programm aus dem NT-Taskmanager verschwinden zu lassen, ist mir nicht bekannt. Wurde ja auch schon oft genug diskutiert.
Look4Alhqeia
Hält's aus hier
Beiträge: 3

WIN NT 4.0, WIN 2000 Pro, WIN XP Pro
D7 Pro
BeitragVerfasst: So 22.08.04 00:47 
Titel: Danke
Zitat:
Hallo Mathias,

klar muss ich Dir erst einmal danke sagen. Es muss Mühe machen, wenn man so destruktiv ist und die meisten danken es noch nicht einmal. Lass' mich die Ausnahme sein: Danke.

Der Angemachte.


Nun aber zu dem tatsächlichen Problem. Es stellt sich für mich ernsthaft die Frage, ob man wirklich ein Programm entwickeln will, auf welches man keinen Zugriff mehr hat. Für was braucht man so etwas, wenn man anderen nichts böses tun will.

Sofern man einen Dienst etablieren möchte, verwendet man unter NT-Systemen einen Service oder halt unter den anderen ein Programm, welches man jedoch regelmäßig in der Notification-Area anzeigt, um eine Steuerung zu erlauben.
In dem letzteren Falle würde man nicht wirklich ein Formular verstecken müssen oder wer baut Dienst basierend auf einem Formular auf?!

Als kleine Anmerkung: Es sollte jedem Windows-Entwickler bewußt sein, dass es keine einheitliche Lösung über alle Windows-Systeme gibt. In vielen Fällen muss es unterschiedliche Lösungen geben. Das kann versions- aber auch systembezogen sein. Die Kunst des Entwicklers liegt darin, diese Unterschiede vor dem Endanwender zu verbergen und ihm eine einheitliche Schnittstelle zur Verfügung zu stellen.

Zur vernünftigen Lösung des Problems wären also nähere Angaben dazu notwendig, was Du mit dem Verbergen des Hauptformulars bezweckst.

_________________
:-) Karsten.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.08.04 08:22 
Titel: Re: Danke
Look4Alhqeia hat folgendes geschrieben:
Zitat:
Hallo Mathias,

klar muss ich Dir erst einmal danke sagen. Es muss Mühe machen, wenn man so destruktiv ist und die meisten danken es noch nicht einmal. Lass' mich die Ausnahme sein: Danke.

Der Angemachte.

:gruebel: Verstehe ich nicht. Aber okay ...