C#关联自定义文件类型到应用程序并实现自动导入功能
这几天开发遇到一个需求:
- 将自定义文件后缀添加默认图标双击
- 自定义的文件后缀可以自动关联到指定的应用程序并自动打开
代码中我们写入了两个注册表。
第一个结构如下图所示,其中DefaultIcon定义的是默认图标地址,Command中存放的是指定识别的软件的运行exe路径。
文章图片
第二个注册表如下图所示,将默认文件后缀和第一个注册表进行关联,这样就可以进行识别。
文章图片
添加进去之后,我们发现双击文件可以打开软件,但是默认图标并没有刷新,经过查询,需要重启,但这样不是太low了吗,难道每个用户安装一次软件都要重启吗,这时候就需要实现自动对注册表进行刷新,直接引用即可,代码如下。
[DllImport("shell32.dll")]public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2); SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero);
using System; using System.Collections.Generic; using System.Windows.Forms; using Microsoft.Win32; namespace AppC{static class Program{////// 应用程序的主入口点。 ///[STAThread]static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); /// 是否通过关联打开的软件 if (args.Length > 0) {string path=""; for(int i=0; i 但是还有一个问题,就是打包,由于我们对注册表的写入是写在Main函数里的,如果用Visual Studio自带的工具进行打包的话,也就是说每次用户在打开软件都会进行一次注册表读写的判断,虽然用户不感知,但是这样并不好。所以我们并不打算将注册表的写入放在Main函数中,而是使用Inno Script Studio这个工具进行美化,将注册表的写入放在里面,这样用户只会在安装的时候写入注册表,删除软件注册表也会自动清空。
#define MyAppExeName "软件.exe"#define AppIconName "默认图标路径"[Registry]Root:HKCU; Subkey: "{#MyRegInstallPath_sk}" ; ValueType:string; ValueName:"{#MyRegInstallPath_vn}"; ValueData:"{app}"; Flags:uninsdeletekeyifemptyRoot: HKCR; Subkey: ".c2"; Flags: uninsdeletekeyRoot: HKCR; Subkey: ".c2"; ValueType: string; ValueName: ""; ValueData: "C2File"Root: HKCR; Subkey: "C2File"; Flags: uninsdeletekeyRoot: HKCR; Subkey: "C2File\DefaultIcon"; Flags: uninsdeletekeyRoot: HKCR; Subkey: "C2File\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#AppIconName}"; Flags: Root: HKCR; Subkey: "C2File\shell"; Flags: uninsdeletekeyRoot: HKCR; Subkey: "C2File\shell\open"; Flags: uninsdeletekeyRoot: HKCR; Subkey: "C2File\shell\open\command"; Flags: uninsdeletekeyRoot: HKCR; Subkey: "C2File\shell\open\command"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName} ""%1"""; Flags:
【C#关联自定义文件类型到应用程序并实现自动导入功能】到此这篇关于C#关联自定义文件类型到应用程序并实现自动导入的文章就介绍到这了,更多相关c#应用程序自动导入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- django-前后端交互
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 使用composer自动加载类文件
- 列出所有自定义的function和view
- ssh生成公钥秘钥
- Android系统启动之init.rc文件解析过程
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件