Windows 10 相当于 LaunchAdvancedAssociationUI

标签 windows winapi windows-10 windows-shell controlpanel

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

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

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

它甚至记录在 Microsoft 文档中:

Starting in Windows 10, this does not launch the association dialog box. It displays a dialog to the user informing them that they can change the default programs used to open file extensions in their Settings

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


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

enter image description here

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

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

最佳答案

  • 在控制面板中打开主默认程序窗口:

    %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

  • 打开将文件类型或协议(protocol)与程序关联页面:

    %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();
}

关于Windows 10 相当于 LaunchAdvancedAssociationUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32178986/

相关文章:

windows - 如何在 Vim 的每个拆分窗口的状态行中显示当前文件名?

在 C 中将无符号长整型转换为 64 位有符号长整型

delphi - 如何删除 wsNormal 全屏表单标题栏内容偏移?

visual-studio-2015 - 如何在 Windows 10/Visual Studio 2015 中禁用 F11?

windows-10 - 在 Windows 10 IoT Core 中禁用自动隐藏滚动条

c++ - 从未调用过 WSASend 完成例程

c - 接受非 ASCII 字符

c++ - 检查注册表项是否存在

windows - win32编程中的顶层窗口到底是什么?

windows - 如何将第三方 Windows DLL 组织到我的应用程序文件夹中的子文件夹中?