新しいプロセスとその主スレッドを作成
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
実行モジュール名lpCommandLine
VbNullStringを設定も可能。
この場合lpCommandLineに実行モジュール名を設定しなければならない。
lpCommandLineの最初のスペースまでが実行モジュール名と解釈される。
lpApplicationName, lpCommandLineの両方ともVbNullStringでないとき
それぞれ実行モジュール名、コマンドラインとみなされる。
途中にスペースを含む場合、実行モジュール名を
クオテーションで囲まなければ正常に動作しない。
コマンドラインlpProcessAttributes
VbNullStringの設定も可能。
この場合lpApplicationNameがコマンドラインを含むとして扱われる。
フルパスで指定されない場合のファイル検索手順は
以下の順番である。
1.アプリケーションの起動したディレクトリ
2.親プロセスのカレントディレクトリ
3.Windows/Systemディレクトリ
4.Windowsディレクトリ
5.環境変数PATH設定したディレクトリ
ハンドルが子プロセスによって継承されるかを指定するlpThreadAttributes
SECURITY_ATTRIBUTES構造体
ByVal lpProcessAttributes As Longと宣言して0を設定すると
デフォルトのセキュリティになる
ハンドルが子プロセスによって継承されるかを指定するbInheritHandles
SECURITY_ATTRIBUTES構造体
ByVal lpThreadAttributes As Longと宣言して0を設定すると
デフォルトのセキュリティになる
新しいプロセスが呼び出しプロセスのハンドルを継承するかどうか指定dwCreateionFlags
1のとき継承する
プロセスの作成方法を指定する定数の組み合わせlpEnvironment
環境文字列lpCurrentDirectory
0のとき呼び出したプロセスの環境を利用する
作成したプロセスが動作するカレントディレクトリ名lpStartupInfo
vbNullStringのとき現在のディレクトリ
新しいプロセスのウィンドウの表示方法を指定するlpProcessInformation
STARTUPINFO構造体
(戻り値)新しいプロセスに関する情報を受け取る戻り値
PROCESS_INFORMATION構造体
正常終了のとき 0以外dwCreateFlagsの定数
エラーのとき 0
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 作成したプロセスは親コンソールの
コンソールにアクセスできない