如何在Windows 8/8.1 中显示"Set program associations" window?
How to show "Set program associations" window in Windows 8/8.1?
我想显示 Set program associations
windows [编辑:对于我的程序] 像 Chrome 那样 运行安装后第一次,像这样:
它有:
- 我的程序名称
- 我要设置默认程序的文件类型(多个)
如何用c#(或win32 c++)实现?
编辑
我阅读了一些关于修改注册表(通过 .reg 文件或通过修改注册表的代码)来设置默认程序的文章。它似乎只适用于 Windows XP/7 或更低版本,不适用于 8/8.1,因为 Microsoft 使用哈希来保护这些注册表。
这在官方文档中都有解释:Guidelines for File Associations and Default Programs
要启动此 Windows 提供的 UI,您可以使用 IApplicationAssociationRegistrationUI 界面。
这是一个示例控制台应用程序,用于演示虚构的 "MyApp" 应用程序:
class Program
{
static void Main(string[] args)
{
IApplicationAssociationRegistrationUI app = (IApplicationAssociationRegistrationUI)new ApplicationAssociationRegistrationUI();
int hr = app.LaunchAdvancedAssociationUI("MyApp");
Exception error = Marshal.GetExceptionForHR(hr);
if (error != null)
{
Console.WriteLine("Error: " + error.Message);
}
}
}
[Guid("1f76a169-f994-40ac-8fc8-0959e8874710")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationAssociationRegistrationUI
{
[PreserveSig]
int LaunchAdvancedAssociationUI([MarshalAs(UnmanagedType.LPWStr)] string pszAppRegName);
}
[ComImport]
[Guid("1968106d-f3b5-44cf-890e-116fcb9ecef1")]
public class ApplicationAssociationRegistrationUI
{
}
这还没有完成 :-) 这只有在为这个 "MyApp" 应用程序正确设置注册表时才有效,这是有点困难的部分。以下是实现此功能所需的最简单步骤:
1) 在 HKCR 中创建一个虚构的 "MyAppHTML" progid,如下所示:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\MyAppHTML]
@="MyApp HTML Document"
[HKEY_CLASSES_ROOT\MyAppHTML\Application]
"ApplicationCompany"="Fictional Software Inc."
[HKEY_CLASSES_ROOT\MyAppHTML\shell]
@="open"
[HKEY_CLASSES_ROOT\MyAppHTML\shell\open]
[HKEY_CLASSES_ROOT\MyAppHTML\shell\open\command]
@="\"C:\the app path\testassoc.exe\""
2) 声明一个虚构的 "MyApp" 应用程序(我建议 HKCU,但它可以是 HKLM),来自一个虚构的 "FictionalSoftware" 公司,像这样,例如有两个文件关联:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\FictionalSoftware]
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp]
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities]
"ApplicationDescription"="My Fictional Application"
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities\FileAssociations]
".htm"="MyAppHTML"
".html"="MyAppHTML"
3) 将此应用程序注册到 Windows(同样,HKCU 可以替换为 HKLM),如下所示:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\RegisteredApplications]
"MyApp"="Software\FictionalSoftware\MyApp\Capabilities"
如果您在 运行 示例应用程序时遇到错误,那么您可能搞砸了注册表布局。如果没问题,那么您应该会看到类似这样的内容:
我想显示 Set program associations
windows [编辑:对于我的程序] 像 Chrome 那样 运行安装后第一次,像这样:
它有:
- 我的程序名称
- 我要设置默认程序的文件类型(多个)
如何用c#(或win32 c++)实现?
编辑
我阅读了一些关于修改注册表(通过 .reg 文件或通过修改注册表的代码)来设置默认程序的文章。它似乎只适用于 Windows XP/7 或更低版本,不适用于 8/8.1,因为 Microsoft 使用哈希来保护这些注册表。
这在官方文档中都有解释:Guidelines for File Associations and Default Programs
要启动此 Windows 提供的 UI,您可以使用 IApplicationAssociationRegistrationUI 界面。
这是一个示例控制台应用程序,用于演示虚构的 "MyApp" 应用程序:
class Program
{
static void Main(string[] args)
{
IApplicationAssociationRegistrationUI app = (IApplicationAssociationRegistrationUI)new ApplicationAssociationRegistrationUI();
int hr = app.LaunchAdvancedAssociationUI("MyApp");
Exception error = Marshal.GetExceptionForHR(hr);
if (error != null)
{
Console.WriteLine("Error: " + error.Message);
}
}
}
[Guid("1f76a169-f994-40ac-8fc8-0959e8874710")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationAssociationRegistrationUI
{
[PreserveSig]
int LaunchAdvancedAssociationUI([MarshalAs(UnmanagedType.LPWStr)] string pszAppRegName);
}
[ComImport]
[Guid("1968106d-f3b5-44cf-890e-116fcb9ecef1")]
public class ApplicationAssociationRegistrationUI
{
}
这还没有完成 :-) 这只有在为这个 "MyApp" 应用程序正确设置注册表时才有效,这是有点困难的部分。以下是实现此功能所需的最简单步骤:
1) 在 HKCR 中创建一个虚构的 "MyAppHTML" progid,如下所示:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\MyAppHTML]
@="MyApp HTML Document"
[HKEY_CLASSES_ROOT\MyAppHTML\Application]
"ApplicationCompany"="Fictional Software Inc."
[HKEY_CLASSES_ROOT\MyAppHTML\shell]
@="open"
[HKEY_CLASSES_ROOT\MyAppHTML\shell\open]
[HKEY_CLASSES_ROOT\MyAppHTML\shell\open\command]
@="\"C:\the app path\testassoc.exe\""
2) 声明一个虚构的 "MyApp" 应用程序(我建议 HKCU,但它可以是 HKLM),来自一个虚构的 "FictionalSoftware" 公司,像这样,例如有两个文件关联:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\FictionalSoftware]
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp]
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities]
"ApplicationDescription"="My Fictional Application"
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities\FileAssociations]
".htm"="MyAppHTML"
".html"="MyAppHTML"
3) 将此应用程序注册到 Windows(同样,HKCU 可以替换为 HKLM),如下所示:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\RegisteredApplications]
"MyApp"="Software\FictionalSoftware\MyApp\Capabilities"
如果您在 运行 示例应用程序时遇到错误,那么您可能搞砸了注册表布局。如果没问题,那么您应该会看到类似这样的内容: