为CodeLove编写插件——常用软件扫描(SoftwareToScan)
如果你还不知道CodeLove,点击【一起来编程吧,CodeLove初版发布】.
那么如何编写插件呢?下面就简单介绍如果编写SoftwareToScan插件。该插件我们可以在设置窗口看到:
那么如何编写这个插件呢?下面一步步介绍如何实现插件并且如何扫描出系统中常用的软件吧,相信对大家编写插件程序以及扫描常用软件方面都会有帮助,不过如果您有好的建议和意见,请回复,最后会给出插件源码。
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关于这个插件的以下信息:
3.构思概述
之前没做过常用软件扫描,设想了下,思路如下,如果你有好的建议,请回复。
1.从快捷方式获取。个人认为是最好的方式,确实也能取到比较好的数据,包括软件描述都有,而且快捷方式我们可以从开始菜单目录、桌面去抓取,但是实际做的时候,发现一个很大的问题,很多目录访问权限不够,不管怎么配置甚至管理员运行,都没权限,无奈之下,只能说能抓一点是一点吧。
2.从注册表获取。注册表我分析了下,目前发现两个路径下可以获取到软件的数据,“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall“和”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths“。前一个项,是添加/删除程序面板里面显示的内容,貌似相对比较全,后一项是貌似是程序别名,以前为了方便在运行里面直接运行软件,经常在里面添加项的。也就是这个项的名字,可以直接在运行窗口输入以启动软件的。如:
常用的有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测试工具等等。
- 准备编写一个全局的鼠标手势插件,为什么要编写?之前搜狗输入法自带的扩展鼠标手势很好用,但是那货老是偷偷下载搜狗浏览器,一怒之下,卸了。目前找了不少资料,但是还存在不少难点,如果你有这方面的资料或信息,请不吝赐教。
出处:http://www.cnblogs.com/codelove/
沟通渠道:编程交流群<85318032> 产品交流群<897857351>
如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
静听鸟语花香,漫赏云卷云舒。