| |
|
|
|
Beschreibung:
Die API CreateProcess startet eine Anwendung.
Deklaration:
Def @CreateProcess(10) !KERNEL32,CreateProcessA
Parameter: 1.Parameter: Bereichsvariable, in der der Name des zu startenden Programmes steht (kann 0 sein).
2.Parameter: Bereichsvariable, in der die Kommandozeile des zu startenden Programmes steht (Pfad, Dateiname und Parameter). Achtung! Lange Dateinamen machen hier eventuell Probleme!!!
3.Parameter: Bereichsvariable mit einem Security Descriptor für den zu startenden Prozess (kann 0 sein).
4.Parameter: Bereichsvariable mit einem Security Descriptor für den den ersten Thread des zu startenden Prozess (kann 0 sein).
5.Parameter: Flag für die übernahme von Handles. Kann 1 oder 0 sein.
6.Parameter: Flag für die Art der Erzeugung dss Prozesses (kann 0 sein).
7.Parameter: Zeiger auf einen neuen Block mit Umgebungsvariablen. Kann 0 sein.
8.Parameter: Bereichsvariable, in der das neue aktuelle Verzeichnis des zu startenden Prozesses steht (kann 0 sein)..
9.Parameter: Struktur oder 68 Byte große Bereichsvariable, in der weitere Informationen über den Startvorgang des Prozesses stehen können. =>
- Byte 0-3 = Größe des Bereichs / der Struktur
- Byte 4-7 = Muß 0 sein (reserviert).
- Byte 8-11 = 0 oder die Adresse eines Strings mit dem Namen des Desktops, auf dem der Prozess erzeugt werden soll. Unter Windows95 wird dieser Parameter ignoriert..
- Bytes 12-15 = 0 oder Adresse des Titels einer Konsolenanwendung.
- Byte 16-19 = Wenn der Flag $4 unter Byte 44 vorhanden ist, die X-Position des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 20-23 = Wenn der Flag $4 unter Byte 44 vorhanden ist, die Y-Position des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 24-27 = Wenn der Flag $2 unter Byte 44 vorhanden ist, die Breite des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 28-31 = Wenn der Flag $2 unter Byte 44 vorhanden ist, die Höhe des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 32-35 = Wenn der Flag $8 unter Byte 44 vorhanden ist, steht hier für eine Konsolenanwendung die Breite des Screen-Buffers in ‚(Zeichen-)Spalten’.
- Byte 36-39 = Wenn der Flag $8 unter Byte 44 vorhanden ist, steht hier für eine Konsolenanwendung die Breite des Screen-Buffers in ‚(Zeichen-)Zeilen’.
- Byte 40-43 = Flags, die für Konsolenprozesse die Text- und Hintergrundfarben angeben, . wenn der Flag $10 unter Byte 44 vorhanden ist. Ansonsten 0.
- Byte 44-47 = Flags, die u.a. angeben welche Mitglieder der Struktur/des Bereichs verwendet werden. Die Flags können mit | addiert werden. =>
$1 = Der an Byte 48 stehende Flag zur Anzeige des Fensters wird verwendet.
$2 = Die an Byte 24 und 28 stehenden Angaben zu Höhe und Breite des Fensters werden verwendet.
$4 = Die an Byte 16 und 20 stehenden Angaben zur Position des Fensters werden verwendet.
$8 = Die an Byte 32 und 36 stehenden Angaben werden verwendet.
$10 = Die an Byte 40 stehenden werden verwendet.
$40 = Zeigt beim Aufbau des Prozesses den Cursor „Anwendung wird gestartet“ an.
$80 = Normaler Cursor wird angezeigt (Gegenteil von $40).
$100 = Benutzt die ab Byte 56 angegebenen Handles für den Prozess. Dazu muß Parameter 5 ebenfalls auf 1 gesetzt werden.
$80000000 = Der Prozess wird wie ein Screensaver behandelt.
- Byte 48-49 = Abbildungsmodus des Fensters des Prozesses (siehe 2.Parameter von WinExec in der Profan Hilfe).
- Byte 50-51 = Reserviert, muß 0 sein.
- Byte 52-55 = Reserviert, muß 0 sein.
- Byte 56-59 = Wenn der Flag $100 unter Byte 44 vorhanden ist, kann man hier ein standard Inputhandle für den Prozess angeben.
- Byte 60-63 = Wenn der Flag $100 unter Byte 44 vorhanden ist, kann man hier ein standard Outputhandle für den Prozess angeben.
- Byte 64-67 = Wenn der Flag $100 unter Byte 44 vorhanden ist, kann man hier ein standard Errorhandle für den Prozess angeben.
10.Parameter: 16 Byte große Bereichsvariable oder Struktur, die Informationen über den gestarteten Prozess aufnimmt. =>
- Byte 0-3 = Das Handle des Prozesses.
- Byte 4-7 = Das Handle des ersten Threads des Prozesses.
- Byte 8-11 = Die ID des Prozesses.
- Byte 12-15 = Die Thread-ID des Prozesses.
[/blue]
Rückgabewert:
0 bei Mißerfolg, ansonsten 1
Beispiele:
KompilierenMarkierenSeparierenDef @CreateProcess(10) !"KERNEL32","CreateProcessA"
Def @GetExitCodeProcess(2) !"KERNEL32","GetExitCodeProcess"
Def @TerminateProcess(2) !"KERNEL32","TerminateProcess"
Declare Command#,StartupInfo#,ProcessInfo#,ExitCode#
Proc CreateProcess
Parameters command$
Declare handle&
Dim Command#,Add(Len(command$),1)
Dim StartupInfo#,68
Clear startupinfo#
Long StartupInfo#,0=68
Dim ProcessInfo#,16
Clear ProcessInfo#
String Command#,0=command$
@CreateProcess(0,Command#,0,0,0,0,0,0,StartupInfo#,ProcessInfo#)
Let handle&=Long(ProcessInfo#,0)
Dispose Command#
Dispose StartupInfo#
Dispose ProcessInfo#
Return handle&
EndProc
Proc KillProcess
Parameters hprocess&
Dim exitcode#,4
@GetExitCodeProcess(hprocess&,exitcode#)
@TerminateProcess(hprocess&,@Long(exitcode#,0))
Dispose exitcode#
EndProc
Declare Terminate&,Start&,Programm$
Windowstyle 31
WindowTitle Process starten und killen
Window 0,0-640,440
Let Start&=@CreateButton(%HWND,Start,20,300,100,30)
Let Terminate&=@CreateButton(%HWND,"Terminate",200,300,100,30)
Enablewindow Terminate&,0
Enablewindow Start&,1
While 0=0
Waitinput
IF @Getfocus(Terminate&)
KillProcess @&(0)
Enablewindow Terminate&,0
Enablewindow Start&,1
ElseIF @Getfocus(Start&)
Let Programm$=@Loadfile$("Eine Anwendung auswählen:","Programme|*.EXE;*.COM;*.PIF;*.BAT")
IF Programm$<>
CreateProcess Programm$,
Enablewindow Terminate&,1
Enablewindow Start&,0
endif
Endif
Wend
Prozess Anwendung Programm Task starten beenden überwachen
|
|
|
| |
|
|