• Link to X
  • Link to Facebook
  • Link to Youtube
  • Link to Rss this site
  • 博客
  • 支持
    • 常见问题解答
    • 帮助 (HTML)
    • 使用手册 (PDF)
    • 论坛
    • 资源库
    • 更新/重发注册码
    • 联系我们
  • 关于
    • 关于 Emurasoft
    • 员工简介
    • 其他产品
    • 奖项
    • 隐私权声明
    • Emurasoft 客户中心
  • 🌐 简体中文
    • English
    • 日本語
    • 한국어
    • Deutsch
    • 繁體中文
  • 下载
  • 购买
  • 特性
  • Menu Menu

如何创建 EmEditor 插件

在 EmEditor 中,您可以用宏,外部工具以及代码段自动化所有的操作。然而,一些用户,特别是编程者,可能还是喜欢自己编写插件程序。自己编写插件程序的优点有:

  • 您可以用 Win 32 API 编写 C++ 。
  • 您可以编写 GUI (Graphic User Interface,图形用户界面) 元素,例如对话框。
  • 您可以在 EmEditor 中使用自定义栏和窗口,自定义工具栏,还有输出栏。

另一方面,插件的编写需要使用到 Microsoft Visual C++ ,是一个难度比较大的编程语言。但是,如果您已经习惯使用 C++ 或是 Win32 的话,编写插件程序对您来说应该是得心应手的一件事。

Hello World 示例

如果您还没有安装Visual C++ 2012, 您可以在下面的链接中下载并安装Visual Studio Express 2012 for Windows Desktop:

  • Visual Studio Express 2012 (Windows 桌面)

您可以下载这个 Hello World!! 示例:

  • Hello World 插件示例源代码 (Version 11)

在下载这个文件之后,请把它提取到一个文件夹,然后用 Visual C++ 打开 Hello.sln 解决方案文件,您将会在这个 Hello 项目中看到下面的一系列文件。

File name用途需要编辑吗?
etlframe.hETL (EmEditor Template Library) 头文件否
hello.hHello World 插件实现文件是
plugin.hEmEditor 插件头文件否
resource.hHello World 插件资源文件是
stdafx.h预编译头文件也许
bitmap1.bmp工具栏按钮位图 (16 colors, 16×16 pixels)是
hello.rcHello World 插件资源是
hello.cppHello World 插件实现文件也许
hello.def定义文件否

在这些文件中,需要编辑的文件是 hello.h,hello.rc,resource.h,还有 bitmap1.bmp。如果您想要添加头文件的话,您也可以修改 hello.cpp 和 stdafx.h。其余的文件中,plugin.h 和 etlframe.h 是由 Emurasoft 公司提供的头文件并不需要修改。 请到下面的链接中下载最新版本的头文件:

  • plugin.h
  • etlframe.h

另外,hello.def 是定义 EmEditor 可导出功能的文件,这个文件也不需要修改。

首先,先不做任何更改,用 Visual C++ 打开这个项目并生成一个文件。然后您将会看见出现了一个 Hello.dll 文件。把这个文件复制到 EmEditor 安装目录下的PlugIns (插件)子文件夹中。通常,文件的路径是:C:Program FilesEmEditorPlugIns。接着,打开 EmEditor,您将会看到插件工具栏上出现一个黄色的圆圈按钮。当您按下这个按钮, EmEditor 编辑器中就会显示 Hello World!! 的文本。

接下来,让我们来更改这个示例,让这个插件能打开输出栏并在输出栏上显示 Hello World!! 的文本。

最重要的函数:OnCommand

在 hello.h 文件中最最重要的函数就是 OnCommand。当用户从菜单上选择这个插件或点击这个插件按钮时,就需要用到 OnCommand。通过更改这个函数内容,您可以改变这个插件的行为。在这个例子中,请先删除已存在的 Editor_InsertW 函数,然后添加下面的 Editor_OutputString 函数。

// Editor_InsertW( hwndView, L"Hello World!!n", true );
Editor_OutputString( hwndView, L"Hello World!!n", FLAG_OPEN_OUTPUT );

上面所示以 Editor_ 开头的函数被定义在 plug-in.h 文件中。当您用 EmEditor 打开 hello.h 后,请把光标移到以 Editor_ 开头的函数,然后按一下 F1 在帮助中查看该函数的描述。

在 hello.h 文件中,还有一个重要的函数,就是 QueryStatus。当 EmEditor 显示一个菜单或者它需要进行更新来刷新工具栏按钮时,就会使用到 QueryStatus 函数。当插件被启用时,这个函数会还原 TRUE 值。

*pbChecked = TRUE

另外,这个函数还能检查插件菜单项目和工具栏按钮是否会在被点选的情况下出现。

OnEvents 函数会在一个文件被打开,一个文档被更新,或者各种其它事件发生时被使用。这一系列的事件的具体描述可以在 EmEditor 中的帮助 — 插件参考 — 事件中找到。在这些事件中,我们将改变 EVENT_CHANGE 事件使输出栏上能显示 “Text Changed!!” 文本。要达到这个效果,我们首先要添加以下3行:

if( nEvent & EVENT_CHANGE ){
    Editor_OutputString( hwndView, L"Text changed!!n", FLAG_OPEN_OUTPUT );
}

修改资源

接下来,我们要打开 hello.rc 文件。这个文件定义了各种字符串,包括 IDS_MENU_TEXT,这个字串让您能更改插件的名称。让我们把插件名字改为 “Hello Test!“。

STRINGTABLE
BEGIN
    IDS_MENU_TEXT "Hello Test!"
    IDS_VERSION "1"
    IDS_SURE_TO_UNINSTALL "Are you sure you want to uninstall this Plug-in?"
END

另外,bitmap1.bmp 可以取代并保存您最喜欢的图片。在这个例子中,我们会把它改成一个红色的圆圈。

完成!您可以用Visual C++生成示例项目,您自定义的 Hello.dll 插件会被创建。您也可以把这个新的插件复制到 PlugIns 子文件夹中,打开EmEditor,然后点击插件按钮。”Hello World!!” 文本就会在输出栏中出现了。您也可以尝试在文本编辑器中输入新的文本,然后您就会在输出栏上看到您自己的定义的文本了。

自定义插件备注

在上面的例子中,我们修改了 Hello 示例插件。然而,当您想要创建一个新的插件时,以下几点您需要注意。首先要先准备一个定义文件,像 hello.def,这个文件定义了 DLL 文件必须导出的函数。另外,hello.def 文件一定要在 Linker – Input 中被标明是 Module Definition File (模块定义文件) 。而且,__stdcall 一定要在 C/C++ – Advanced 中被标明是 Calling Convention (枚举)。在 C/C++ – Code Generation 中,请选择 Multithread (多线程) 而不是Multithread DLL。为使程序更优化,请选择支持小代码。这样,插件会程序会变小并减少对运行库的依赖。

标准插件源代码

EmEditor中一些插件的源代码可以在下面的链接中下载:

  • Version 11 HTMLBar, OpenDocuments, Outline, Search, WordCount plug-in source code

您也可以参考下列的插件源代码:

  • HTMLBar (HTML 工具栏)
  • OpenDocuments (打开的文档)
  • OutlineText (大纲)
  • Search (搜索)
  • WordCount (单词数量)

在所有这些源代码中,HTMLBar 是一个非常好的设置自定义工具栏的参照。别的插件也能够帮助您创建自定义工具栏。请参考这些源代码来创建您自己的插件。

我已经解释了怎么创建 EmEditor 插件。我们在这里所举的例子只是一个非常简单的例子。但是,您可以创建更加实用,有效,适合您自己的插件!

← 字数统计插件 可编辑的宏 →

  • 文本编辑
    • 支持 EditorConfig
    • 格式化选区
    • 模糊匹配
    • 用于查找和替换的数值范围表达式
    • 适用于 HTML、CSS、JSON、XML 的语法检查器
    • 语法高亮
    • 配置
    • 多选区编辑
      • 垂直选择模式下的编辑
    • 比较文档
    • 正则表达式
    • 支持语言服务器协议
  • 强大的 CSV 工具
    • CSV 转换器
    • 冻结标题
    • 删除重复行
    • 合并 CSV
    • 合并/拆分列
    • 合并行
    • 如何删除 CSV 文档中嵌入的换行符?
    • 快速填充
    • 排序
    • 提取列
    • 提取常用字符串
    • 插入行/列
    • 数据透视表
    • 管理列
    • 编号
    • 自动填充
    • 自定义 CSV 格式
    • 转置
  • 支持大数据文件
    • 16 TB 大的文件
    • 大文件控制器
    • 分割/合并文件
    • 超大文件的快速处理
    • 轻巧,单一进程,多线程设计
  • 用户体验
    • 启动窗口
    • 量身定制的界面
    • 标签式设计
    • 快速启动
    • 工作区内存
    • 标记
  • 扩展性
    • AI 辅助写作
    • 与 AI 聊天
    • 插件
      • CommitList
      • 资源管理器插件
      • HTML 工具栏
      • 打开的文档插件
      • 项目插件
      • 搜索插件
      • 代码段插件
        • 如何使用 Zen Coding
      • 网页预览插件
      • 单词自动完成插件
      • 字数统计插件
      • 如何创建 EmEditor 插件
    • 可编辑的宏
    • 外部工具
    • 大纲
  • 更多功能
    • Base64
    • HTML 字符引用
    • Markdown 设计视图
    • Unicode 标准化
    • Windows 11/10 兼容性
    • 半角/全角转换
    • 多用途互联网邮件扩展(MIME)编码
    • 大小写转换
    • 字符代码值
    • 字符检查
    • 客户支持服务
    • 百分比编码
    • 离线注册
    • 跳转
    • 通用字符名称
    • 隐私优先
    • CSV 模式
    • 嵌套 CSV
    • 筛选工具栏
    • 显示 HTML/XML 文档中的字符引用工具提示
    • 二进制编辑
    • 支持 Unicode
    • 便携性选项
    • 括号/引号自动完成
    • 仅编辑选定模式
    • 多文件的转码
    • 快速的64位配置
    • 拖放
    • 拼写检查
    • 剪贴板记录
    • 书签
    • 快速启动
    • 错误处理程序与崩溃修复
    • 即时消息 (插件)
    • 支持通配符
    • 固定至列表
    • 保存至受保护的文件夹
    • 抓取文本
    • 标签高亮匹配功能
    • 查找和替换
    • 批次替换
    • 状态窗口
    • 全屏视图
  • 版本记录
    • Version 26.1 新增特性
    • Version 26.0 新增特性
    • Version 25.4 新增特性
    • Version 25.3 新增特性
    • Version 25.2 新增特性
    • Version 25.1 新增特性
    • Version 25.0 新增特性
    • Version 24.5 新增特性
    • Version 24.4 新增特性
    • Version 24.3 新增特性
    • Version 24.2 新增特性
    • Version 24.1 新增特性
    • Version 24.0 新增特性
    • Version 23.1 新增特性
    • Version 23.0 新增特性
    • Version 22.5 新增特性
    • Version 22.4 新增特性
    • Version 22.3 新增特性
    • Version 22.2 新增特性
    • Version 22.1 新增特性
    • Version 22.0 新增特性
    • Version 21.9 新增特性
    • Version 21.8 新增特性
    • Version 21.7 新增特性
    • Version 21.6 新增特性
    • Version 21.5 新增特性
    • Version 21.4 新增特性
    • Version 21.3 新增特性
    • Version 21.2 新增特性
    • Version 21.1 新增特性
    • Version 21.0 新增特性
    • Version 20.9 新增特性
    • Version 20.8 新增特性
    • Version 20.7 新增特性
    • Version 20.6 新增特性
    • Version 20.5 新增特性
    • Version 20.4 新增特性
    • Version 20.3 新增特性
    • Version 20.2 新增特性
    • Version 20.1 新增特性
    • Version 20.0 新增特性
    • Version 19.9 新增特性
    • Version 19.8 新增特性
    • Version 19.7 新增特性
    • Version 19.6 新增特性
    • Version 19.5 新增特性
    • Version 19.4 新增特性
    • Version 19.3 新增特性
    • Version 19.2 新增特性
    • Version 19.1 新增特性
    • Version 19.0 新增特性
    • Version 18.9 新增特性
    • Version 18.8 新增特性
    • Version 18.7 新增特性
    • Version 18.6 新增特性
    • Version 18.5 新增特性
    • Version 18.4 新增特性
    • Version 18.3 新增特性
    • Version 18.2 新增特性
    • Version 18.1 新增特性
    • Version 18.0 新增特性
    • Version 17.9 新增特性
    • Version 17.8 新增特性
    • Version 17.7 新增特性
    • Version 17.6 新增特性
    • Version 17.5 新增特性
    • Version 17.4 新增特性
    • Version 17.3 新增特性
    • Version 17.2 新增特性
    • Version 17.1 新增特性
    • Version 17.0 新增特性
    • Version 16.9 新增特性
    • Version 16.8 新增特性
    • Version 16.7 新增特性
    • Version 16.6 新增特性
    • Version 16.5 新增特性
    • Version 16.4 新增特性
    • Version 16.3 新增特性
    • Version 16.2 新增特性
    • Version 16.1 新增特性
    • Version 16.0 新增特性
    • Version 15.9 新增特性
    • Version 15.8 新增特性
    • Version 15.7 新增特性
    • Version 15.6 新增特性
    • Version 15.5 新增特性
    • Version 15.4 新增特性
    • Version 15.3 新增特性
    • Version 15.2 新增特性
    • Version 15.1 新增特性
    • Version 15.0 新增特性
    • Version 14.9 新增特性
    • Version 14.8 新增特性
    • Version 14.7 新增特性
    • Version 14.6 新增特性
    • Version 14 新增特性
    • Version 13 新增特性
    • Version 12 新增特性
    • Version 11 新增特性
    • Version 10 新增特性
    • Version 9 新增特性
    • Version 8 新增特性
    • Version 7 新增特性
    • Version 6 新增特性
    • Version 5 新增特性
    • Version 4 新增特性
    • 基本功能
  • EmEditor 免费版
  • 比较桌面安装版,桌面便携版和商店应用版

现在就下载并体验“世界上最快的文本编辑器”!(来源:ZDNet)

Download Download 免费下载

Copyright © 1995-2026 by Emurasoft, Inc.
下载 | 购买 | 特性 | 博客 | 支持 | 关于我们 | 隐私权声明
English | 日本語 | Deutsch | 한국어 | 繁體中文

Scroll to top Scroll to top Scroll to top