Announcement

Collapse
No announcement yet.

verstecken und wieder öffnen!?!

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

  • verstecken und wieder öffnen!?!

    Ich habe folgendes Problem... ICh suche eine Code mit dem man eine Application (meine Application) verstecken (das heißt: kein Eintrag in der Taskbar, kein Eintrag im Task-Manager und das Fenster soll auch nicht da sein) und mann soll es wieder anzeigen lassen können (ich habe mir gedacht, dass wenn man die Exe nochmal aufruft, dass dann die Exe wieder zum Vorschein kommt) Kann jemand helfen???

  • #2
    Wenn´s eine richtige VCL-Form ist (also allen "Ich schreibe Mini-EXE"-Rufern zum Trotz, @Andreas Kosch: )), dann reichen im Quelltext zwei Einträge:

    <PRE>
    ShowWindow(Application.Handle,SW_HIDE); // versteckt den Knopf in der Taskleiste
    ShowWindow(Form1.Handle,SW_HIDE); // versteckt das Formular
    </PRE>

    So funktioniert´s bei mir anstandslos. Aufgerufen habe ich beides in "Application.OnActivate". Zum Wiederanzeigen müsstest du dann im DPR-Text nachschauen, ob dein Formular im System bekannt ist (ich schlage "findwindow" vor; aber wenn du den mehrfachen Programmstart auch gleich noch verhindern willst, such mal nach <b>Mutex</b>), und dann müsstest du das Formular und den Knopf in der Taskleiste wieder sichtbar machen.

    Zum Eintrag im Task-Manager: Das funktioniert meines Wissens nach nur unter Win9x, also unter NT/2000/XP würd´ ich´s lassen. Deshalb könnte deine Funktion so aussehen:

    <PRE>
    const
    DllHandle : THandle = 0;
    Kernel32Dll = 'KERNEL32.DLL';
    type
    TRegisterServiceProcess = function(dwProcessID,dwType: integer): integer; stdcall;
    var
    RegisterServiceProcess : TRegisterServiceProcess;
    begin
    DllHandle := LoadLibrary(Kernel32Dll);
    if(DllHandle <> 0) then
    begin
    @RegisterServiceProcess := GetProcAddress(DllHandle,'RegisterServiceProcess') ;
    if(@RegisterServiceProcess = nil) then
    begin
    FreeLibrary(DllHandle); DllHandle := 0;
    end;
    end;
    if(DllHandle <> 0) then RegisterServiceProcess(GetCurrentProcessID,1);
    //
    // hier läuft dein Programm ab, und am Ende --&gt;
    //
    if(DllHandle <> 0) then
    begin
    FreeLibrary(DllHandle); DllHandle := 0;
    end;
    end.
    </PRE>

    Mathias

    Comment


    • #3
      Hallo,<p>
      schau mal noch folgenden Beitrag an: http://www.entwickler-forum.de\webx?50@@.ee847c

      Comment


      • #4
        Danke erstmal, ich werde dann die Beispiele mal testen (Danke

        Comment

        Working...
        X