Entwickler-Ecke

Windows API - Ein anderes Programm verstecken?


Wolle92 - So 23.09.07 20:28
Titel: Ein anderes Programm verstecken?
Hallo, ich wüsste gerne, wie ich ein anderes Programm verstecken kann...


jakobwenzel - So 23.09.07 20:38

Vor was verschtecken? Vor dem Weihnachtsmann? :roll:


Wolle92 - So 23.09.07 20:43

^^ so dass man das fenster nicht mehr sieht...


jakobwenzel - So 23.09.07 20:49

Such dir das Handle und schick per Suche in: Delphi-Forum, Delphi-Library SENDMESSAGE SW_HIDE


Wolle92 - So 23.09.07 20:52

Und wie krieg ich das Handle?


SAiBOT - So 23.09.07 20:56

Suche in: Delphi-Forum FINDWINDOW


jakobwenzel - So 23.09.07 20:56

Auch wenn ich Suche in: Delphi-Forum, Delphi-Library HANDLE nicht mit Suchtags versehen hab (jetz aber schon!), hättest du trotzdem mal danach suchen können.
Da gibts viele tolle Ergebnisse

//EDIT: zu lahm...


Delete - So 23.09.07 22:42

user profile iconjakobwenzel hat folgendes geschrieben:
Such dir das Handle und schick per Suche in: Delphi-Forum, Delphi-Library SENDMESSAGE SW_HIDE

Besser: Suche im MSDN SHOWWINDOW


Wolle92 - Mo 24.09.07 08:29

Kann ich etwas ähnliches wie FindWindow auch mit dem Prozess-Namen machen?


Delete - Mo 24.09.07 09:20

Was willst du denn für ein Programm verstecken und warum? Mit dem Dateinamen geht das auch, wird bloß erheblich schwieriger, da ein Prozess ja mehrere Fenster haben kann. Guck m al im Forum nach Suche in: Delphi-Forum, Delphi-Library GETWINDOWTHREADPROCESSID. Die Idee ist alle Fenster zu enumerieren und gucken, ob ein Fenster zu dem gesuchten Prozess gehört.


Wolle92 - Mo 24.09.07 09:29

Ne, ich möchte Programme, die in der Eingabeaufforderung laufen, verstecken...
Also hat da ein Prozess nur ein Fenster...


Delete - Mo 24.09.07 10:18

Du willst ein Konsolenfenster verstecken? Das wird ungleich schwieriger, da dies keine "normalen" Fenster sind.


Wolle92 - Mo 24.09.07 11:56

Oh... ja, aber es sollte weg...


Wolle92 - Fr 28.09.07 09:48

Darf ich jetzt auch mal erfahren, wie man das versteckt?


Wolle92 - Mi 03.10.07 20:02

Ist das so schwer? Ich find bei Google nichts...
Aber mein Projekt hängt (OK, währenddessen laufen ältere Projekte weiter, aber egal)...


Delete - Do 04.10.07 11:54

Vielleicht solltest Du mal lernen, wie man Fragen RICHTIG stellt, dann bekommst Du auch gleich eine brauchbare Antwort!
Mir ist immer noch nicht klar, ob Du das "Konsolenfenster" öffnest...



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
Function ShellExecuteErrMessage(int_Code: INTEGER): STRING;
 //Gibt die passenede Fehlermeldung zum ShellExecute Fehlercode zurück
Begin
  CASE int_code OF
     0: result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig';
     2: result := 'Datei wurde nicht gefunden.';
     3: result := 'Verzeichnis wurde nicht gefunden.';
     5: result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.';
     6: result := 'Bibliothek forderte separate Datensegmente für jede Task an.';
     8: result := 'Zuwenig Speicher, um die Anwendung zu starten.';
    10: result := 'Falsche Windows-Version.';
    11: result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.';
    12: result := 'Anwendung für ein anderes Betriebssystem.';
    13: result := 'Anwendung für MS-DOS 4.0.';
    14: result := 'Typ der ausführbaren Datei unbekannt.';
    15: result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.';
    16: result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.';
    19: result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.';
    20: result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.';
  ELSE
    result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(int_code) + ')';
  END;
End;

procedure TForm1.FormCreate(Sender: TObject);
var
  Err: Integer;
begin
  Err:=  ShellExecute(0, 
               Nil,
               PChar('cmd.exe'),
               Pchar(''),
               Pchar(''),
               SW_HIDE);   // unsichtbar,     SW_NORMAL = sichtbar);
  if Err <= 32 then
    Showmessage(ShellExecuteErrMessage(Err));
end;


cmd.exe wird beim Beenden des aufrufenden Programms NICHT geschlossen, man muss selbst dafür "sorgen".
Im Windows-Task-Manager unter Anwendungen nicht sichtbar, aber unter Prozesse (cmd.exe).

INFOS:
http://www.winexperts.de/tweaks.asp?status=2&content=Die%20Kommandozeile%20cmd.exe&ID=406

http://de.wikipedia.org/wiki/Command.com#cmd.exe

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true


Wolle92 - Do 04.10.07 14:04

Genau das habe ich gesucht...
Kann ich denn eine bereits existierende cmd.exe wieder anzeigen/verstecken lassen?