插件编写傻瓜教程>>VC6.0

2023-10-29

>>写在前面
本教程主要讲解如何用按键精灵自带的模版编写插件.
请大家在教程没全部写完之前不要跟贴,谢谢合作!
需要的工具:VC6.0 编辑语言:C++

>>初步接触
1.安装VC6.0(建议不要使用创天的汉化版)

2.解压插件自带的模版,解压后选择QMPlugin.dsw文件,打开工程.进入VC编辑界面.

3.选择FileViewx选项卡,再选择QMPlugin.cpp.(参照map1图中红圈位置)
此时,编辑区域显示的是QMPlugin.cpp文件的内容.

4.请看下面的组图中的红圈部分
红圈1-4的内容都是QMPlugin.cpp的内容
红圈1: 定义头文件部分
在此打个简单的比喻!我们把插件看做一个机器装配工厂,插件中需要调用的函数看做是装配零件.
插件这个工厂要装配不同的机器必须用到不同的装配零件.为了方便工作,我们人为地把汽车零件放在一个仓库,
把轮船零件放在一个仓库.类推.在这里,定义头文件就相当于在组装一台机器前告诉工厂,
我们组装这台机器需要去哪些仓库拿零件.下面程序中用到的函数必须在头文件指示的仓库里.

这里还要提一下,仓库可以存在包含关系,比如A仓库可以包含B.C2个小仓库,
如果我们要取B仓库中的零件,只要指明A仓库或者B仓库任意一个就可以了.
详细的头文件包含关系可以参阅MSDN(当然自己也可以定义头文件,本文主要是写给一些初学者,在此略过)

红圈2: 编辑按键精灵脚本时显示的本插件的名称注释
修改这里的字符串可以改变本插件显示的名称

红圈3: 定义功能的函数
红圈部分是一个函数,一个函数对应着一条插件命令.
int Test1Handler(char *lpszParamList, char *lpszRetVal)
int表示函数的返回值是一个整型
Test1Handler是本函数的名称
(char *lpszParamList, char *lpszRetVal)是函数的2个参数
char表示这2个参数都是字符型,*是指针运算符,char *说明这2个参数是字符型指针
在C/C++中可以把字符型指针看做是字符型数组,简单的也可以理解成字符串.
lpszParamList是命令需要的参数,lpszRetVal是返回值参数

char lpszParam1[1024] = {0}, lpszParam2[1024] = {0}; 
ParseParam(lpszParamList,lpszParam1,lpszParam2);
如果该函数对应的插件命令参数大于1个,我们则需要这2句
这2句是把命令需要的参数分解,我们在使用插件的时候写进的命令参数是XXX,XXXX,XXXX的形式的.
XXX,XXXX,XXXX被看做是一个参数传递给插件中的函数.因此我们需要ParseParam函数来分解,
分解的过程是以逗号为分割线,去掉逗号,把一个参数分成几个参数的过程.
上面例子2句是分解成2个参数lpszParam1,lpszParam2.分解后的参数仍是字符串型.
(提一下ParseParam函数是在ExtFunc.cpp中被定义的)

char lpszShowMessage[4096];
sprintf(lpszShowMessage,"Param1 = %s\nParam2 = %s",lpszParam1,lpszParam2);
MessageBox(0,lpszShowMessage,"This is plugin command Test1",0);
这3句是函数过程,这里的sprintf函数就是被定义在"stdio.h"中的

return 1;
C/C++语言的函数除了函数是void型外都必须有返回值,
如果你的函数不需要返回值,也要写return这句,至于返回什么可以任意.
上面定义了函数返回类型是int,这里只要写任意一个整数就可以了.

红圈4: 本插件在编辑按键精灵脚本时的命令,以及注释部分
"Test1","测试1",Test1Handler,
"Test2","测试2",Test2Handler,
知道这是一个结构体就可以了.这个结构体有3个部分,每个部分的逗号都不可以省略.
3个逗号以及这3个逗号之前的字符表示一条插件命令,6.1的则是4个逗号
"Test1"是完成后插件的命令名,与Test1Handler对应
"测试1"是注释内容,Test1Handler是上面定义的函数,与"Test1"对应
如果这里你不想写注释可以这样写"Test1",,Test1Handler,
注:6.0和6.1的模版不同之处,6.1此处多了1个部分,表示该命令有几个命令参数
"Test1","测试1",Test1Handler,2,

现在接触电脑时间越来越少,估计这篇教程要慢慢完成了.预计2.3天才能完成一节.
还有对一些论坛短消息没有回复,敬请大家谅解.
下个章节会讲一些C++函数类型转换的相关知识.

[ 本帖最后由 沉8 于 2007-3-16 12:22 PM 编辑 ]

1.jpg (162.66 KB)

 

map1

1.jpg

2.jpg (165.33 KB)

 

map2

2.jpg

3.jpg (153.51 KB)

 

map3

3.jpg

转载于:https://www.cnblogs.com/rogee/archive/2010/11/30/1892448.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插件编写傻瓜教程>>VC6.0 的相关文章

  • thrift源码解析之server

    文章目录 前言 概述 TSimpleServer serve 1 listen 2 accept 3 newlyConnectedClient TNonblockingServer serve 1 registerEvents 1 赋值us

随机推荐

  • Java中Thread类的基本用法

    目录 一 创建线程的方式 1 继承Thread类 2 实现Runnable接口 3 匿名内部类中创建Thread子类对象 4 匿名内部类中创建Runnable子类对象 5 lambda表达式创建Runnabl子类对象 二 Thread的常见
  • netty 系列之:java 中的 base64 编码器

    简介 什么是 Base64 编码呢 在回答这个问题之前 我们需要了解一下计算机中文件的分类 对于计算机来说文件可以分为两类 一类是文本文件 一类是二进制文件 对于二进制文件来说 其内容是用二进制来表示的 对于人类是不可立马理解的 如果你尝试
  • 驱动移植学习心得

    系统移植 把操作系统 Linux 能够在芯片 板子 上运行 目标 在开发板上运行操作系统 嵌入式系统 linux 以应用为中心 把软硬件进行裁剪 适用于应用的专用计算机系统 1 交叉编译环境搭建 开发主机 编译工具 针对开发板的编译工具 a
  • C语言库编译时添加编译时间和svn版本号

    1 功能应用背景和开发思路 1 应用背景 当程序出错时 我们想要知道库的版本信息 这样有助于定位错误是哪个版本引入的 缩小排查的范围 就算程序没有出错 能知道库的版本 也方便知道程序的版本 2 思路 在编译源码时 获取svn版本和编译时间并
  • Python 中的键值(具名)参数:如何使用它们

    键值参数是 Python 的一个特性 对于从其他编程语言转到 Python 的人来说 不免看起来有些奇怪 人们在学习 Python 的时候 经常要花很长时间才能理解键值参数的各种特性 在 Python 教学中 我经常希望我能三言两语就把键值
  • 阿里巴巴达摩院通义千问【附申请链接】阿里版ChatGPT

    Welcome to Aedream同学 s blog 文章目录 报名测试 实际体验效果 阿里云作为数一数二的全球云平台 阿里的大语言模型通义千问还是值得期待的 凭借强大的算力支持还是有机会赶上人工智能发展浪潮 早前阿里巴巴达摩院关于人工智
  • Java Map 所有的值转为String类型

    可以使用 Java 8 中的 Map replaceAll 方法将所有的值转为 String 类型 Map
  • spring 事务异常org.springframework.beans.factory.support.DefaultListableBeanFactory@1b4c1d7: defining be

    事务异常错误信息 org springframework beans factory support DefaultListableBeanFactory 1b4c1d7 defining beans indexController tes
  • 浅谈对Linux中行规程(Line Discipline)的理解

    文章目录 前言 一 Line Discipline是什么 二 在输入子系统中的位置 总结 前言 学完Linux驱动程序中的输入子系统 Input System 后 又接触到行规程 Line Discipline 明明这个行规程也是用来处理输
  • Linux网络编程:Web服务器

    文章目录 一 超文本编辑语言HTML 二 HTTP超文本传输协议 1 请求和响应消息流程 myhttpd c getline函数 用于读取http协议头 2 错误 2 1 处理出错返回disconnect 2 2 错误页面展示send er
  • 【机器学习】:梯度提升决策树(GBDT)

    综述 GBDT Gradient Boosting Decision Tree 又叫 MART Multiple Additive Regression Tree 是一种迭代的决策树算法 该算法由多棵决策树组成 所有树的结论累加起来做最终答
  • 深度解读Q_D指针与Q_Q指针

    首先是Q D指针 先贴上我们的测试用例 class TEST class TESTPrivate public TESTPrivate TEST parent q ptr parent a 666 cout lt lt TESTPrivat
  • 【C++】初阶 --- 引用(超级详细版!!!)

    文章目录 一 引用的概念 二 引用的特性 1 引用在定义时必须初始化 2 一个变量可以有多个引用 3 引用一旦引用一个实体 再不能引用其他实体 三 常引用 被const 修饰的引用 1 权限的放大 2 权限的平移 3 权限的缩小 4 临时变
  • Java 字符串Base64编码和解码

    编码 String message 我是码农 String encode Base64 getEncoder encodeToString message getBytes StandardCharsets UTF 8 方式一 String
  • 线程与进程的区别

    1 一个程序至少有一个进程 一个进程至少有一个线程 2 线程的划分尺度小于进程 使得多线程程序的并发性高 3 进程在执行过程中拥有独立的内存单元 而多个线程共享内存 从而极大地提高了程序的运行效率 4 每个独立的线程有一个程序运行的入口 顺
  • 老油条表示真干不过,部门新来的00后网络安全工程师已把我卷崩溃,想离职了...

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 在Idea中,如何在SpringBoot中使用jsp页面

    在Idea中 如何在SpringBoot中使用jsp页面 1 首先 创建一个SpringBoot工程 选择Spring Initializr 然后点击next 修改工程路径 jdk根据自己安装的具体的jdk版本进行选择 根据项目所需进行选择
  • 刷脸支付彻底解决顾客的支付安全更方便

    创业能成功 其中一项不为人知的关键就在于你无需热爱自己所做的事情 热情当然必需要有 但它可以是因为这个生意能赚钱 而不是对产品的热情 当然这是纯粹的生活选择 不过鉴于赚钱能给自己和他人带来的好处 我希望你发现光是能赚到钱就足以是一种热情 生
  • Unreal4引擎开发学习日志

    Unreal4引擎开发学习笔记1 相关说明 本游戏引擎学习日志是笔者根据网上相关教学视频所写 是对视频内容的精炼与总结 如果您认为笔者所写不清晰明确 可以访问以下链接 Unreal入门第一季 虚幻C 基础训练 虚幻4引擎介绍 虚幻4是一套为
  • 插件编写傻瓜教程>>VC6.0

    gt gt 写在前面本教程主要讲解如何用按键精灵自带的模版编写插件 请大家在教程没全部写完之前不要跟贴 谢谢合作 需要的工具 VC6 0 编辑语言 C gt gt 初步接触1 安装VC6 0 建议不要使用创天的汉化版 2 解压插件自带的模版