zoukankan      html  css  js  c++  java
  • 为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测试工具等等。
    • 准备编写一个全局的鼠标手势插件,为什么要编写?之前搜狗输入法自带的扩展鼠标手势很好用,但是那货老是偷偷下载搜狗浏览器,一怒之下,卸了。目前找了不少资料,但是还存在不少难点,如果你有这方面的资料或信息,请不吝赐教。
    作者:雪雁
    出处:http://www.cnblogs.com/codelove/
    沟通渠道:编程交流群<85318032> 产品交流群<897857351>
    如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    静听鸟语花香,漫赏云卷云舒。
  • 相关阅读:
    使用Acctinfo.dll了解更多AD用户帐号信息
    vue elementUI之Form表单 验证
    vue element-ui 表格筛选,点击筛选数据
    使用Bootstrap + Vue.js实现 添加删除数据
    CSS3过渡效果 兼容IE6、IE7、IE8
    使用Ajax、json实现京东购物车结算界面的数据交互
    JavaScript面向对象,闭包内存图,闭包和作用域
    实现一个宽和高都是100像素的div可以用鼠标拖拽移动的效果
    JavaScript鼠标事件,点击鼠标右键,弹出div
    javascript sort排序
  • 原文地址:https://www.cnblogs.com/codelove/p/2850875.html
Copyright © 2011-2022 走看看