为CodeLove编写插件——常用软件扫描(SoftwareToScan)

如果你还不知道CodeLove,点击【一起来编程吧,CodeLove初版发布】.

那么如何编写插件呢?下面就简单介绍如果编写SoftwareToScan插件。该插件我们可以在设置窗口看到:

image

那么如何编写这个插件呢?下面一步步介绍如何实现插件并且如何扫描出系统中常用的软件吧,相信对大家编写插件程序以及扫描常用软件方面都会有帮助,不过如果您有好的建议和意见,请回复,最后会给出插件源码。

 

1.引用ExtensionsFramework

什么是ExtensionsFramework?这是基于CodeLove编写插件的中间组件。我们可以在程序安装目录找到,即“ExtensionsFramework.dll”。你也可以点此下载ExtensionsFramework.dll

2.实现ITool接口

首先介绍下ITool接口,目前具有以下属性和行为:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4: using System.ComponentModel;
   5:  
   6: namespace ExtensionsFramework.Interfaces
   7: {
   8:     public interface ITool
   9:     {
  10:         /// <summary>
  11:         /// 插件名
  12:         /// </summary>
  13:         string Name { get;}
  14:         /// <summary>
  15:         /// 描述
  16:         /// </summary>
  17:         string Description { get;}
  18:         /// <summary>
  19:         /// 作者
  20:         /// </summary>
  21:         string Author { get;}
  22:         /// <summary>
  23:         /// 版本
  24:         /// </summary>
  25:         string Version { get;}
  26:         /// <summary>
  27:         /// 初始化
  28:         /// </summary>
  29:         void Initialize();
  30:         /// <summary>
  31:         /// 执行
  32:         /// </summary>
  33:         /// <param name="args"></param>
  34:         void Execute(string[] args);
  35:         /// <summary>
  36:         /// 热键
  37:         /// </summary>
  38:         System.Windows.Forms.Shortcut HotKey { get; set;}
  39:         /// <summary>
  40:         /// 启动关键字
  41:         /// </summary>
  42:         string Alias { get; set;}
  43:         /// <summary>
  44:         /// 是否随软件一起启动
  45:         /// </summary>
  46:         bool AutoStart { get; set; }
  47:     }
  48: }

然后我们需要实现这个接口,如:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using ExtensionsFramework.Interfaces;
   6: using ExtensionsFramework.Entities;
   7: using System.Windows.Forms;
   8: using System.IO;
   9: using IWshRuntimeLibrary;
  10: namespace SoftwareToScan
  11: {
  12:     public class SoftwareToScan : ITool
  13:     {
  14:         private string m_Alias = "SoftwareToScan";
  15:         private Shortcut m_HotKey;
  16:         #region ITool 成员
  17:  
  18:         string ITool.Name
  19:         {
  20:             get { return "SoftwareToScan"; }
  21:         }
  22:  
  23:         string ITool.Description
  24:         {
  25:             get { return "扫描并添加常用的软件"; }
  26:         }
  27:  
  28:         string ITool.Author
  29:         {
  30:             get { return "liwq"; }
  31:         }
  32:  
  33:         string ITool.Version
  34:         {
  35:             get { return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
  36:         }
  37:  
  38:         void ITool.Initialize()
  39:         {
  40:             //System.Diagnostics.Debug.Write("SoftwareToScan初始化成功完成......");
  41:         }
  42:  
  43:         void ITool.Execute(string[] args)
  44:         {
  45:             new Scan().Show();
  46:         }
  47:  
  48:  
  49:  
  50:         System.Windows.Forms.Shortcut ITool.HotKey
  51:         {
  52:             get
  53:             {
  54:                 return m_HotKey;
  55:             }
  56:             set
  57:             {
  58:                 m_HotKey = value;
  59:             }
  60:         }
  61:  
  62:         string ITool.Alias
  63:         {
  64:             get
  65:             {
  66:                 return m_Alias;
  67:             }
  68:             set
  69:             {
  70:                 m_Alias = value;
  71:             }
  72:         }
  73:  
  74:         #endregion
  75:  
  76:  
  77:         bool ITool.AutoStart { get; set; }
  78:     }
  79: }

通过实现接口,我们告诉了CodeLove关于这个插件的以下信息:

image

3.构思概述

之前没做过常用软件扫描,设想了下,思路如下,如果你有好的建议,请回复

1.从快捷方式获取。个人认为是最好的方式,确实也能取到比较好的数据,包括软件描述都有,而且快捷方式我们可以从开始菜单目录、桌面去抓取,但是实际做的时候,发现一个很大的问题,很多目录访问权限不够,不管怎么配置甚至管理员运行,都没权限,无奈之下,只能说能抓一点是一点吧。

2.从注册表获取。注册表我分析了下,目前发现两个路径下可以获取到软件的数据,“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall“和”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths“。前一个项,是添加/删除程序面板里面显示的内容,貌似相对比较全,后一项是貌似是程序别名,以前为了方便在运行里面直接运行软件,经常在里面添加项的。也就是这个项的名字,可以直接在运行窗口输入以启动软件的。如:

image

常用的有Excel、devenv(VS)、Outlook、QvodPlayer(你懂的)等等。你也可以自己添加一些项,比如把QQ加进去。

3.获取常用软件并设置属性。获取了一堆东西,发现很多并不能用上,于是得设置一些匹配数据,用于匹配常用软件,添加类如下:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace SoftwareToScan
   7: {
   8:     public class CommonlyUsedSoftwareSettings
   9:     {
  10:         /// <summary>
  11:         /// 搜索的关键字
  12:         /// </summary>
  13:         public string LikeKeyWord { get; set; }
  14:         /// <summary>
  15:         /// 搜索模式
  16:         /// </summary>
  17:         public LikeMode LikeMode { get; set; }
  18:         /// <summary>
  19:         /// 需要拼接的Exe名称和路径
  20:         /// </summary>
  21:         public string ContactExePath { get; set; }
  22:         /// <summary>
  23:         /// 关键字,没有表示不修改
  24:         /// </summary>
  25:         public string KeyWord { get; set; }
  26:         /// <summary>
  27:         /// 描述
  28:         /// </summary>
  29:         public string Description { get; set; }
  30:         /// <summary>
  31:         /// 要求路径中必须存在本关键字
  32:         /// </summary>
  33:         public string PathContains { get; set; }
  34:     }
  35: }

设置匹配信息如下:

   1: CommonlyUsedSoftwareSettingsLst = new List<CommonlyUsedSoftwareSettings>()
   2: {
   3:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="Lenovo YouCam",LikeMode=LikeMode.Equals,ContactExePath="YouCam.exe",KeyWord=null},
   4:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="联想 一键恢复",LikeMode=LikeMode.Equals,ContactExePath="OneKey Recovery.exe",KeyWord=null,Description="联想 一键恢复"},
   5:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="Energy Management",LikeMode=LikeMode.Equals,ContactExePath="Energy Management.exe",KeyWord=null,Description="联想 电源管理"},
   6:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="Microsoft Visual Studio 2010",LikeMode=LikeMode.StartWidth,ContactExePath=@"Common7\IDE\devenv.exe",KeyWord="VS",Description=".NET编程工具",PathContains="Microsoft Visual Studio"},
   7:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="腾讯视频",LikeMode=LikeMode.Equals,ContactExePath=@"QQLive.exe",KeyWord=null,Description="腾讯视频"},
   8:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="QQ音乐",LikeMode=LikeMode.StartWidth,ContactExePath=@"QQMusic.exe",KeyWord=null,Description="QQ音乐"},
   9:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="TeamViewer",LikeMode=LikeMode.StartWidth,ContactExePath=@"TeamViewer.exe",KeyWord=null,Description="一款流行的远程协助软件"},
  10:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="腾讯QQ",LikeMode=LikeMode.StartWidth,ContactExePath=@"QQProtect\Bin\QQProtect.exe",KeyWord="QQ",Description="QQ"},
  11:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="必应缤纷桌面",LikeMode=LikeMode.Equals,ContactExePath=@"BingDesktop.exe",KeyWord=null,Description="必应缤纷桌面"},
  12:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="联想通行证服务",LikeMode=LikeMode.Equals,ContactExePath=@"LPS.exe",KeyWord=null,Description="联想通行证服务"},
  13:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="必应缤纷桌面",LikeMode=LikeMode.Equals,ContactExePath=@"BingDesktop.exe",KeyWord="BingDesktop",Description="必应缤纷桌面"},
  14:     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  15:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="7zFM",LikeMode=LikeMode.Equals,ContactExePath=null,Description="7Zip"},
  16:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="devenv",LikeMode=LikeMode.Equals,ContactExePath=null,Description=".NET编程工具(VS)"},
  17:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="excel",LikeMode=LikeMode.Equals,ContactExePath=null,Description=null},
  18:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="GROOVE",LikeMode=LikeMode.Equals,ContactExePath=null,Description="Microsoft SharePoint Workspace"},
  19:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="IEXPLORE",LikeMode=LikeMode.Equals,ContactExePath=null,Description="IE浏览器"},
  20:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="infopath",LikeMode=LikeMode.Equals,ContactExePath=null,Description="infopath"},
  21:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="MobileWiFi",LikeMode=LikeMode.Equals,ContactExePath=null,Description="MobileWiFi:无线3G路由管理工具"},
  22:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="mplayer",LikeMode=LikeMode.Equals,ContactExePath=null,Description="微软媒体播放器"},
  23:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="MSACCESS",LikeMode=LikeMode.Equals,ContactExePath=null,Description="ACCESS"},
  24:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="MSPUB",LikeMode=LikeMode.Equals,ContactExePath=null,Description="Microsoft Publisher"},
  25:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="OneNote",LikeMode=LikeMode.Equals,ContactExePath=null,Description="OneNote"},
  26:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="OUTLOOK",LikeMode=LikeMode.Equals,ContactExePath=null,Description="OUTLOOK"},
  27:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="powerpnt",LikeMode=LikeMode.Equals,ContactExePath=null,Description="PPT"},
  28:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="PowerShell",LikeMode=LikeMode.Equals,ContactExePath=null,Description="PowerShell"},
  29:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="QvodPlayer",LikeMode=LikeMode.Equals,ContactExePath=null,Description="QvodPlayer:快播"},
  30:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="SnippingTool",LikeMode=LikeMode.Equals,ContactExePath=null,Description="系统自带截屏工具"},
  31:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="vmware",LikeMode=LikeMode.Equals,ContactExePath=null,Description="vmware虚拟机"},
  32:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="Winword",LikeMode=LikeMode.Equals,ContactExePath=null,Description="Word"},
  33:     new CommonlyUsedSoftwareSettings(){LikeKeyWord="WORDPAD",LikeMode=LikeMode.Equals,ContactExePath=null,Description="写字板"},
  34: };

如果发现本插件找不到你需要的软件,请把软件信息发我。3Q。

说到这里,基本上构思说的差不多了,关键编码也很简单,就不细说了。待会直接给出源码下载。

4.插件目录说明

写好之后,如何测试呢?找到CodeLove安装目录,找到“Plus”目录,把你的插件dll丢进去就可以。然后CodeLove就可以发现你的插件了。

 

5.尾声

先给出下载链接:点此下载CodeLove点此下载SoftwareToScan源码

  • 请不要吝惜点击右下角的推荐,你的支持是我的动力。
  • 代码还存在需要不足的地方,请不要吝惜你的意见与建议。如有问题或不足或建设性意见与建议,可以回复本帖或给我发邮件,由于一直比较忙,回复比较缓慢。邮箱地址:CodeLove1314@live.cn
  • 现在插件还很少,需要你我共同努力。有兴趣的可以试试编写以下插件:Google翻译、正则表达式编辑器、JS编辑器、JSON格式化工具、采色器、WebServices测试工具等等。
  • 准备编写一个全局的鼠标手势插件,为什么要编写?之前搜狗输入法自带的扩展鼠标手势很好用,但是那货老是偷偷下载搜狗浏览器,一怒之下,卸了。目前找了不少资料,但是还存在不少难点,如果你有这方面的资料或信息,请不吝赐教。
posted @ 2013-01-08 12:17  雪雁  阅读(1660)  评论(7编辑  收藏  举报