# VBE2021 **Repository Path**: true3630/VBE2021 ## Basic Information - **Project Name**: VBE2021 - **Description**: VBE2021为开源工程,使用者可在源工程代码基础上,修改、完善、扩展。 有参与完善的作者,插件最终发布会以作者名单形式列出。参与者可申请权限,修改本文档。 开源文件及QQ群228441848。 若要借鉴代码做自己的VBE插件,需备注以下文字。 技术支持:灯 ,微信:285538335 - **Primary Language**: Visual Basic - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 16 - **Created**: 2021-09-23 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、序言 VBE2021为开源工程,使用者可在源工程代码基础上,修改、完善、扩展。 有参与完善的作者,插件最终发布会以作者名单形式列出。参与者可申请权限,修改本文档。 开源文件及QQ群228441848。 若要借鉴代码做自己的VBE插件,需备注以下文字。 **技术支持:灯 ,微信:285538335** # 二、工程文件说明 ## 2.0 整体思路及调试: 新建dll动态链接库工程,利用IDTExtensibility2接口,实现对VBE的二次开发。 打开工程调试,需要注册dll(详见本文档2.4.1内容),并且启用外部Excel或者其他程序。 输入图片说明 ## 2.1 窗体部分 ### 2.1.1 CodeFrom.vb 输入图片说明 **主要功能:** - 展示自定义代码库路径下的代码库文件。代码库以txt形式存储,窗体加载过程,自动读入TreeView控件。 - 用户可在窗体上操作TreeView控件,来修改、扩充自己的代码库。 - 可直接将代码插入到当前的VBE代码编辑界面。 ### 2.1.2 CodeList.vb 窗体对应于:智能提示功能 输入图片说明 **主要功能:** - 用户输入空格之后,利用键盘钩子,调取CodeList窗体。窗体加载过程中,对用户当前行的数据进行模糊查询,满足条件的写入ListBox。 - 左侧是Listbox,右侧是RichTextBox控件,用来展示详细内容。 - CodeList窗体读取的代码来自于,安装路径下的CodeList.xlsx。 **bug需解决:** - 窗体弹出之后,按方向键无法实现,listbox的上下选取。只能光标滑动选取。 - 无法利用快捷键实现开关智能提示功能 ### 2.1.3 IniForm.vb **主要功能:** 展示配置信息选项,配置信息存储在代码安装路径下的配置.ini。 ### 2.1.4 author.vb **主要功能**: 展示作者信息,后续参与者的信息也会再此展示。 ### 2.1.5 UpdateForm.vb **主要功能:** 展示qq群信息,目前只能实现手动去qq群下载软件,后期想实现在线下载更新。 ## 2.2 模块部分 ### 2.2.1 Varaint.vb 存储各类变量、常量、API函数 ### 2.2.2 IndentCode.vb和RebuildModuleCode.vb 代码美化缩进的核心代码。 ### 2.2.3 Connect.vb 利用IDTExtensibility2接口,实现VBE菜单的加载。顶部菜单、按钮、右键菜单等等代码均在此。 接口的实现方式以及菜单的添加,参考网址: https://www.mztools.com/articles/2012/MZ2012013.aspx https://www.mztools.com/articles/2012/MZ2012015.aspx 其中,_myToolBarButton_Click点击事件是所有的点击触发的事件。 ## 2.3 添加引用部分 输入图片说明 ### 2.3.1 Ude 识别txt编码形式,解决读取txt内容乱码问题。 ### 2.3.2 VBE相关 引用VBE相关类库,实现VBE对象的操作。 ## 2.4 打包注册部分 实现插件的加载有2步:①注册dll;②导入VBE加载项的注册表。 注册dll是利用RegAsm.exe去注册。 ### 2.4.1 手动注册方式 如果是手动加载和卸载插件,需要手动运行下面的文件,并且是管理员身份运行。 两个文件:RegAsm.bat和RegAddIn.reg [RegAsm.bat](https://social.microsoft.com/Forums/en-US/fe0d669a-0466-45f0-84ef-47ad3a25d1f1/vbnet31383203073325836866242122363124149209983677629575303403838?forum=vbasiczhchs) ```vb @ECHO OFF set dll="VBE2021.dll" %SystemRoot%"\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /codebase %~dp0\%dll% %SystemRoot%"\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /codebase %~dp0\%dll% exit RegAddIn.reg Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\VBA\VBE\6.0\Addins\VBE2021.Connect] "FriendlyName"="VBE2021" "Description"="VBE2021" "LoadBehavior"=dword:00000003 "CommandLineSafe"=dword:00000000 [HKEY_CURRENT_USER\Software\Microsoft\VBA\VBE\6.0\Addins64\VBE2021.Connect] "FriendlyName"="VBE2021" "Description"="VBE2021" "LoadBehavior"=dword:00000003 "CommandLineSafe"=dword:00000000 ``` ### 2.4.2 手动卸载方式 两个文件:RegAsm.bat和RegAddIn.reg ```vb UnRegAsm.bat @ECHO OFF set dll="VBE2021.dll" %SystemRoot%"\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /codebase %~dp0\%dll% /u %SystemRoot%"\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /codebase %~dp0\%dll% /u PAUSE CLS RegAddIn.reg Windows Registry Editor Version 5.00 [-HKEY_CURRENT_USER\Software\Microsoft\VBA\VBE\6.0\Addins\VBE2021.Connect] [-HKEY_CURRENT_USER\Software\Microsoft\VBA\VBE\6.0\Addins64\VBE2021.Con ``` ### 2.4.3 Innosetup打包直接注册和卸载 ```vb innosetup可实现注册表的写入和dll的直接注册。 源代码如下: \#define MyAppName "VBE2021" \#define MyAppVerName "VBE2021" [Setup] AppName={#MyAppName} AppVerName={#MyAppVerName} //版本号 AppVersion=1.3 VersionInfoProductName=VBE2021 DefaultDirName= "d:\VBE2021" //禁止用户选择安装路径 DisableDirPage=no DisableProgramGroupPage=yes DefaultGroupName=VBE2021 OutputDir=. SetupIconFile=B.ico OutputBaseFilename=VBE2021 WindowShowCaption=no DisableWelcomePage=no //PrivilegesRequired=admin ArchitecturesInstallIn64BitMode = x64 ia64 //控制面板卸载界面图标 UninstallDisplayIcon= {app}\B.ico //发布者名称 AppPublisher=作者:灯 [code] procedure InitializeWizard(); begin WizardForm.LICENSEACCEPTEDRADIO.Checked:=true; end; [Messages] SetupWindowTitle=VBE2021 安装向导 ClickNext=为确保本软件能一次安装成功,请尽可能先关闭360或者电脑管家、金山毒霸之类,然后再安装本软件。%n%n%n%n请确保安装路径不能有空格!!%n%n请确保安装路径不能有空格!! %n%n请确保安装路径不能有空格!! [Languages] Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" [Icons] Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" [Files] Source: "C:\Users\WangYa\Desktop\VBE2021\VBE2021\bin\Debug\Code\*.*"; DestDir: "{app}\Code"; Flags: recursesubdirs Source: "C:\Users\WangYa\Desktop\VBE2021\VBE2021\bin\Debug\Data\*.*"; DestDir: "{app}\Data"; Flags: recursesubdirs Source: "C:\Users\WangYa\Desktop\VBE2021\VBE2021\bin\Debug\VBE2021.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\WangYa\Desktop\VBE2021\VBE2021\bin\Debug\B.ico"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\WangYa\Desktop\VBE2021\VBE2021\bin\Debug\Ude.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\WangYa\Desktop\VBE2021\VBE2021\bin\Debug\RegAsm.bat"; DestDir: "{app}"; Flags: ignoreversion [Registry] Root: HKCU; Subkey: "Software\Microsoft\VBA\VBE\6.0\Addins\VBE2021.Connect"; ValueType: string; ValueName: "FriendlyName"; ValueData: "VBE2021" Root: HKCU; Subkey: "Software\Microsoft\VBA\VBE\6.0\Addins\VBE2021.Connect"; ValueType: string; ValueName: "Description"; ValueData: "VBE2021" Root: HKCU; Subkey: "Software\Microsoft\VBA\VBE\6.0\Addins\VBE2021.Connect"; ValueType: dword; ValueName: "LoadBehavior"; ValueData: 3 Root: HKCU; Subkey: "Software\Microsoft\VBA\VBE\6.0\Addins64\VBE2021.Connect"; ValueType: string; ValueName: "FriendlyName"; ValueData: "VBE2021" Root: HKCU; Subkey: "Software\Microsoft\VBA\VBE\6.0\Addins64\VBE2021.Connect"; ValueType: string; ValueName: "Description"; ValueData: "VBE2021" Root: HKCU; Subkey: "Software\Microsoft\VBA\VBE\6.0\Addins64\VBE2021.Connect"; ValueType: dword; ValueName: "LoadBehavior"; ValueData: 3 [Code] //此代码的功能:在出现安装界面之前弹出一个提示框,告之用户一些必要的信息 function InitializeSetup(): Boolean; begin Log('InitializeSetup called'); Result := true end; //此代码的功能:卸载插件时清除注册表痕迹 procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep ); begin RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\Microsoft\VBA\VBE\6.0\Addins\VBE2021.Connect'); RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\Microsoft\VBA\VBE\6.0\Addins64\VBE2021.Connect'); end; [RUN] //Filename: "{dotnet40}\RegAsm.exe"; Parameters: /codebase VBE2021.dll; WorkingDir: {app}; StatusMsg: "正在注册..."; Flags: skipifsilent shellexec runminimized waituntilterminated //Filename: {app}\RegAsm.bat; Description: "BAT"; Flags: skipifsilent shellexec runhidden nowait postinstall Filename: "{app}\RegAsm.bat"; WorkingDir: "{app}\"; StatusMsg: "正在安装注册组件..."; Parameters: {app}; Flags: skipifsilent shellexec runminimized waituntilterminated 但是dll的直接注册我一直没成功,所以目前打包的时候把RegAsm.bat也打包进去了,安装插件的时候,直接运行RegAsm.bat实现间接注册。 ``` # 三、插件使用说明 ## 3.1 安装 输入图片说明 输入图片说明 输入图片说明 输入图片说明 ## 3.2 代码辅助录入 ### 3.1.1 菜单录入代码 输入图片说明 ### 3.1.2智能提示录入代码 输入完部分关键字,按空格键。即可弹出智能提示。 智能提示可在配置中进行关闭。 输入图片说明 输入图片说明 ## 3.3 代码美化缩进 输入图片说明 输入图片说明 ## 3.4 代码库存储修改 输入图片说明 输入图片说明