0%

DM2_虚拟桌面插件_修改

  DM2是个好东西,占用资源少,而且功能相当实用。比如说最小化窗口到浮动图标、切换窗口总在最上层、最小化窗口到托盘等等等等。

  与此同时他还有好多强大的插件,我最喜欢的是它的虚拟桌面插件。理由也挺简单,资源占用小,切换迅速。不过这个插件有一个小小的缺点,就是无法设置哪些窗口在所有虚拟桌面上都存在。就比方说FastIcons,这个类似于Dock的小东西是我的标准系统常驻软件。在切换虚拟桌面的时候我就一直想让这个软件永久保留,要不然实在是太不方便了,如下图。

FastIcons

   还好DM2和它的插件都是开源的,再加上今天刚好有点时间,就顺便改改吧。最终成果如下:手动配置DM2目录下的dm2.ini文件,用文本编辑器在**[Plugins_VirtualDesktop_Settings]**这一节的最后加上如下几行。然后就这些程序就可以逍遥法外,置桌面切换而不顾了,haha。

1
2
3
4
5
ExcudeCount=1 //你要过滤的程序个数
Excude0=D:\\Program Files\\Tools\\FastIcons\\FastIcons.exe
Excude1=。。。。//每个程序的完整路径。编号为Excude+数字
Excude2=。。。。
Excude3=。。。。

   原本以为这小功能花不了几分钟时间,可一写下来才发现原来俺的C基础已经废了,调Bug的时候发现误删野指针无数,唉。最郁闷的是在VS下运行一切没问题,然后直接双击exe运行切换虚拟桌面是毫无反应,sigh…..

   经多方查证才发现问题在程序的权限上,VS下编译运行的程序是以Debug的权限运行的,比Windows的管理员权限还高。而我为了通过窗口的句柄获得其对应程序的路径,在代码里用了几个Tlhelp32里的API,在以管理员权限运行这个程序的时候是得不到结果的。没办法,只能手动提升进程的权限(利用AdjustTokenPrivileges这个API就行了)。

   现在终于是能运行了,不过还有一个更郁闷的事,就是Debug下一切正常的程序到了Release下就又出问题了。估计原因有两种可能,一是提升权限没成功,二是VC编译器优化的问题。先不搞了,等下次有空再来看。反正Debug下编译的Dll能用,先用着再说。

   附 DLL + 很挫的修改代码,其实也就增加了四五个函数(Debug下出来的Dll有点大,这是没办法的事):

DLL下载   

插件源码