diff --git a/launcher/CmderLauncher.sln b/launcher/CmderLauncher.sln index 7cf5ae5..16b9b66 100644 --- a/launcher/CmderLauncher.sln +++ b/launcher/CmderLauncher.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.23107.0 diff --git a/launcher/CmderLauncher.vcxproj b/launcher/CmderLauncher.vcxproj index 6076523..96b1f47 100644 --- a/launcher/CmderLauncher.vcxproj +++ b/launcher/CmderLauncher.vcxproj @@ -22,13 +22,12 @@ {4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3} Win32Proj CmderLauncher - 10.0.16299.0 Application true - v141_xp + v140 Unicode @@ -36,7 +35,7 @@ false true Unicode - v141 + v140 Application @@ -95,6 +94,7 @@ Windows true + src/app.manifest %(AdditionalManifestFiles) @@ -121,6 +121,7 @@ true true true + src/app.manifest %(AdditionalManifestFiles) @@ -176,7 +177,7 @@ - + RC diff --git a/launcher/src/CmderLauncher.cpp b/launcher/src/CmderLauncher.cpp index 5d36566..0049100 100644 --- a/launcher/src/CmderLauncher.cpp +++ b/launcher/src/CmderLauncher.cpp @@ -9,6 +9,7 @@ #include #pragma comment(lib, "Shlwapi.lib") +#pragma comment(lib, "comctl32.lib") #pragma warning( disable : 4091 ) #ifndef UNICODE @@ -31,6 +32,39 @@ #define FAIL_ON_ERROR(x) { DWORD ec; if ((ec = (x)) != ERROR_SUCCESS) { ShowErrorAndExit(ec, __WFUNCTION__, __LINE__); } } +void TaskDialogOpen( PCWSTR mainStr, PCWSTR contentStr ) +{ + + HRESULT hr = NULL; + + TASKDIALOGCONFIG tsk = {sizeof(tsk)}; + + HWND hOwner = NULL; + HINSTANCE hInstance = GetModuleHandle(NULL); + PCWSTR tskTitle = MAKEINTRESOURCE(IDS_TITLE); + + tsk.hInstance = hInstance; + tsk.pszMainIcon = MAKEINTRESOURCE(IDI_CMDER); + tsk.pszWindowTitle = tskTitle; + tsk.pszMainInstruction = mainStr; + tsk.pszContent = contentStr; + + TASKDIALOG_BUTTON btns[1] = { + { IDOK, L"OK" } + }; + + tsk.dwFlags = TDF_ALLOW_DIALOG_CANCELLATION|TDF_ENABLE_HYPERLINKS; + tsk.pButtons = btns; + tsk.cButtons = _countof(btns); + + tsk.hwndParent = hOwner; + + int selectedButtonId = IDOK; + + hr = TaskDialogIndirect( &tsk, &selectedButtonId, NULL, NULL ); + +} + void ShowErrorAndExit(DWORD ec, const wchar_t * func, int line) { wchar_t * buffer; @@ -164,7 +198,7 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr */ if (wcscmp(userConfigDirPath, L"") == 0) { - // No - It wasn't. + // No - It wasn't. PathCombine(userConfigDirPath, exeDir, L"config"); } else @@ -306,7 +340,7 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml"); } } - else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified + else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified { if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml { @@ -673,16 +707,25 @@ cmderOptions GetOption() } else { - MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n /icon [CMDER Icon Path]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\n /m\n\n /x [ConEmu extra arguments]\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK); cmderOptions.error = true; } } else { - MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n /icon [CMDER Icon Path]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\n /m\n\n /x [ConEmu extra arguments]\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK); cmderOptions.error = true; } } + + } + + if (cmderOptions.error == true) + { + wchar_t validOptions[512]; + HMODULE hMod = GetModuleHandle(NULL); + LoadString(hMod, IDS_SWITCHES, validOptions, 512); + + // display list of valid options on unrecognized parameter + TaskDialogOpen( L"Unrecognized parameter.", validOptions ); } LocalFree(szArgList); @@ -725,4 +768,4 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, } return 0; -} +} \ No newline at end of file diff --git a/launcher/src/resource.h b/launcher/src/resource.h index 709cf9d..0c06c29 100644 Binary files a/launcher/src/resource.h and b/launcher/src/resource.h differ diff --git a/launcher/src/Resource.rc b/launcher/src/resource.rc similarity index 99% rename from launcher/src/Resource.rc rename to launcher/src/resource.rc index 55e2772..28d3980 100644 --- a/launcher/src/Resource.rc +++ b/launcher/src/resource.rc @@ -9,6 +9,7 @@ #include "resource.h" #include "version.rc2" +#include "strings.rc2" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// diff --git a/launcher/src/strings.rc2 b/launcher/src/strings.rc2 new file mode 100755 index 0000000..71dcf5a --- /dev/null +++ b/launcher/src/strings.rc2 @@ -0,0 +1,12 @@ + +///////////////////////////////////////////////////////////////////////////// +// Corresponding ids should be defined in `resource.h` file. + +STRINGTABLE +{ + IDS_TITLE "Cmder Launcher" + + IDS_SWITCHES L"Valid options:\n\n /c [CMDER User Root Path]\n /task [ConEmu Task Name]\n /icon [CMDER Icon Path]\n [/start [Start in Path] | [Start in Path]]\n /single\n /m\n /x [ConEmu extra arguments]\n\nor, either:\n /register [USER | ALL]\n /unregister [USER | ALL]" +} + +/////////////////////////////////////////////////////////////////////////////