自Windows 10以来, IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
方法不再起作用。
在Windows Vista 7和8上,它将打开指定应用程序的“ 设置程序关联”页面上的“控制面板”。
在Windows 10上,它只显示这个popup窗口:
要更改您的默认应用程序,请转至设置>系统>默认应用程序。
截图:
它甚至logging在MSDN中:
从Windows 10开始,这不会启动关联对话框。 它向用户显示一个对话框,通知他们可以在设置中更改用于打开文件扩展名的默认程序
有没有一种替代方法来以编程方式在Windows 10中为我的应用程序打开“ 设置程序关联”页面?
还是有另一种方法build议应用程序允许其用户在Windows 10中自定义关联?
我知道这些部分的解决scheme:
使用,打开控制面板的默认程序页面
%windir%\system32\control.exe /name Microsoft.DefaultPrograms
但用户必须单击“ 设置默认程序” ,在列表中find我的应用程序,然后单击“ select此程序的默认值” 。
有没有办法跳过至less一些步骤? 例如, 设置默认程序页面是否有一个规范名称,或者对于特定于应用程序的页面更好?
使用IApplicationActivationManager
打开设置应用程序中的默认应用程序页面:
Activator->ActivateApplication( L"windows.immersivecontrolpanel_cw5n1h2txyewy" L"!microsoft.windows.immersivecontrolpanel", L"page=SettingsPageAppsDefaults", AO_NONE, &pid);
(Windows 10上的Firefox使用的代码; Chromium使用与@Jichao评论相同的代码 )
然后,用户可以使用按应用链接设置默认值访问控制面板。
或者使用按协议/文件types链接select默认应用程序 。 我认为这些也可以通过程序直接打开。 我只是不知道一个语法。 除了SettingsPageAppsDefaults
页之外,还必须指定SettingsPageAppsDefaultsProtocolView
( SettingsPageAppsDefaultsFileExtensionView
)和/或SettingsGroupDefaultApps
组。 我不知道怎么。
在“控制面板”中打开主“ 默认程序”窗口:
%windir%\system32\control.exe /name Microsoft.DefaultPrograms
打开设置您的默认程序页面:
%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram
打开程序页面的设置关联 :
%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram\pageAdvancedSettings?pszAppName=YourAppRegName
YourAppRegName是从HKEY_LOCAL_MACHINE ( 或 HKEY_CURRENT_USER ) \ SOFTWARE \ RegisteredApplications注册的应用程序的名称,必须在使用前转义(使用UrlEscape ,Luke!)。 例如:
%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram\pageAdvancedSettings?pszAppName=Internet%20Explorer
打开将文件类型或协议与程序页面关联 :
%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageFileAssoc
打开更改自动播放设置页面:
%windir%\system32\control.exe /name Microsoft.AutoPlay
打开设置程序访问和计算机默认值页面:
%windir%\system32\ComputerDefaults.exe
PS也可以使用IOpenControlPanel::Open
方法来打开控制面板项目/页面:
IOpenControlPanel * OpenControlPanel; HRESULT Result = CoCreateInstance(CLSID_OpenControlPanel, NULL, CLSCTX_INPROC, __uuidof(IOpenControlPanel), (void**)&OpenControlPanel); if (SUCCEEDED(Result)) { const wchar_t * Page = L"pageDefaultProgram\\pageAdvancedSettings?pszAppName=YourAppRegName"; OpenControlPanel->Open(L"Microsoft.DefaultPrograms", Page, NULL); OpenControlPanel->Release(); }
要打开设置您的默认程序页面:
%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram
参考: https : //msdn.microsoft.com/en-us/library/windows/desktop/ee330741.aspx
打开“按文件类型选择默认应用程序”页面:
Activator->ActivateApplication( L"windows.immersivecontrolpanel_cw5n1h2txyewy" L"!microsoft.windows.immersivecontrolpanel", L"page=SettingsPageAppsDefaults" L"&target=SettingsPageAppsDefaultsFileExtensionView", AO_NONE, &pid);
更改系统默认应用程序不再允许。 以下是Windows内幕博客上的公告 :
Windows 10如何处理默认应用程序的变化:“默认应用程序”是指Windows将文件类型和协议(如HTTP)映射到默认打开的Windows应用程序的方式。 例如,您最喜欢的照片编辑器可能被设置为.JPG文件的默认应用程序,这意味着当您双击文件资源管理器中的.JPG文件时,它会在该照片编辑器中打开。 在Windows 8.1中,经典Windows应用程序(Win32)可能会调用提示,要求您更改默认设置,以便在安装期间以及启动后可能看到多个提示。 但是,Windows应用商店应用程序无法调用此提示。 相反,在安装应用程序后会出现通知横幅,告诉您新的应用程序可用,您可以点击此横幅来更改默认设置。
我们知道您的默认值对您很重要。 使用Windows 10时,所有应用程序(包括经典Windows应用程序和通用Windows应用程序)都将无法调用提示来更改默认设置,仅Windows。 您可以完全控制您的默认体验,同时减少多个提示可能带来的不必要噪音。
即使有一些方法来启动设置应用程序,你将无法做更多的事情。
Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram\pageAdvancedSettings?pszAppName=Internet%20Explorer" ' Give Default Programs time to load WScript.Sleep 1200 ' WshShell.AppActivate "Set Program Associations to IE then end for Windows 10 enjoy! ~ The Dogs Trust Rich ~" WshShell.SendKeys "{TAB}" WshShell.SendKeys " " WshShell.SendKeys "{TAB}" WshShell.SendKeys "{TAB}" WshShell.SendKeys " " msgbox "Internet Explorer is now your default browser" WScript.Quit