C#修改windows文件关联
上次我说过我用C#写了一个用来
代替vista图片浏览器的小东东,闲来无事又小小更新了下,加入了文件关联的部分。
众所周知,windows判断文件的类型是通过文件的扩展名的!其文件关联信息存储在注册表的HKEY_CLASSES_ROOT主键里面,分成两部分:1、文件扩展名相关的信息,比如文件类型(一个文件类型可能对应多个扩展名,比如jpegfile - .jpg, .jpeg, .jpe);2、文件类型相关的信息,比如图标,打开方式,编辑方式,打印机程序等等,所有文件类型相关的右键菜单在这里都能找到!那么,要修改一种文件的打开方式的话,先通过扩展名找到在系统注册的文件类型,然后修改此文件类型的打开方式。比如,.jpg的注册类型是jpegfile,而jpegfile下的子键——\shell\open\command的默认值就是默认的打开程序。
那么修改注册表吧,使用Microsoft.Win32命名空间的Registy和RegistryKey两个类,Registry提供了很多静态方法和属性。RegistryKey提供一系列打开子键、获取值和设置值的方法。代码如下:
// typeName should looks like ".png" which is a standard keyname in HKEY_CLASSES_ROOT
private void setAssociatedFileType(string typeName, string app)
{
string fileType = getTypeKeyName(typeName);
Registry.ClassesRoot.OpenSubKey(fileType + "\\shell\\open\\command", true).SetValue(null, app);
}
private string getAssociatedFileType(string typeName)
{
string fileType = getTypeKeyName(typeName);
return (string)Registry.ClassesRoot.OpenSubKey(fileType + "\\shell\\open\\command").GetValue(null);
}
private string getTypeKeyName(string typeName)
{
RegistryKey key = Registry.ClassesRoot.OpenSubKey(typeName);
return (string)key.GetValue(null);
}
其中的app是你希望作为默认打开方式的应用程序路径+ "1%",比如"notepad.exe 1%",1%可能需要使用引号括起来,否则不能正确处理包含空格的路径。另外注意,如果需要写入注册表值,一定要在OpenSubKey的参数表中加入允许写入的true(这里我郁闷了半天╭∩╮(︶∧︶)╭∩╮)。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。