Browse Source

InputBox provides cancellation feedback and checks against invalid input; fixed a bug in Properties that reset settings when clicking Cancel in the InputBox; fixed a bug in Properties that corrupted the registry entries when InputBox is unable to launch (#734)

pull/886/head
Valentin Radu 4 years ago
parent
commit
60f1bac1f1
  1. 20
      ExplorerPatcher/GUI.c
  2. 19
      ExplorerPatcher/utility.c
  3. 2
      ExplorerPatcher/utility.h

20
ExplorerPatcher/GUI.c

@ -1829,9 +1829,9 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
} }
else else
{ {
WCHAR* wszTitle = malloc(MAX_LINE_LENGTH * sizeof(WCHAR)); //WCHAR* wszTitle = malloc(MAX_LINE_LENGTH * sizeof(WCHAR));
wchar_t* x = wcschr(ddd + 2, L'"'); //wchar_t* x = wcschr(ddd + 2, L'"');
x[0] = 0; //x[0] = 0;
//wprintf(L">>> %s\n", ddd + 2); //wprintf(L">>> %s\n", ddd + 2);
} }
} }
@ -2359,8 +2359,12 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
DWORD val = 0; DWORD val = 0;
if (bInput) if (bInput)
{ {
WCHAR* wszAnswer = malloc(MAX_LINE_LENGTH * sizeof(WCHAR)); WCHAR* wszAnswer = calloc(MAX_LINE_LENGTH, sizeof(WCHAR));
InputBox(FALSE, hwnd, wszPrompt, wszTitle, wszDefault, wszAnswer, MAX_LINE_LENGTH); BOOL bWasCancelled = FALSE;
if (SUCCEEDED(InputBox(FALSE, hwnd, wszPrompt, wszTitle, wszDefault, wszAnswer, MAX_LINE_LENGTH, &bWasCancelled)) && !bWasCancelled)
{
if (wszAnswer[0])
{
GUI_RegSetValueExW( GUI_RegSetValueExW(
hKey, hKey,
name, name,
@ -2369,8 +2373,14 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
wszAnswer, wszAnswer,
(wcslen(wszAnswer) + 1) * sizeof(WCHAR) (wcslen(wszAnswer) + 1) * sizeof(WCHAR)
); );
}
else
{
RegDeleteValueW(hKey, name);
}
Sleep(100); Sleep(100);
PostMessageW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), EP_WEATHER_WM_FETCH_DATA, 0, 0); PostMessageW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), EP_WEATHER_WM_FETCH_DATA, 0, 0);
}
free(wszAnswer); free(wszAnswer);
} }
else if (bChoice || bChoiceLefted) else if (bChoice || bChoiceLefted)

19
ExplorerPatcher/utility.c

@ -1088,10 +1088,15 @@ static LRESULT CALLBACK InputBoxProc(int nCode, WPARAM wParam, LPARAM lParam) {
return CallNextHookEx(0, nCode, wParam, lParam); return CallNextHookEx(0, nCode, wParam, lParam);
} }
HRESULT InputBox(BOOL bPassword, HWND hWnd, LPCWSTR wszPrompt, LPCWSTR wszTitle, LPCWSTR wszDefault, LPCWSTR wszAnswer, DWORD cbAnswer) HRESULT InputBox(BOOL bPassword, HWND hWnd, LPCWSTR wszPrompt, LPCWSTR wszTitle, LPCWSTR wszDefault, LPWSTR wszAnswer, DWORD cbAnswer, BOOL* bCancelled)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
if (!wszPrompt || !wszTitle || !wszDefault || !wszAnswer || !cbAnswer || !bCancelled)
{
return E_FAIL;
}
GUID guidBuffer; GUID guidBuffer;
hr = getEngineGuid(L".vbs", &guidBuffer); hr = getEngineGuid(L".vbs", &guidBuffer);
@ -1162,11 +1167,23 @@ HRESULT InputBox(BOOL bPassword, HWND hWnd, LPCWSTR wszPrompt, LPCWSTR wszTitle,
HideInput = bPassword; HideInput = bPassword;
hr = pActiveScriptParse->lpVtbl->ParseScriptText(pActiveScriptParse, wszEvaluation2, NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &result, &ei); hr = pActiveScriptParse->lpVtbl->ParseScriptText(pActiveScriptParse, wszEvaluation2, NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISEXPRESSION, &result, &ei);
*bCancelled = (result.vt == VT_EMPTY);
UnhookWindowsHookEx(hHook); UnhookWindowsHookEx(hHook);
free(wszEvaluation2); free(wszEvaluation2);
if (result.bstrVal)
{
memcpy(wszAnswer, result.bstrVal, cbAnswer * sizeof(WCHAR)); memcpy(wszAnswer, result.bstrVal, cbAnswer * sizeof(WCHAR));
}
else
{
if (result.vt != VT_EMPTY)
{
wszAnswer[0] = 0;
}
}
VariantClear(&result); VariantClear(&result);
} }

2
ExplorerPatcher/utility.h

@ -249,7 +249,7 @@ char* StrReplaceAllA(const char* s, const char* oldW, const char* newW, int* dwN
WCHAR* StrReplaceAllW(const WCHAR* s, const WCHAR* oldW, const WCHAR* newW, int* dwNewSize); WCHAR* StrReplaceAllW(const WCHAR* s, const WCHAR* oldW, const WCHAR* newW, int* dwNewSize);
HRESULT InputBox(BOOL bPassword, HWND hWnd, LPCWSTR wszPrompt, LPCWSTR wszTitle, LPCWSTR wszDefault, LPCWSTR wszAnswer, DWORD cbAnswer); HRESULT InputBox(BOOL bPassword, HWND hWnd, LPCWSTR wszPrompt, LPCWSTR wszTitle, LPCWSTR wszDefault, LPWSTR wszAnswer, DWORD cbAnswer, BOOL* bCancelled);
inline BOOL IsHighContrast() inline BOOL IsHighContrast()
{ {

Loading…
Cancel
Save