ShellExecute から PID を取得する
アプリケーションをShellExecute関数で起動したら、そのアプリケーションのProcess ID (PID) をShellExecuteEx関数で取得できます。
以下に、ShellExecuteEx 関数を使用して PID を取得するコード例を示します。
#include <windows.h>
#include <iostream>
int main()
{
// 定义并初始化SHELLEXECUTEINFO结构体
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS; // 设置该标志位以获取进程句柄
sei.lpFile = TEXT("C:\\path\\to\\your\\application.exe"); // 要打开的应用程序路径
// 使用ShellExecuteEx函数打开应用程序
if (ShellExecuteEx(&sei))
{
// 获取进程ID
DWORD pid = GetProcessId(sei.hProcess);
// 输出进程ID
std::cout << "Process ID: " << pid << std::endl;
// 关闭进程句柄
CloseHandle(sei.hProcess);
}
else
{
// 打开应用程序失败
std::cout << "Failed to open application." << std::endl;
}
return 0;
}
上記ではShellExecuteEx関数を用いてアプリケーションを開き、SEE_MASK_NOCLOSEPROCESSフラグを設定することでプロセスハンドルを取得します。その後、GetProcessId関数でプロセスIDを取得し、コンソールに出力します。最後に、CloseHandle関数でプロセスハンドルを閉じます。
尚、ShellExecuteEx関数は、アプリだけでなく、あらゆるファイルを開くことができます。ファイルの種類は、sei.lpFileに開くファイルへのパスを設定するだけで開くことができます。