keePass---基于插件的密码管理器

     最近在研究KeePass的源代码,老外的大牛果然不同凡响,令人恐怖的宏到处都是。令我等菜鸟心服口服。不用我说,这个源代码确实有许多值得学习的地方,首先这是一个基于插件机制的程序。也就是只要按照它定义的规范就可以根据自己的需要为KeePass编写插件。这是不是很炫啊。记得我刚接触到vs studio开发环境时,装了源代码管理器插件。然后就可以直接在vs studio中使用源代码管理,这个功能让我感到非常的神奇,后来才知道vs studio是基于插件的。O(∩_∩)O而且KeePass界面也是很强大。

     KeePass插件机制是基于COM规范的,而且是绿色的。也就是所用的插件不用向系统注册,直接放到KeePass程序目录里就可以使用了。那这个插件机制是怎么实现的呢。如果不了解COM规范,可以参考msdn上关于COM规范的资料。

     首先,叙述下,KeePass是如何实现插件机制的?

     当KeePass启动时,首先在程序目录下查找所有的dll,并且对这些dll进行验证,如何验证呢。KeePass是通过dll文件的版本信息来识别的,也就是说如果dll的版本信息的Product是 KeePass Pulgin,则认为这个dll是KeePass的插件。否则的话就是不加载。根据KeePass的规范,凡是KeePass的dll插件,都要导出三个函数:KpCreateInstance(创建插件的函数)、KpInitializeLibrary(初始化插件的函数)、KpReleaseLibrary(释放插件函数)。

    

 

    KeePass首先通过API函数GetProcAddr获取KpInitializeLibrary的函数对插件进行初始化,然后在获取KpCreateInstance函数创建插件。如果没有失败,则加入KeePass的插件列表中m_plugins.插件加载完了之后,KeePass调用BuildPluginMenu为插件建立用户接口。也就是在菜单Tools里建立插件的子菜单。首先插件要实现两个规范:GetMenuItems是获取插件里菜单资源,返回类型是KP_MENU_ITEM型指针,这个结构体是这样定义的:

      typedef struct
     {
           DWORD dwFlags; // 菜单标识

           DWORD dwState; // 菜单状态

           DWORD dwIcon;   //图标
           LPTSTR lpCommandString; ///菜单文本

            DWORD dwCommandID; ///菜单ID标识,注意这个是由KeePass使用的

             DWORD_PTR dwReserved; ///< Reserved for future use, must be 0.
      } KP_MENU_ITEM;

 

      KeePass根据KP_MENU_ITEM型指针建立插件的用户接口(菜单项),并且为每个菜单项分配一个CommandId。KeePass不知道插件到底有什么用户接口,那如何响应菜单项的命令消息呢。这就要根据CommandId来区分了。首先映射消息:

     ON_COMMAND_RANGE(WM_PLUGINS_FIRST, WM_PLUGINS_LAST, OnPluginMessage)

 

     也就是说把消息id在WM_PLUGINS_FIRST和WM_PLUGINS_LAST之间的消息都映射到函数OnPluginMessage,然后根据CommandId来区分每个消息的所对应的commandId找到对应的插件,并且通过接口OnMessage映射到插件的OnMessage进行处理。

  

    

 

 

     好了,我们看到要实现插件机制,关键在于定义一组接口,通过这组接口建立起插件和主程序之间的交互。

 

 

 

 

 

 

 

 

 

适用于macOS的免费,开放源代码,与KeePass兼容的密码管理器。 标签 在单个窗口中打开文件,或使用选项卡使用单个窗口。 自动保存 您的文件将不断保存。丢失了某些东西,无法从输入历史中恢复?浏览版本以查找所需内容! 撤销重做 MacPass支持对数据进行的所有操作的撤消/重做。出问题了,您想还原它,只需撤消更改,您就可以开始了! 拖放 在数据库内部或两个文件之间移动或复制条目和组。通过将文件附件拖放到条目中来添加它们。您甚至可以通过将URL拖到数据库中来添加条目。 快速浏览 启用预览功能可以利用QuickLook系统预览各种文件类型,以查看文件附件。 复写 自动键入使MacPass可以为任何基于文本的输入提供身份验证凭据。从Web表单到任何应用程序中的身份验证对话框。使用全局自动输入,您甚至可以使用系统范围的快捷方式从任何地方调用自动输入。有关更多信息,请参阅文档 完整的KDB和KDBX支持 MacPass可以读写KDB Legacy文件以及最新的KDBX格式。您甚至可以将KDB转换为KDBX,反之亦然。 自定义图标 通过从许多图标中进行选择来更改条目和组的外观。如果您喜欢彩色,请让MacPass为您生成基于网站的图标! 密码生成器 使用内置生成器生成密码。调整方法以符合您可能遇到的任何限制。 到期日期 设置密码过期的日期。 MacPass将使用特殊图标标记它们,以便您轻松发现它们。您甚至可以搜索过期的! 同步化 在MacPass之外对数据库所做的更改可以合并。没有数据丢失,所有文件都同步!您甚至可以将任意文件合并到一个数据库中。 MacPass甚至可以合并KDB文件,尽管该格式并非设计用于同步。 外挂程式 由于没有一种千篇一律的功能,因此MacPass允许插件更改和扩展其功能集。转至插件存储库并开始自定义。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值