CreateProcess

機能
新しいプロセスとその主スレッドを作成
Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, ByVal lpCommandLine As String, _
lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, _
ByVal bInheritHandles As Long, ByVal dwCreateionFlags As Long, lpEnvironment As Any, _
ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, ByVal lpCommandLine As String, _
lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, _
ByVal bInheritHandles As Integer, ByVal dwCreateionFlags As Integer, lpEnvironment As Integer, _
ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Integer

BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
引数
lpApplicationName

実行モジュール名

VbNullStringを設定も可能。
この場合lpCommandLineに実行モジュール名を設定しなければならない。
lpCommandLineの最初のスペースまでが実行モジュール名と解釈される。

lpApplicationName, lpCommandLineの両方ともVbNullStringでないとき
それぞれ実行モジュール名、コマンドラインとみなされる。

途中にスペースを含む場合、実行モジュール名を
クオテーションで囲まなければ正常に動作しない。
lpCommandLine
コマンドライン

VbNullStringの設定も可能。
この場合lpApplicationNameがコマンドラインを含むとして扱われる。
フルパスで指定されない場合のファイル検索手順は
以下の順番である。

1.アプリケーションの起動したディレクトリ
2.親プロセスのカレントディレクトリ
3.Windows/Systemディレクトリ
4.Windowsディレクトリ
5.環境変数PATH設定したディレクトリ
lpProcessAttributes
ハンドルが子プロセスによって継承されるかを指定する
SECURITY_ATTRIBUTES構造体
ByVal lpProcessAttributes As Longと宣言して0を設定すると
デフォルトのセキュリティになる
lpThreadAttributes
ハンドルが子プロセスによって継承されるかを指定する
SECURITY_ATTRIBUTES構造体
ByVal lpThreadAttributes As Longと宣言して0を設定すると
デフォルトのセキュリティになる
bInheritHandles
新しいプロセスが呼び出しプロセスのハンドルを継承するかどうか指定
1のとき継承する
dwCreateionFlags
プロセスの作成方法を指定する定数の組み合わせ
lpEnvironment
環境文字列
0のとき呼び出したプロセスの環境を利用する
lpCurrentDirectory
作成したプロセスが動作するカレントディレクトリ名
vbNullStringのとき現在のディレクトリ
lpStartupInfo
新しいプロセスのウィンドウの表示方法を指定する
STARTUPINFO構造体
lpProcessInformation
(戻り値)新しいプロセスに関する情報を受け取る
PROCESS_INFORMATION構造体
戻り値
正常終了のとき  0以外
エラーのとき                    0
dwCreateFlagsの定数

CREATE_DEFAULT_ERROR_MODE = &H400000   作成したプロセスは呼び出したプロセスの
                                        エラーモードを継承しない
CREATE_NEW_CONSOLE = &H10              作成したプロセスは
                                        新しいコンソールを持つ
CREATE_NEW_PROCESS_GROUP = &H200       作成したプロセスは、新しいプロセスグループの
                                        ルートプロセスになる
CRAETE_SUSPENED = &H4                  主スレッドを一時停止状態にする
CRAETE_UNICODE_ENVIRONMENT = &H400     lpEnvironmentはUnicodeを使う
DEBUG_PROCESS = &H1                    作成したプロセスはデバッグ用
                                        (子プロセスでイベントが発生すると
                                        親プロセスに通知する)
DEBUG_ONLY_THIS_PROCESS = &H2          デバッグ対象は起動プロセスのみ
DETACHED_PROCESS = &H8                 作成したプロセスは親コンソールの
                                        コンソールにアクセスできない