存档

文章标签 ‘附加’

win7/8/8.1中c#附加程序到任务栏

2015年5月12日 没有评论

远的不说,自从win7开始,当应用程序可以被附加到任务栏后,任务栏就成为各个应用抢占的入口,这里可以比开始菜单更快地启动程序。后来听说微软对OEM厂商有要求,预装软件不能随便pin到任务栏上,哈哈。

今天衣服自己洗就来分享如何附加程序到任务栏上。

大致的流程是先创建一个快捷方式,然后对该快捷方式执行附加命令。附加完成后,可以删除该快捷方式,任务栏图标还是存在的。对于取消是一样的步骤,无非就是步骤不一样而已。当附加成功后,会在用户的Roaming相关目录下自动生成快捷方式,系统会使用该快捷方式,而不是前面创建的快捷方式。

命令就是动作谓词,常见的谓词有run、open等操作,而附加和取消的谓词就是TaskbarPin/TaskbarUnPin,从实际经验来看,谓词是不区分大小写的。代码很简单,看看就明白了。
先申明操作的返回值枚举

public enum FileResult
{
Success,Failed,Exist,NotExist
}

附加到任务栏

public static FileResult PinToTaskBar(string linkPath, bool deleteLink = false)
{
if (!File.Exists(linkPath))
{
// 快捷方式不存在
return FileResult.Failed;
}

string name = System.IO.Path.GetFileName(linkPath);
string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, Environment.SpecialFolderOption.None)
+”\\AppData\\Roaming\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar\\”;

if (File.Exists(userPath + name))
{
//当pin到任务栏后,该目录下会生成对应的快捷方式。
//通过判断该文件是否存在判断是否已经pin到任务栏
return FileResult.Exist;
}

ProcessStartInfo psi = new ProcessStartInfo(linkPath);

psi.Verb = “TaskbarPin”;
Process.Start(psi);

if (deleteLink)
{
//pin 完后删除快捷方式
File.Delete(linkPath);
}

return FileResult.Success;
}

取消附加到任务栏

public static FileResult UnPinToTaskBar(string linkPath, bool deleteLink = false)
{
if (!File.Exists(linkPath))
{
// 快捷方式不存在
return FileResult.Failed;
}

string name = System.IO.Path.GetFileName(linkPath);
string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, Environment.SpecialFolderOption.None)
+ “\\AppData\\Roaming\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar\\”;

if (!File.Exists(userPath + name))
{
//当pin到任务栏后,该目录下会生成对应的快捷方式。
//通过判断该文件是否存在判断是否已经pin到任务栏
return FileResult.NotExist;
}

ProcessStartInfo psi = new ProcessStartInfo(linkPath);

psi.Verb = “TaskbarUnPin”;
Process.Start(psi);

if (deleteLink)
{
//pin 完后删除快捷方式
File.Delete(linkPath);
}

return FileResult.Success;
}

完整的代码如下图所示。

pin2TaskBar

 

在执行附加操作的时候,如果任务栏上已经附加了,执行谓词命令就会失败。同理,如果任务栏上没有,执行取消附加也会失败,所以就需要做一个判断,只在必要的时候来做判断。并根据不同的情况返回不同的枚举。

分类: 日常 标签: , ,