13 HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
18 PROCESSENTRY32 process_entry;
19 process_entry.dwSize =
sizeof(PROCESSENTRY32);
21 if (!Process32First(hSnapShot, &process_entry)) {
22 CloseHandle(hSnapShot);
27 DWORD our_pid = GetCurrentProcessId();
28 DWORD parent_pid = -1;
31 if (process_entry.th32ProcessID == our_pid) {
32 parent_pid = process_entry.th32ParentProcessID;
35 }
while (Process32Next(hSnapShot, &process_entry));
37 if (parent_pid == -1 || !Process32First(hSnapShot, &process_entry)) {
38 CloseHandle(hSnapShot);
46 if (process_entry.th32ProcessID == parent_pid) {
47 if (_wcsicmp(process_entry.szExeFile,
L"steam.exe") == 0) {
52 }
while (Process32Next(hSnapShot, &process_entry));
54 CloseHandle(hSnapShot);
58int WINAPI
wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine,
int nCmdShow)
65 STARTUPINFO siStartInfo = {0};
66 PROCESS_INFORMATION procInfo;
67 wchar_t path[MAX_PATH];
69 siStartInfo.wShowWindow = SW_HIDE;
70 siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
74 DWORD nSize = GetModuleFileName(
NULL, path, MAX_PATH);
84 if (GetLastError() == ERROR_SUCCESS && nSize == MAX_PATH) {
89 if (PathCchRemoveFileSpec(path, MAX_PATH) != S_OK) {
94 if (PathCchCombine(path, MAX_PATH, path,
L"blender.exe") != S_OK) {
98 int required_size_chars = lstrlenW(path) +
102 size_t required_size_bytes = required_size_chars *
sizeof(wchar_t);
103 wchar_t *buffer = (
wchar_t *)malloc(required_size_bytes);
108 if (StringCbPrintfEx(buffer,
112 STRSAFE_NULL_ON_FAILURE,
121 BOOL success = CreateProcess(
122 path, buffer,
NULL,
NULL, TRUE, CREATE_NEW_CONSOLE,
NULL,
NULL, &siStartInfo, &procInfo);
124 DWORD returnValue = success ? 0 : -1;
131 LPWSTR *argv = CommandLineToArgvW(pCmdLine, &argc);
132 for (
int i = 0; i < argc; i++) {
133 if ((wcscmp(argv[i],
L"-b") == 0) || (wcscmp(argv[i],
L"--background") == 0)) {
140 WaitForSingleObject(procInfo.hProcess, INFINITE);
141 GetExitCodeProcess(procInfo.hProcess, &returnValue);
147 CloseHandle(procInfo.hThread);
148 CloseHandle(procInfo.hProcess);