当前位置: 首页 > news >正文

C#,shell32 + 调用控制面板项(.Cpl)实现“新建快捷方式对话框”(全网首发)

Made By 于子轩,2025.2.2

不管是使用System.IO命名空间下的File类来创建快捷方式文件,或是使用Windows Script Host对象创建快捷方式,亦或是使用Shell32对象创建快捷方式,都对用户很不友好,今天小编为大家带来一种全新的方式:调用控制面板项(.Cpl)实现“新建快捷方式对话框”

别人的方法:

在C#中,可以使用WshShell对象来创建快捷方式。下面是一个简单的示例代码:

 

csharp复制插入

using IWshRuntimeLibrary;public void CreateShortcut(string targetPath, string shortcutPath)
{WshShell shell = new WshShell();IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);shortcut.TargetPath = targetPath;shortcut.Save();
}

在这个示例中,targetPath参数指定了目标文件或文件夹的路径,shortcutPath参数指定了要创建的快捷方式的路径。首先,我们创建一个WshShell对象,然后使用其CreateShortcut方法创建一个快捷方式对象。接下来,我们可以设置快捷方式对象的属性,例如目标路径(TargetPath)、图标路径(IconLocation)等,最后保存快捷方式(Save)。

别人的方法:

在C#中,可以使用System.IO命名空间下的FileSystem类来创建快捷方式。下面是一个示例代码:

 

csharp复制插入

using System;
using System.IO;
using IWshRuntimeLibrary;namespace ShortcutDemo
{class Program{static void Main(string[] args){string targetPath = @"C:\Path\To\Your\File.txt";string shortcutPath = @"C:\Path\To\Your\Shortcut.lnk";CreateShortcut(targetPath, shortcutPath);Console.WriteLine("Shortcut created successfully!");}static void CreateShortcut(string targetPath, string shortcutPath){WshShell shell = new WshShell();IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);shortcut.TargetPath = targetPath;shortcut.Save();}}
}

上述代码中,CreateShortcut方法接受两个参数,分别是目标文件路径和快捷方式路径。在CreateShortcut方法中,我们首先创建了一个WshShell对象,然后使用CreateShortcut方法创建了一个IWshShortcut对象。接着,我们设置shortcut.TargetPath为目标文件路径,并保存快捷方式。

我的方法:

 先附图:

CPL文件与DLL文件类似,都具有“导出函数”,在appwiz.cpl(用于管理已安装的程序和功能。通过运行appwiz.cpl,用户可以打开“程序和功能”窗口,该窗口允许用户查看、更改或卸载已安装的程序。)中,有一个函数:“NewLinkHereW”可以实现我们的要求

 [DllImport("appwiz.cpl", SetLastError = true, CharSet = CharSet.Unicode)]
 public static extern int NewLinkHereW(
  IntPtr hwndCpl,
  int msg,
  string lParam1,
  string lParam2
);

这个函数的签名是CPL文件标准方式来写的,一般我们需要提供四个参数。

应用:

要想成功发起该对画框,创建一个文件,函数将删除这个文件并在这个文件原位置上建立快捷方式

NewLinkHereW(0,0,"创建的文件地址",null);

http://www.lryc.cn/news/531503.html

相关文章:

  • 单纯信息展示的站点是否可以用UML建模
  • FinRobot:一个使用大型语言模型的金融应用开源AI代理平台
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.19 线性代数核武器:BLAS/LAPACK深度集成
  • 开发板目录 /usr/lib/fonts/ 中的字体文件 msyh.ttc 的介绍【微软雅黑(Microsoft YaHei)】
  • Love Tester:探索爱情的深度与维度
  • BFS(广度优先搜索)——搜索算法
  • JVM 四虚拟机栈
  • 【R语言】获取数据
  • Java BIO详解
  • 统计满足条件的4位数(信息学奥赛一本通-1077)
  • 北京门头沟区房屋轮廓shp的arcgis数据建筑物轮廓无偏移坐标测评
  • Spring 面试题【每日20道】【其三】
  • FFmpeg(7.1版本)在Ubuntu18.04上的编译
  • Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码
  • 安全策略配置
  • c++ stl 遍历算法和查找算法
  • 【Envi遥感图像处理】008:波段(批量)分离与波段合成
  • 线程创建与管理 - 创建线程、线程同步(C++)
  • 【C语言篇】“三子棋”
  • 安培定律应用于 BH 曲线上的工作点
  • 深度求索DeepSeek横空出世
  • 【CSS】什么是响应式设计?响应式设计的基本原理,怎么做
  • 后盾人JS--继承
  • 提升开发效率:IDE使用技巧与插件推荐
  • 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B与vllm实现推理加速的正确姿势(一)
  • 小书包:让阅读更美的二次开发之作
  • MySQL 插入数据指南
  • 防火墙安全策略实验
  • 【Redis】主从模式,哨兵,集群
  • 互联网行业常用12个数据分析指标和八大模型