 |
Descripción:
El API CreateProcess startet una Anwendung.
Deklaration:
Def @CreateProcess(10) !KERNEL32,CreateProcessA
Parámetro:
1.Parámetro: Bereichsvariable, en el el Name des a startenden Programmes es (kann 0 ser).
2.Parámetro: Bereichsvariable, en el el Kommandozeile des a startenden Programmes es (Pfad, Dateiname y Parámetro). Achtung! Lange Dateinamen hacer hier eventuell Problemas!!!
3.Parámetro: Bereichsvariable con un Security Descriptor para el a startenden Prozess (kann 0 ser).
4.Parámetro: Bereichsvariable con un Security Descriptor para el el ersten Hilo des a startenden Prozess (kann 0 ser).
5.Parámetro: Flag para el übernahme de Handles. Kann 1 oder 0 ser.
6.Parámetro: Flag para el Art el Erzeugung dss Prozesses (kann 0 ser).
7.Parámetro: Zeiger en una neuen Block con Umgebungsvariablen. Kann 0 ser.
8.Parámetro: Bereichsvariable, en de los neue aktuelle Directorio des a startenden Prozesses es (kann 0 ser)..
9.Parámetro: Struktur oder 68 Byte große Bereichsvariable, en el weitere Informationen encima el Startvorgang des Prozesses posición puede. =>
- Byte 0-3 = Größe des Bereichs / el Struktur
- Byte 4-7 = Muß 0 ser (reserviert).
- Byte 8-11 = 0 o Adresse uno Cuerdas con el Namen des Desktops, en el el Prozess producido voluntad se. Bajo Windows95 se dieser Parámetro ignoriert..
- Bytes 12-15 = 0 oder Adresse des Titels uno Konsolenanwendung.
- Byte 16-19 = Wenn el Flag $4 bajo Byte 44 disponible es, el X-Position des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 20-23 = Wenn el Flag $4 bajo Byte 44 disponible es, el Y-Position des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 24-27 = Wenn el Flag $2 bajo Byte 44 disponible es, el Breite des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 28-31 = Wenn el Flag $2 bajo Byte 44 disponible es, el Höhe des erzeugten Fensters des Prozesses. Ansonsten 0.
- Byte 32-35 = Wenn el Flag $8 bajo Byte 44 disponible es, es hier para una Konsolenanwendung el Breite des Screen-Buffers en ‚(Signo-)Spalten’.
- Byte 36-39 = Wenn el Flag $8 bajo Byte 44 disponible es, es hier para una Konsolenanwendung el Breite des Screen-Buffers en ‚(Signo-)Zeilen’.
- Byte 40-43 = Flags, el para Konsolenprozesse el Texto- y Hintergrundfarben angeben, . si la Flag $10 bajo Byte 44 disponible es. Ansonsten 0.
- Byte 44-47 = Flags, el u.a. angeben welche Miembros el Struktur/des Bereichs verwendet voluntad. El Flags puede con | addiert voluntad. =>
$1 = Der a Byte 48 stehende Flag a Anzeige la ventana se verwendet.
$2 = El a Byte 24 y 28 stehenden Angaben a Höhe y Breite la ventana voluntad verwendet.
$4 = El a Byte 16 y 20 stehenden Angaben a Position la ventana voluntad verwendet.
$8 = El a Byte 32 y 36 stehenden Angaben voluntad verwendet.
$10 = El a Byte 40 stehenden voluntad verwendet.
$40 = Espectáculos beim Aufbau des Prozesses el Cursor „Anwendung se gestartet“ a.
$80 = Normaler Cursor se adecuado (Gegenteil de $40).
$100 = Benutzt el de Byte 56 angegebenen Handles para el Prozess. Dazu muß Parámetro 5 ebenfalls en 1 gesetzt voluntad.
$80000000 = Der Prozess se como una Screensaver behandelt.
- Byte 48-49 = Abbildungsmodus la ventana des Prozesses (siehe 2.Parámetro de WinExec en el Profano Ayuda).
- Byte 50-51 = Reserviert, muß 0 ser.
- Byte 52-55 = Reserviert, muß 0 ser.
- Byte 56-59 = Wenn el Flag $100 bajo Byte 44 disponible es, puede ser hier una standard Inputhandle para el Prozess angeben.
- Byte 60-63 = Wenn el Flag $100 bajo Byte 44 disponible es, puede ser hier una standard Outputhandle para el Prozess angeben.
- Byte 64-67 = Wenn el Flag $100 bajo Byte 44 disponible es, puede ser hier una standard Errorhandle para el Prozess angeben.
10.Parámetro: 16 Byte große Bereichsvariable oder Struktur, el Informationen encima el gestarteten Prozess aufnimmt. =>
- Byte 0-3 = Das Handle des Prozesses.
- Byte 4-7 = Das Handle des ersten Hilos des Prozesses.
- Byte 8-11 = El ID des Prozesses.
- Byte 12-15 = El Hilo-ID des Prozesses.
[/blue]
Rückgabewert:
0 en Mißerfolg, ansonsten 1
Beispiele:
KompilierenMarcaSeparierenDef @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
|
|