| |
|
|
|
Beschreibung:
qui API CreateProcess startet une Anwendung.
Deklaration:
Def @CreateProcess(10) !KERNEL32,CreateProcessA
paramètre: 1.paramètre: Bereichsvariable, dans qui qui nom des trop startenden Programmes steht (peux 0 son).
2.paramètre: Bereichsvariable, dans qui qui Kommandozeile des trop startenden Programmes steht (Pfad, Dateiname et paramètre). attention! longtemps Dateinamen faire ici eventuell Probleme!!!
3.paramètre: Bereichsvariable avec einem Security Descriptor pour den trop startenden Prozess (peux 0 son).
4.paramètre: Bereichsvariable avec einem Security Descriptor pour den den ersten Fil des trop startenden Prozess (peux 0 son).
5.paramètre: Flag pour qui übernahme de Handles. peux 1 ou bien 0 son.
6.paramètre: Flag pour qui Art qui Erzeugung dss Prozesses (peux 0 son).
7.paramètre: aiguille sur une neuen Block avec Umgebungsvariablen. peux 0 son.
8.paramètre: Bereichsvariable, dans qui cela neue aktuelle Verzeichnis des trop startenden Prozesses steht (peux 0 son)..
9.paramètre: Struktur ou bien 68 Byte grand Bereichsvariable, dans qui weitere Informationen sur den Startvorgang des Prozesses stehen peut. =>
- Byte 0-3 = Taille des Bereichs / qui Struktur
- Byte 4-7 = Doit 0 son (reserviert).
- Byte 8-11 = 0 ou bien qui Adresse eines Cordes avec dem Namen des Desktops, sur dem qui Prozess erzeugt volonté soll. sous Windows95 wird cette paramètre ignoriert..
- Bytes 12-15 = 0 ou bien Adresse des Titels einer Konsolenanwendung.
- Byte 16-19 = si qui Flag $4 sous Byte 44 vorhanden ist, qui X-Position des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 20-23 = si qui Flag $4 sous Byte 44 vorhanden ist, qui Y-Position des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 24-27 = si qui Flag $2 sous Byte 44 vorhanden ist, qui Breite des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 28-31 = si qui Flag $2 sous Byte 44 vorhanden ist, qui Hauteur des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 32-35 = si qui Flag $8 sous Byte 44 vorhanden ist, steht ici pour une Konsolenanwendung qui Breite des Screen-Buffers dans ‚(marque-)Spalten’.
- Byte 36-39 = si qui Flag $8 sous Byte 44 vorhanden ist, steht ici pour une Konsolenanwendung qui Breite des Screen-Buffers dans ‚(marque-)Zeilen’.
- Byte 40-43 = Flags, qui pour Konsolenprozesse qui Text- et Hintergrundfarben angeben, . si qui Flag $10 sous Byte 44 vorhanden ist. Ansonsten 0.
- Byte 44-47 = Flags, qui u.a. angeben quelle Mitglieder qui Struktur/des Bereichs verwendet volonté. qui Flags peut avec | addiert volonté. =>
$1 = qui à Byte 48 stehende Flag zur Anzeige des Fensters wird verwendet.
$2 = qui à Byte 24 et 28 stehenden Angaben trop Hauteur et Breite des Fensters volonté verwendet.
$4 = qui à Byte 16 et 20 stehenden Angaben zur Position des Fensters volonté verwendet.
$8 = qui à Byte 32 et 36 stehenden Angaben volonté verwendet.
$10 = qui à Byte 40 stehenden volonté verwendet.
$40 = Zeigt beim Aufbau des Prozesses den Cursor „Anwendung wird gestartet“ à.
$80 = Normaler Cursor wird angezeigt (Gegenteil de $40).
$100 = Benutzt qui ab Byte 56 angegebenen Handles pour den Prozess. en supplément doit paramètre 5 également sur 1 gesetzt volonté.
$80000000 = qui Prozess wird comment un Screensaver behandelt.
- Byte 48-49 = Abbildungsmodus des Fensters des Prozesses (siehe 2.paramètre de WinExec dans qui Profan Aider).
- Byte 50-51 = Reserviert, doit 0 son.
- Byte 52-55 = Reserviert, doit 0 son.
- Byte 56-59 = si qui Flag $100 sous Byte 44 vorhanden ist, peux on ici un standard Inputhandle pour den Prozess angeben.
- Byte 60-63 = si qui Flag $100 sous Byte 44 vorhanden ist, peux on ici un standard Outputhandle pour den Prozess angeben.
- Byte 64-67 = si qui Flag $100 sous Byte 44 vorhanden ist, peux on ici un standard Errorhandle pour den Prozess angeben.
10.paramètre: 16 Byte grand Bereichsvariable ou bien Struktur, qui Informationen sur den gestarteten Prozess aufnimmt. =>
- Byte 0-3 = cela Handle des Prozesses.
- Byte 4-7 = cela Handle des ersten Threads des Prozesses.
- Byte 8-11 = qui ID des Prozesses.
- Byte 12-15 = qui Fil-ID des Prozesses.
[/blue]
Rückgabewert:
0 chez Mißerfolg, ansonsten 1
Beispiele:
KompilierenMarqueSeparierenDef @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
'./../../function-references/xprofan/endif/'>Endif
Wend
Prozess Anwendung Programm Task starten beenden überwachen
|
|
|
| |
|
|