13 HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
19 PROCESSENTRY32 process_entry;
20 process_entry.dwSize =
sizeof(PROCESSENTRY32);
22 if (!Process32First(hSnapShot, &process_entry)) {
23 CloseHandle(hSnapShot);
28 DWORD our_pid = GetCurrentProcessId();
29 DWORD parent_pid = -1;
32 if (process_entry.th32ProcessID == our_pid) {
33 parent_pid = process_entry.th32ParentProcessID;
36 }
while (Process32Next(hSnapShot, &process_entry));
38 if (parent_pid == -1 || !Process32First(hSnapShot, &process_entry)) {
39 CloseHandle(hSnapShot);
47 if (process_entry.th32ProcessID == parent_pid) {
48 if (_wcsicmp(process_entry.szExeFile,
L"steam.exe") == 0) {
53 }
while (Process32Next(hSnapShot, &process_entry));
55 CloseHandle(hSnapShot);
59int WINAPI
wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine,
int nCmdShow)
66 STARTUPINFO siStartInfo = {0};
67 PROCESS_INFORMATION procInfo;
68 wchar_t path[MAX_PATH];
70 siStartInfo.wShowWindow = SW_HIDE;
71 siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
75 DWORD nSize = GetModuleFileName(NULL, path, MAX_PATH);
85 if (GetLastError() == ERROR_SUCCESS && nSize == MAX_PATH) {
90 if (PathCchRemoveFileSpec(path, MAX_PATH) != S_OK) {
95 if (PathCchCombine(path, MAX_PATH, path,
L"blender.exe") != S_OK) {
99 int required_size_chars = lstrlenW(path) +
103 size_t required_size_bytes = required_size_chars *
sizeof(wchar_t);
104 wchar_t *buffer = (
wchar_t *)malloc(required_size_bytes);
109 if (StringCbPrintfEx(buffer,
113 STRSAFE_NULL_ON_FAILURE,
122 BOOL success = CreateProcess(
123 path, buffer, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &siStartInfo, &procInfo);
125 DWORD returnValue = success ? 0 : -1;
132 LPWSTR *argv = CommandLineToArgvW(pCmdLine, &argc);
133 for (
int i = 0;
i < argc;
i++) {
134 if ((wcscmp(argv[
i],
L"-b") == 0) || (wcscmp(argv[
i],
L"--background") == 0)) {
141 WaitForSingleObject(procInfo.hProcess, INFINITE);
142 GetExitCodeProcess(procInfo.hProcess, &returnValue);
148 CloseHandle(procInfo.hThread);
149 CloseHandle(procInfo.hProcess);