diff --git a/ExplorerPatcher/dllmain.c b/ExplorerPatcher/dllmain.c index e7376f2..b655fd5 100644 --- a/ExplorerPatcher/dllmain.c +++ b/ExplorerPatcher/dllmain.c @@ -3129,7 +3129,7 @@ DWORD WindowSwitcher(DWORD unused) void WINAPI LoadSettings(BOOL bIsExplorer) { HKEY hKey = NULL; - DWORD dwSize = 0; + DWORD dwSize = 0, dwTemp = 0; RegCreateKeyExW( HKEY_CURRENT_USER, @@ -3137,7 +3137,7 @@ void WINAPI LoadSettings(BOOL bIsExplorer) 0, NULL, REG_OPTION_NON_VOLATILE, - KEY_READ | KEY_WOW64_64KEY, + KEY_READ | KEY_WOW64_64KEY | KEY_WRITE, NULL, &hKey, NULL @@ -3157,17 +3157,17 @@ void WINAPI LoadSettings(BOOL bIsExplorer) &bAllocConsole, &dwSize ); - DWORD bMemcheck = FALSE; dwSize = sizeof(DWORD); + dwTemp = 0; RegQueryValueExW( hKey, TEXT("Memcheck"), 0, NULL, - &bMemcheck, + &dwTemp, &dwSize ); - if (bMemcheck) + if (dwTemp) { #if defined(DEBUG) | defined(_DEBUG) _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); @@ -3178,13 +3178,13 @@ void WINAPI LoadSettings(BOOL bIsExplorer) _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT); _CrtDumpMemoryLeaks(); #endif - bMemcheck = FALSE; + dwTemp = 0; RegSetValueExW( hKey, TEXT("Memcheck"), 0, REG_DWORD, - &bMemcheck, + &dwTemp, sizeof(DWORD) ); } @@ -3418,6 +3418,29 @@ void WINAPI LoadSettings(BOOL bIsExplorer) &bToolbarSeparators, &dwSize ); + dwSize = sizeof(DWORD); + dwTemp = 0; + RegQueryValueExW( + hKey, + TEXT("OpenPropertiesAtNextStart"), + 0, + NULL, + &dwTemp, + &dwSize + ); + if (dwTemp) + { + LaunchPropertiesGUI(hModule); + dwTemp = 0; + RegSetValueExW( + hKey, + TEXT("OpenPropertiesAtNextStart"), + 0, + REG_DWORD, + &dwTemp, + sizeof(DWORD) + ); + } RegCloseKey(hKey); } diff --git a/ep_setup/ep_setup.c b/ep_setup/ep_setup.c index 838bbfb..3b11235 100644 --- a/ep_setup/ep_setup.c +++ b/ep_setup/ep_setup.c @@ -364,14 +364,66 @@ int WINAPI wWinMain( GetSystemDirectoryW(wszPath, MAX_PATH); wcscat_s(wszPath, MAX_PATH, L"\\taskkill.exe"); - ShellExecuteW( - NULL, - L"open", - wszPath, - L"/f /im explorer.exe", - NULL, - SW_SHOWMINIMIZED - ); + SHELLEXECUTEINFOW sei; + ZeroMemory(&sei, sizeof(SHELLEXECUTEINFOW)); + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_NOCLOSEPROCESS; + sei.hwnd = NULL; + sei.hInstApp = NULL; + sei.lpVerb = NULL; + sei.lpFile = wszPath; + sei.lpParameters = L"/f /im explorer.exe"; + sei.hwnd = NULL; + sei.nShow = SW_SHOWMINIMIZED; + if (ShellExecuteExW(&sei) && sei.hProcess) + { + WaitForSingleObject(sei.hProcess, INFINITE); + CloseHandle(sei.hProcess); + } + + DWORD dwGUIPid = 0; + GetWindowThreadProcessId(FindWindowW(L"ExplorerPatcher_GUI_" _T(EP_CLSID), NULL), &dwGUIPid); + if (dwGUIPid) + { + HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwGUIPid); + if (hProcess) + { + TerminateProcess(hProcess, 0); + CloseHandle(hProcess); + + HKEY hKey = NULL; + DWORD dwSize = 0; + + RegCreateKeyExW( + HKEY_CURRENT_USER, + TEXT(REGPATH), + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_READ | KEY_WOW64_64KEY | KEY_WRITE, + NULL, + &hKey, + NULL + ); + if (hKey == NULL || hKey == INVALID_HANDLE_VALUE) + { + hKey = NULL; + } + if (hKey) + { + dwSize = TRUE; + RegSetValueExW( + hKey, + TEXT("OpenPropertiesAtNextStart"), + 0, + REG_DWORD, + &dwSize, + sizeof(DWORD) + ); + RegCloseKey(hKey); + } + } + } if (bOk) {