存档

文章标签 ‘任务栏’

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

 

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

分类: 日常 标签: , ,

c++程序窗口不在任务栏上显示

2014年4月18日 没有评论

一般说来,程序在运行的时候,会在任务栏上显示图标,当然XP系统还是会一起显示程序的标题。虽然加班是不变的,而需求是一定变化的。出于某些需要,要实现程序在运行时不显示窗体。对于c#程序而言,只用设置 ShowInTaskbar = false 即可。而对于c++程序,还不能这么简单的使用。

今天衣服自己洗分享的是使用 ITaskbarList 接口来实现c++程序窗口不在任务栏上显示的目的。

从IE4开始,window提供了ITaskbarList 接口,我们可以简单地调用即可。

首先我们需要添加头文件的引用    #include “ShObjIdl.h”

然后,我们在代码里添加这样一个方法:
void ShowInTaskbar(HWND hWnd, BOOL bshow){
HRESULT hr;
ITaskbarList *pList;
hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER,
IID_ITaskbarList, (void **)&pList);

pList->HrInit();

if (bshow){
pList->AddTab(hWnd);
}
else{
pList->DeleteTab(hWnd);
}

pList->Release();
}

最后一步,在窗口初始化的时候,调用这个方法即可。两个参数分别为窗体的句柄,是否显示。

分类: 日常 标签: , ,

CPU温度小工具之获取温度

2012年2月2日 没有评论

魔方也好,360也好,都提供了一个功能,在任务栏上显示电脑的硬件温度。当然咯,还有别的软件可以在任务栏上显示电池电量等等。

魔方的这个工具好是好,但是会同时提供 4 个参数在那里来回切换显示,晃的我心神不灵的。其实,衣服自己洗的电脑比较垃圾,风扇一直是在将就着用,那噪音足以秒杀掉你们,我背包里每天都放一把螺丝刀,当噪音大的时候就把后盖给拆了,把风扇拍两下。有时候,特别在上班的时候,这行为就显得很二了。呃,这扯远了。

就是由于上面的原因,我想自己弄一个。我啥也不会,只能凑活抄点 NET 代码了。

那么第一步,是要获取温度,其实硬件信息都在系统里可以查询的到。衣服自己洗这里给出的方法和网上看到的基本上差不多。代码如下:

ManagementObjectSearcher search=null;

static string q=”select * from MSAcpi_ThermalZoneTemperature”;

上面的代码是不是很像 SQL 语句?话说好久木有写代码了,悲了个催@_@!!

接下来,就是主要方法了,喔,各位看官,原谅我没有在博客里配置代码高亮~

int GetCPUTemperature()
{
search=new ManagementObjectSearcher(“root\\WMI”,q);

ManagementObjectCollection con=search.Get();

foreach (ManagementObject ele in con)
{
Int32 n=Convert.ToInt32(ele.GetPropertyValue(“CurrentTemperature”));
return (n-2732)/10;
}

return 0;
}

很简单吧,在需要获取温度的地方,直接调用 GetCPUTemperature() 方法就可以了。获取了数据跑了下,和魔方、360 报告的温度数据有细微出入,不过对我来说已经满足要求了。当看到温度高的时候,就关掉一些软件,就是可惜了我的 8G 内存。

拿到了数据,下一步就是呈现。在下一篇文字里,我会说一说在任务栏呈现数据的事情。

分类: 日常 标签: , ,