瀏覽代碼

Make WinSCP default handler command opens Set Program Associations for WinSCP even on Windows 10

Source commit: efd7b7dfa674bd328b01387573f7b1d18a0563b5
Martin Prikryl 9 年之前
父節點
當前提交
ae089eeacf
共有 1 個文件被更改,包括 14 次插入1 次删除
  1. 14 1
      source/windows/Setup.cpp

+ 14 - 1
source/windows/Setup.cpp

@@ -669,7 +669,20 @@ void __fastcall LaunchAdvancedAssociationUI()
 
   if (IsWin10())
   {
-    ExecuteShell(L"control.exe", L"/name Microsoft.DefaultPrograms /page pageDefaultProgram");
+    // WORKAROUND: On Windows 10, the IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI does not work.
+    // http://stackoverflow.com/q/32178986/850848
+    // This approach (IOpenControlPanel::Open) works on Windows 7 too, but not on Windows Vista.
+    IOpenControlPanel * OpenControlPanel;
+
+    HRESULT Result =
+      CoCreateInstance(CLSID_OpenControlPanel,
+        NULL, CLSCTX_INPROC, __uuidof(IOpenControlPanel), (void**)&OpenControlPanel);
+    if (SUCCEEDED(Result))
+    {
+      UnicodeString Page = FORMAT(L"pageDefaultProgram\\pageAdvancedSettings?pszAppName=%s", (AppNameString()));
+      OpenControlPanel->Open(L"Microsoft.DefaultPrograms", Page.c_str(), NULL);
+      OpenControlPanel->Release();
+    }
   }
   else
   {