|
|
|
@ -335,7 +335,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
topAdj = dwMaxHeight + GUI_CAPTION_LINE_HEIGHT * dy; |
|
|
|
topAdj = dwMaxHeight + GUI_CAPTION_LINE_HEIGHT * dy; |
|
|
|
hOldFont = SelectObject(hdcPaint, hFontCaption); |
|
|
|
hOldFont = SelectObject(hdcPaint, hFontCaption); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (!strncmp(line, ";u ", 3)) |
|
|
|
else if (!strncmp(line, ";u ", 3) || (!strncmp(line, ";y ", 3) && !strstr(line, "\xF0\x9F"))) |
|
|
|
{ |
|
|
|
{ |
|
|
|
hOldFont = SelectObject(hdcPaint, hFontUnderline); |
|
|
|
hOldFont = SelectObject(hdcPaint, hFontUnderline); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -513,7 +513,30 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (FindWindowW(L"Shell_TrayWnd", NULL)) |
|
|
|
if (FindWindowW(L"Shell_TrayWnd", NULL)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ZZRestartExplorer(); |
|
|
|
//ZZRestartExplorer(0, 0, 0, 0);
|
|
|
|
|
|
|
|
WCHAR wszPath[MAX_PATH]; |
|
|
|
|
|
|
|
ZeroMemory(wszPath, MAX_PATH * sizeof(WCHAR)); |
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
GetWindowsDirectoryW(wszPath, MAX_PATH); |
|
|
|
|
|
|
|
wcscat_s(wszPath, MAX_PATH, L"\\explorer.exe"); |
|
|
|
|
|
|
|
Sleep(1000); |
|
|
|
|
|
|
|
ShellExecuteW( |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
L"open", |
|
|
|
|
|
|
|
wszPath, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
SW_SHOWNORMAL |
|
|
|
|
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -669,7 +692,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
tabOrder++; |
|
|
|
tabOrder++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (!strncmp(line, ";l ", 3) || !strncmp(line, ";c ", 3) || !strncmp(line, ";b ", 3) || !strncmp(line, ";i ", 3) || !strncmp(line, ";d ", 3) || !strncmp(line, ";v ", 3)) |
|
|
|
else if (!strncmp(line, ";l ", 3) || !strncmp(line, ";y ", 3) || !strncmp(line, ";c ", 3) || !strncmp(line, ";z ", 3) || !strncmp(line, ";b ", 3) || !strncmp(line, ";i ", 3) || !strncmp(line, ";d ", 3) || !strncmp(line, ";v ", 3)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ZeroMemory(text, (MAX_LINE_LENGTH + 3) * sizeof(wchar_t)); |
|
|
|
ZeroMemory(text, (MAX_LINE_LENGTH + 3) * sizeof(wchar_t)); |
|
|
|
text[0] = L'\u2795'; |
|
|
|
text[0] = L'\u2795'; |
|
|
|
@ -678,7 +701,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
MultiByteToWideChar( |
|
|
|
MultiByteToWideChar( |
|
|
|
CP_UTF8, |
|
|
|
CP_UTF8, |
|
|
|
MB_PRECOMPOSED, |
|
|
|
MB_PRECOMPOSED, |
|
|
|
!strncmp(line, ";c ", 3) ? strchr(line + 3, ' ') + 1 : line + 3, |
|
|
|
!strncmp(line, ";c ", 3) || !strncmp(line, ";z ", 3) ? strchr(line + 3, ' ') + 1 : line + 3, |
|
|
|
numChRd - 3, |
|
|
|
numChRd - 3, |
|
|
|
text + 3, |
|
|
|
text + 3, |
|
|
|
MAX_LINE_LENGTH |
|
|
|
MAX_LINE_LENGTH |
|
|
|
@ -688,16 +711,17 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
if (x) *x = 0; |
|
|
|
if (x) *x = 0; |
|
|
|
x = wcschr(text, L'\r'); |
|
|
|
x = wcschr(text, L'\r'); |
|
|
|
if (x) *x = 0; |
|
|
|
if (x) *x = 0; |
|
|
|
if (!strncmp(line, ";c ", 3) || !strncmp(line, ";b ", 3) || !strncmp(line, ";i ", 3) || !strncmp(line, ";d ", 3) || !strncmp(line, ";v ", 3)) |
|
|
|
if (!strncmp(line, ";c ", 3) || !strncmp(line, ";z ", 3) || !strncmp(line, ";b ", 3) || !strncmp(line, ";i ", 3) || !strncmp(line, ";d ", 3) || !strncmp(line, ";v ", 3)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
HMENU hMenu = NULL; |
|
|
|
HMENU hMenu = NULL; |
|
|
|
BOOL bChoice = !strncmp(line, ";c ", 3); |
|
|
|
BOOL bChoice = !strncmp(line, ";c ", 3); |
|
|
|
|
|
|
|
BOOL bChoiceLefted = !strncmp(line, ";z ", 3); |
|
|
|
BOOL bInvert = !strncmp(line, ";i ", 3); |
|
|
|
BOOL bInvert = !strncmp(line, ";i ", 3); |
|
|
|
BOOL bJustCheck = !strncmp(line, ";d ", 3); |
|
|
|
BOOL bJustCheck = !strncmp(line, ";d ", 3); |
|
|
|
BOOL bBool = !strncmp(line, ";b ", 3); |
|
|
|
BOOL bBool = !strncmp(line, ";b ", 3); |
|
|
|
BOOL bValue = !strncmp(line, ";v ", 3); |
|
|
|
BOOL bValue = !strncmp(line, ";v ", 3); |
|
|
|
DWORD numChoices = 0; |
|
|
|
DWORD numChoices = 0; |
|
|
|
if (bChoice) |
|
|
|
if (bChoice || bChoiceLefted) |
|
|
|
{ |
|
|
|
{ |
|
|
|
char* p = strchr(line + 3, ' '); |
|
|
|
char* p = strchr(line + 3, ' '); |
|
|
|
if (p) *p = 0; |
|
|
|
if (p) *p = 0; |
|
|
|
@ -764,6 +788,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
wchar_t* p = wcschr(name, L'"'); |
|
|
|
wchar_t* p = wcschr(name, L'"'); |
|
|
|
if (p) *p = 0; |
|
|
|
if (p) *p = 0; |
|
|
|
HKEY hKey = NULL; |
|
|
|
HKEY hKey = NULL; |
|
|
|
|
|
|
|
BOOL bIsHKLM = wcsstr(section, L"HKEY_LOCAL_MACHINE"); |
|
|
|
DWORD dwDisposition; |
|
|
|
DWORD dwDisposition; |
|
|
|
DWORD dwSize = sizeof(DWORD); |
|
|
|
DWORD dwSize = sizeof(DWORD); |
|
|
|
DWORD value = FALSE; |
|
|
|
DWORD value = FALSE; |
|
|
|
@ -779,12 +804,12 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
if (!bJustCheck) |
|
|
|
if (!bJustCheck) |
|
|
|
{ |
|
|
|
{ |
|
|
|
RegCreateKeyExW( |
|
|
|
RegCreateKeyExW( |
|
|
|
HKEY_CURRENT_USER, |
|
|
|
bIsHKLM ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, |
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
0, |
|
|
|
0, |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
KEY_READ | (hDC ? 0 : KEY_WRITE), |
|
|
|
KEY_READ | (hDC ? 0 : (!bIsHKLM ? KEY_WRITE : 0)), |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
|
&hKey, |
|
|
|
&hKey, |
|
|
|
&dwDisposition |
|
|
|
&dwDisposition |
|
|
|
@ -809,10 +834,10 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
RegOpenKeyExW( |
|
|
|
RegOpenKeyExW( |
|
|
|
HKEY_CURRENT_USER, |
|
|
|
bIsHKLM ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, |
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
KEY_READ | (hDC ? 0 : KEY_WRITE), |
|
|
|
KEY_READ | (hDC ? 0 : (!bIsHKLM ? KEY_WRITE : 0)), |
|
|
|
&hKey |
|
|
|
&hKey |
|
|
|
); |
|
|
|
); |
|
|
|
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE) |
|
|
|
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE) |
|
|
|
@ -849,7 +874,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
buf |
|
|
|
buf |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (bChoice) |
|
|
|
else if (bChoice || bChoiceLefted) |
|
|
|
{ |
|
|
|
{ |
|
|
|
wcscat_s( |
|
|
|
wcscat_s( |
|
|
|
text, |
|
|
|
text, |
|
|
|
@ -881,7 +906,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
&rcTemp, |
|
|
|
&rcTemp, |
|
|
|
DT_CALCRECT |
|
|
|
DT_CALCRECT |
|
|
|
); |
|
|
|
); |
|
|
|
rcText.left += rcTemp.right - rcTemp.left; |
|
|
|
rcText.left += (!bChoiceLefted ? (rcTemp.right - rcTemp.left) : 0); |
|
|
|
for (unsigned int i = 0; i < wcslen(text); ++i) |
|
|
|
for (unsigned int i = 0; i < wcslen(text); ++i) |
|
|
|
{ |
|
|
|
{ |
|
|
|
text[i] = text[i + 3]; |
|
|
|
text[i] = text[i + 3]; |
|
|
|
@ -901,52 +926,110 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (bJustCheck) |
|
|
|
if (bJustCheck) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (hKey) |
|
|
|
if (bIsHKLM && wcsstr(section, L"Software\\Classes\\CLSID\\" _T(EP_CLSID) L"\\InprocServer32")) |
|
|
|
{ |
|
|
|
{ |
|
|
|
RegCloseKey(hKey); |
|
|
|
WCHAR wszArgs[MAX_PATH]; |
|
|
|
hKey = NULL; |
|
|
|
if (!hKey) |
|
|
|
RegDeleteKeyExW( |
|
|
|
{ |
|
|
|
HKEY_CURRENT_USER, |
|
|
|
wszArgs[0] = L'\"'; |
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
SHGetFolderPathW(NULL, SPECIAL_FOLDER, NULL, SHGFP_TYPE_CURRENT, wszArgs + 1); |
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
wcscat_s(wszArgs, MAX_PATH, _T(APP_RELATIVE_PATH) L"\\" _T(PRODUCT_NAME) L".amd64.dll\""); |
|
|
|
0 |
|
|
|
} |
|
|
|
); |
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
wszArgs[0] = L'/'; |
|
|
|
|
|
|
|
wszArgs[1] = L'u'; |
|
|
|
|
|
|
|
wszArgs[2] = L' '; |
|
|
|
|
|
|
|
wszArgs[3] = L'"'; |
|
|
|
|
|
|
|
SHGetFolderPathW(NULL, SPECIAL_FOLDER, NULL, SHGFP_TYPE_CURRENT, wszArgs + 4); |
|
|
|
|
|
|
|
wcscat_s(wszArgs, MAX_PATH, _T(APP_RELATIVE_PATH) L"\\" _T(PRODUCT_NAME) L".amd64.dll\""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
wprintf(L"%s\n", wszArgs); |
|
|
|
|
|
|
|
WCHAR wszApp[MAX_PATH * 2]; |
|
|
|
|
|
|
|
GetSystemDirectoryW(wszApp, MAX_PATH * 2); |
|
|
|
|
|
|
|
wcscat_s(wszApp, MAX_PATH * 2, L"\\regsvr32.exe"); |
|
|
|
|
|
|
|
wprintf(L"%s\n", wszApp); |
|
|
|
|
|
|
|
SHELLEXECUTEINFOW sei; |
|
|
|
|
|
|
|
ZeroMemory(&sei, sizeof(SHELLEXECUTEINFOW)); |
|
|
|
|
|
|
|
sei.cbSize = sizeof(sei); |
|
|
|
|
|
|
|
sei.fMask = SEE_MASK_NOCLOSEPROCESS; |
|
|
|
|
|
|
|
sei.hwnd = NULL; |
|
|
|
|
|
|
|
sei.hInstApp = NULL; |
|
|
|
|
|
|
|
sei.lpVerb = L"runas"; |
|
|
|
|
|
|
|
sei.lpFile = wszApp; |
|
|
|
|
|
|
|
sei.lpParameters = wszArgs; |
|
|
|
|
|
|
|
sei.hwnd = NULL; |
|
|
|
|
|
|
|
sei.nShow = SW_NORMAL; |
|
|
|
|
|
|
|
if (ShellExecuteExW(&sei) && sei.hProcess) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
WaitForSingleObject(sei.hProcess, INFINITE); |
|
|
|
|
|
|
|
DWORD dwExitCode = 0; |
|
|
|
|
|
|
|
if (GetExitCodeProcess(sei.hProcess, &dwExitCode) && !dwExitCode) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
DWORD dwError = GetLastError(); |
|
|
|
|
|
|
|
if (dwError == ERROR_CANCELLED) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
RegCreateKeyExW( |
|
|
|
if (hKey) |
|
|
|
HKEY_CURRENT_USER, |
|
|
|
|
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
|
|
|
|
0, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
|
|
|
|
KEY_WRITE, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
&hKey, |
|
|
|
|
|
|
|
&dwDisposition |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
RegCloseKey(hKey); |
|
|
|
hKey = NULL; |
|
|
|
hKey = NULL; |
|
|
|
|
|
|
|
RegDeleteKeyExW( |
|
|
|
|
|
|
|
bIsHKLM ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, |
|
|
|
|
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
|
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
if (d[1] == '"') |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
wchar_t* p = wcschr(d + 2, L'"'); |
|
|
|
RegCreateKeyExW( |
|
|
|
if (p) *p = 0; |
|
|
|
bIsHKLM ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, |
|
|
|
RegSetValueExW( |
|
|
|
wcschr(section, L'\\') + 1, |
|
|
|
hKey, |
|
|
|
|
|
|
|
!wcsncmp(name, L"@", 1) ? NULL : name, |
|
|
|
|
|
|
|
0, |
|
|
|
0, |
|
|
|
REG_SZ, |
|
|
|
NULL, |
|
|
|
d + 2, |
|
|
|
REG_OPTION_NON_VOLATILE, |
|
|
|
wcslen(d + 2) * sizeof(wchar_t) |
|
|
|
KEY_WRITE, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
&hKey, |
|
|
|
|
|
|
|
&dwDisposition |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
hKey = NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (d[1] == '"') |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
wchar_t* p = wcschr(d + 2, L'"'); |
|
|
|
|
|
|
|
if (p) *p = 0; |
|
|
|
|
|
|
|
RegSetValueExW( |
|
|
|
|
|
|
|
hKey, |
|
|
|
|
|
|
|
!wcsncmp(name, L"@", 1) ? NULL : name, |
|
|
|
|
|
|
|
0, |
|
|
|
|
|
|
|
REG_SZ, |
|
|
|
|
|
|
|
d + 2, |
|
|
|
|
|
|
|
wcslen(d + 2) * sizeof(wchar_t) |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (bChoice) |
|
|
|
if (bChoice || bChoiceLefted) |
|
|
|
{ |
|
|
|
{ |
|
|
|
RECT rcTemp; |
|
|
|
RECT rcTemp; |
|
|
|
rcTemp = rcText; |
|
|
|
rcTemp = rcText; |
|
|
|
@ -958,7 +1041,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
DT_CALCRECT |
|
|
|
DT_CALCRECT |
|
|
|
); |
|
|
|
); |
|
|
|
POINT p; |
|
|
|
POINT p; |
|
|
|
p.x = rcText.left + rcTemp.right - rcTemp.left; |
|
|
|
p.x = rcText.left + (bChoiceLefted ? 0 : (rcTemp.right - rcTemp.left)); |
|
|
|
p.y = rcText.bottom; |
|
|
|
p.y = rcText.bottom; |
|
|
|
ClientToScreen( |
|
|
|
ClientToScreen( |
|
|
|
hwnd, |
|
|
|
hwnd, |
|
|
|
@ -998,7 +1081,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
{ |
|
|
|
{ |
|
|
|
RegCloseKey(hKey); |
|
|
|
RegCloseKey(hKey); |
|
|
|
} |
|
|
|
} |
|
|
|
if (bChoice) |
|
|
|
if (bChoice || bChoiceLefted) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (unsigned int i = 0; i < numChoices; ++i) |
|
|
|
for (unsigned int i = 0; i < numChoices; ++i) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -1015,7 +1098,24 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
DestroyMenu(hMenu); |
|
|
|
DestroyMenu(hMenu); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (!hDC && !strncmp(line, ";l ", 3)) |
|
|
|
if (hDC && (!strncmp(line, ";l ", 3) || !strncmp(line, ";y ", 3))) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
RECT rcTemp; |
|
|
|
|
|
|
|
rcTemp = rcText; |
|
|
|
|
|
|
|
DrawTextW( |
|
|
|
|
|
|
|
hdcPaint, |
|
|
|
|
|
|
|
text, |
|
|
|
|
|
|
|
3, |
|
|
|
|
|
|
|
&rcTemp, |
|
|
|
|
|
|
|
DT_CALCRECT |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
rcText.left += (!strncmp(line, ";l ", 3) ? (rcTemp.right - rcTemp.left) : 0); |
|
|
|
|
|
|
|
for (unsigned int i = 0; i < wcslen(text); ++i) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
text[i] = text[i + 3]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!hDC && (!strncmp(line, ";l ", 3) || !strncmp(line, ";y ", 3))) |
|
|
|
{ |
|
|
|
{ |
|
|
|
RECT rcTemp; |
|
|
|
RECT rcTemp; |
|
|
|
rcTemp = rcText; |
|
|
|
rcTemp = rcText; |
|
|
|
@ -1037,14 +1137,52 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) |
|
|
|
if (p) *p = 0; |
|
|
|
if (p) *p = 0; |
|
|
|
if (line[1] != 0) |
|
|
|
if (line[1] != 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ShellExecuteA( |
|
|
|
if (line[1] == ';') |
|
|
|
NULL, |
|
|
|
{ |
|
|
|
"open", |
|
|
|
if (!strcmp(line + 2, ";EP_CHECK_FOR_UPDATES")) |
|
|
|
line + 1, |
|
|
|
{ |
|
|
|
NULL, |
|
|
|
HANDLE hEvent = CreateEventW(NULL, FALSE, FALSE, L"EP_Ev_CheckForUpdates_" _T(EP_CLSID)); |
|
|
|
NULL, |
|
|
|
if (hEvent) |
|
|
|
SW_SHOWNORMAL |
|
|
|
{ |
|
|
|
); |
|
|
|
if (GetLastError() != ERROR_ALREADY_EXISTS) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CloseHandle(hEvent); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
SetEvent(hEvent); |
|
|
|
|
|
|
|
CloseHandle(hEvent); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if(!strcmp(line + 2, ";EP_INSTALL_UPDATES")) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HANDLE hEvent = CreateEventW(NULL, FALSE, FALSE, L"EP_Ev_InstallUpdates_" _T(EP_CLSID)); |
|
|
|
|
|
|
|
if (hEvent) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (GetLastError() != ERROR_ALREADY_EXISTS) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CloseHandle(hEvent); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
SetEvent(hEvent); |
|
|
|
|
|
|
|
CloseHandle(hEvent); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ShellExecuteA( |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
"open", |
|
|
|
|
|
|
|
line + 1, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
SW_SHOWNORMAL |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1379,6 +1517,13 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR |
|
|
|
|
|
|
|
|
|
|
|
__declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLine, int nCmdShow) |
|
|
|
__declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLine, int nCmdShow) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
HWND hOther = NULL; |
|
|
|
|
|
|
|
if (hOther = FindWindowW(L"ExplorerPatcher_GUI_" _T(EP_CLSID), NULL)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
SetForegroundWindow(hOther); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
HKEY hKey = NULL; |
|
|
|
HKEY hKey = NULL; |
|
|
|
DWORD dwDisposition; |
|
|
|
DWORD dwDisposition; |
|
|
|
DWORD dwSize = sizeof(DWORD); |
|
|
|
DWORD dwSize = sizeof(DWORD); |
|
|
|
@ -1509,7 +1654,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin |
|
|
|
wc.lpfnWndProc = GUI_WindowProc; |
|
|
|
wc.lpfnWndProc = GUI_WindowProc; |
|
|
|
wc.hbrBackground = _this.hBackgroundBrush; |
|
|
|
wc.hbrBackground = _this.hBackgroundBrush; |
|
|
|
wc.hInstance = hModule; |
|
|
|
wc.hInstance = hModule; |
|
|
|
wc.lpszClassName = L"ExplorerPatcherGUI"; |
|
|
|
wc.lpszClassName = L"ExplorerPatcher_GUI_" _T(EP_CLSID); |
|
|
|
wc.hCursor = LoadCursorW(NULL, IDC_ARROW); |
|
|
|
wc.hCursor = LoadCursorW(NULL, IDC_ARROW); |
|
|
|
HMODULE hShell32 = LoadLibraryExW(wszPath, NULL, LOAD_LIBRARY_AS_DATAFILE); |
|
|
|
HMODULE hShell32 = LoadLibraryExW(wszPath, NULL, LOAD_LIBRARY_AS_DATAFILE); |
|
|
|
if (hShell32) |
|
|
|
if (hShell32) |
|
|
|
@ -1569,7 +1714,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin |
|
|
|
} |
|
|
|
} |
|
|
|
HWND hwnd = CreateWindowEx( |
|
|
|
HWND hwnd = CreateWindowEx( |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
|
L"ExplorerPatcherGUI", |
|
|
|
L"ExplorerPatcher_GUI_" _T(EP_CLSID), |
|
|
|
title, |
|
|
|
title, |
|
|
|
WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, |
|
|
|
WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, |
|
|
|
0, |
|
|
|
0, |
|
|
|
@ -1582,6 +1727,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin |
|
|
|
{ |
|
|
|
{ |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (IsThemeActive()) |
|
|
|
if (IsThemeActive()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (bIsCompositionEnabled) |
|
|
|
if (bIsCompositionEnabled) |
|
|
|
|