gpt4 book ai didi

c# - WPF 应用程序文件关联 : DefaultIcon is not working

转载 作者:行者123 更新时间:2023-11-30 17:54:01 26 4
gpt4 key购买 nike

我想将“.abc”文件关联到我的 WPF 应用程序。

我使用此代码添加关联:

public class FileAssociation
{
static RegistryKey Root
{
get
{
return Registry.CurrentUser;
}
}

// Associate file extension with progID, description, icon and application
public static void Associate(string extension,
string progID, string description, string application)
{
Require.NotNullOrEmpty(extension, "extension");
Require.NotNullOrEmpty(progID, "progID");
Require.NotNullOrEmpty(application, "application");
Require.NotNullOrEmpty(description, "description");

Root.CreateSubKey(extension).SetValue("", progID);

using (var key = Root.CreateSubKey(progID))
{
key.SetValue("", description);

key.CreateSubKey("DefaultIcon").SetValue("", ToShortPathName(application).Quote() + ",0");
key.CreateSubKey(@"Shell\Open\Command").SetValue("", ToShortPathName(application).Quote() + " \"%1\"");

// Tell explorer the file association has been changed
SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
}
}

// Return true if extension already associated in registry
public static bool IsAssociated(string extension)
{
return (Root.OpenSubKey(extension, false) != null);
}

[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);

[DllImport("Kernel32.dll")]
private static extern uint GetShortPathName(string lpszLongPath,
[Out] StringBuilder lpszShortPath, uint cchBuffer);

// Return short path format of a file name
private static string ToShortPathName(string longName)
{
StringBuilder s = new StringBuilder(1000);
uint iSize = (uint)s.Capacity;
uint iRet = GetShortPathName(longName, s, iSize);
return s.ToString();
}
}

注意: Quote() 扩展方法仅用于将字符串 abc 转换为“abc”。

现在文件关联工作正常了!我可以双击“.abc”文件来打开我的 WPF 应用程序。

但 DefaultIcon 不工作。 DefaultIcon 注册表项设置为 "D:\path\to\MyWPFApp.exe",0。我的 WPF 应用程序的应用程序图标设置为属性页中的一个图标(我可以看到 MyWPFApp.exe 的图标已经更改)。怎么了?谢谢!

顺便说一句:我在 Windows 8 中使用 .NET 4

最佳答案

您不需要 DefaultIcon 条目。默认使用第一个图标。
删除它,它应该可以工作^^

如果我删除 ToShortPathName(长名称可以带引号)并且更改 Root 属性 返回 Registry.ClassesRoot 代码在这里工作。

关于c# - WPF 应用程序文件关联 : DefaultIcon is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com