从Windows 10开始,IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
method不再起作用了。
在Windows Vista,7和8上,它将在“设置程序关联”页面上打开指定应用程序的“控制面板”。
在Windows 10上,它什么都不做。
它甚至记录在MSDN中:
从Windows 10开始,这不会启动关联对话框。它会向用户显示一个对话框,通知他们可以更改用于在其“设置”中打开文件扩展名的默认程序
(即使在当前版本的Windows 10中声明的第二部分也不再正确)
实际上,在Windows 10的最新版本中,控制面板不再存在。其功能已移至“应用”>“默认应用”>“应用设置默认值”>“应用名称”下的“设置”应用。
有没有办法以编程方式在Windows 10设置应用程序中为我的应用程序打开应用程序界面的默认设置?
或者是否有另一种方法建议应用程序允许其用户自定义Windows 10中的关联?
不再允许更改系统默认应用程序。以下是关于qazxsw poi的公告:
Windows 10处理默认应用程序的方式的变化:“默认应用程序”是指Windows将文件类型和协议(如HTTP)映射到默认打开的Windows应用程序的方式。例如,您最喜欢的照片编辑器可能被设置为.JPG文件的默认应用程序,这意味着当您在文件资源管理器中双击.JPG文件时,它将在该照片编辑器中打开。在Windows 8.1中,经典Windows应用程序(Win32)可以调用提示,要求您更改默认值,因此在安装期间和启动后可能会看到多个提示。但是,Windows应用商店应用无法调用此提示。相反,安装应用程序后会出现一条通知横幅,告诉您新的应用程序可用,您可以单击此横幅更改默认值。
我们知道您的默认值对您很重要。在Windows 10中,所有应用程序(包括经典Windows应用程序和通用Windows应用程序)都无法调用更改默认设置的提示,仅限Windows。您可以完全控制默认体验,同时减少多个提示可能带来的一些不必要的噪音。
即使有某种方法来启动设置应用程序,您也无法做更多。
%windir%\system32\control.exe /name Microsoft.DefaultPrograms
%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram
YourAppRegName是HKEY_LOCAL_MACHINE(或HKEY_CURRENT_USER)\ SOFTWARE \ RegisteredApplications中已注册的应用程序的名称,必须在使用前进行转义(使用%windir%\system32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram\pageAdvancedSettings?pszAppName=YourAppRegName
,Luke!)。例如:
UrlEscape%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
方法打开控制面板项目/页面:
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
注意:此方法不适用于2018年4月更新。
要打开“按文件类型选择默认应用程序”页面:
https://msdn.microsoft.com/en-us/library/windows/desktop/ee330741.aspx
版本1709或更高版本
要按应用页面打开“设置默认值”:
Activator->ActivateApplication(
L"windows.immersivecontrolpanel_cw5n1h2txyewy"
L"!microsoft.windows.immersivecontrolpanel",
L"page=SettingsPageAppsDefaults"
L"&target=SettingsPageAppsDefaultsFileExtensionView", AO_NONE, &pid);
Activator->ActivateApplication(
L"windows.immersivecontrolpanel_cw5n1h2txyewy"
L"!microsoft.windows.immersivecontrolpanel",
L"page=SettingsPageAppsDefaults"
L"&target=SettingsPageAppsDefaultsDefaultAppsListView", AO_NONE, &pid);
我设法用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
做到了。它不是理想的解决方案,但似乎有效。以下是内联注释的代码:
UI Automation