CreatePrcess()および他のWindows APIによって作成された他のプロセス(「クライアントプロセス」)を制御するネイティブC ++で記述されたコードがあります。
次に、クライアントプロセス(コンソール、シングルスレッド)は「サーバー」プロセスからのメッセージMSG_OKを待ち、実行を再開します。メッセージが受信されたとき。
PostThreadMessage()を使用しましたが、正常に機能しました。
int MSG_OK = RegisterWindowMessage("MSG_OK");
void run(TCHAR* path) {
STARTUPINFO si={0,}; si.cb=sizeof(STARTUPINFO); si.dwFlags=0;
PROCESS_INFORMATION pi;
CreateProcess(NULL, path, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
Sleep(1000); // Just for simplicity. Actual code is message-based
PostThreadMessage(pi.dwThreadId, MSG_OK, 0, 0);
CloseHandle(pi.hProcess); // closing process handle makes usage count 1
CloseHandle(pi.hThread);
}
ここで、p / invokeをできるだけ使用せずに、C#でコードを書き直したいと思います。以下は私が取り組んでいるコードです:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostThreadMessage(uint threadId, int msg, IntPtr wParam, IntPtr lParam);
public void run(string path) {
Process proc = new Process();
ProcessStartInfo si = new ProcessStartInfo();
si.FileName = path;
proc.StartInfo = si;
proc.Start();
uint threadId; // <----?
PostThreadMessage(threadId, MSG_OK, 0, 0);
proc.Dispose();
}
ProcessやProcessStartinfoなどのC#クラスは見つかりましたが、dwThreadIdに類似したメンバーは見つかりませんでした。ありますか?
編集:クライアントプロセスはシングルスレッドアプリであるため、
proc.Threads[0].id
私が探しているthreadIdのようです。私は何か間違ったことをしていますか?