diff --git a/launcher/CmderLauncher.sln b/launcher/CmderLauncher.sln
index 7cf5ae5c8..16b9b6699 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 60765235e..96b1f47b0 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 5d36566f5..0049100cb 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 709cf9d8d..0c06c299f 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 55e277282..28d39803d 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 000000000..71dcf5ad8
--- /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]"
+}
+
+/////////////////////////////////////////////////////////////////////////////