Windows 10相当于LaunchAdvancedAssociationUI

问题描述 投票:21回答:5

从Windows 10开始,IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI method不再起作用了。

在Windows Vista,7和8上,它将在“设置程序关联”页面上打开指定应用程序的“控制面板”。

在Windows 10上,它什么都不做。

它甚至记录在MSDN中:

从Windows 10开始,这不会启动关联对话框。它会向用户显示一个对话框,通知他们可以更改用于在其“设置”中打开文件扩展名的默认程序

(即使在当前版本的Windows 10中声明的第二部分也不再正确)


实际上,在Windows 10的最新版本中,控制面板不再存在。其功能已移至“应用”>“默认应用”>“应用设置默认值”>“应用名称”下的“设置”应用。

enter image description here

有没有办法以编程方式在Windows 10设置应用程序中为我的应用程序打开应用程序界面的默认设置?

或者是否有另一种方法建议应用程序允许其用户自定义Windows 10中的关联?

windows winapi windows-10 windows-shell controlpanel
5个回答
4
投票

不再允许更改系统默认应用程序。以下是关于qazxsw poi的公告:

Windows 10处理默认应用程序的方式的变化:“默认应用程序”是指Windows将文件类型和协议(如HTTP)映射到默认打开的Windows应用程序的方式。例如,您最喜欢的照片编辑器可能被设置为.JPG文件的默认应用程序,这意味着当您在文件资源管理器中双击.JPG文件时,它将在该照片编辑器中打开。在Windows 8.1中,经典Windows应用程序(Win32)可以调用提示,要求您更改默认值,因此在安装期间和启动后可能会看到多个提示。但是,Windows应用商店应用无法调用此提示。相反,安装应用程序后会出现一条通知横幅,告诉您新的应用程序可用,您可以单击此横幅更改默认值。

我们知道您的默认值对您很重要。在Windows 10中,所有应用程序(包括经典Windows应用程序和通用Windows应用程序)都无法调用更改默认设置的提示,仅限Windows。您可以完全控制默认体验,同时减少多个提示可能带来的一些不必要的噪音。

即使有某种方法来启动设置应用程序,您也无法做更多。


4
投票
  • 在“控制面板”中打开“默认程序”主窗口: Windows Insider blog
  • 打开“设置默认程序”页面: %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

4
投票

要打开“设置默认程序”页面:

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);

1
投票
Activator->ActivateApplication(
    L"windows.immersivecontrolpanel_cw5n1h2txyewy"
    L"!microsoft.windows.immersivecontrolpanel",
    L"page=SettingsPageAppsDefaults"
    L"&target=SettingsPageAppsDefaultsDefaultAppsListView", AO_NONE, &pid);

1
投票

我设法用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
© www.soinside.com 2019 - 2024. All rights reserved.