开源 C++配合大漠插件实现的消息泵模式按键模拟编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开源C++配合大漠插件实现的消息泵模式按键模拟编程
开发背景:某天正在用OPENGL写一个UI界面库,发现实现过程越来越很有趣,一发不可收拾。
于是想着能不能在逻辑型代码上实现类似界面的那种思维。
花了2天写的,对新手或者老手都是会有帮助的。
这个类库的特点:
逻辑全部封装,你只需要提供要执行的行为,已经行为达到某个触发条件执行特定的事物。执行Execu即可。免去了大量重复的逻辑判断,大量的重复的函数调用。
加载大漠插件避开了COM组件注册表机制,用的WIN32方式加载
示例代码:
代码:
DmFindPic PicBaiDu_Open;//点击召唤师资料
DmFindPic PicBaiDu_Yixia;//查找是否有装备设置图标但不点击
PicBaiDu_Open.SetPicName(".\\1.bmp");
PicBaiDu_Yixia.SetPicName(".\\2.bmp");
{
PicBaiDu_Yixia.Enable_Click_whileFind(false);//找到图片不点击
PicBaiDu_Yixia.Enable_break_whileFind();//找到了就退出app1
DmABCDEFG_ACTION Yidong;
Yidong.SetWay(偏移,100,20);
PicBaiDu_Yixia.AddSubDo(&Yidong);
DmABCDEFG_ACTION Shuangji;
Shuangji.SetWay(双击,NULL);
PicBaiDu_Yixia.AddSubDo(&Shuangji);
DmABCDEFG_ACTION Shuru;
Shuru.SetWay(输入文字,"测试");
Shuru.Enable_break_whileFind();
PicBaiDu_Yixia.AddSubDo(&Shuru);
}
Mydm dm1;
dm1.MianzhuCe();
dm1.RegDM();
DmManger app1;
app1.AttachDm(&dm1);
app1.SetDoAndDo_Time(10);
app1.SetSleepFunc(BindSleep(Mysleep));
app1.AddDo(&PicBaiDu_Open);
app1.AddDo(&PicBaiDu_Yixia);
while (app1.Execu()==false)
{
OutputDebugStringA("false");
}
AfxMessageBox("over");
// TODO: 在此添加控件通知处理程序代码
示例代码2:
引用:
void CMFCApplication1Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码.
DmFindPic PicBaiDu_Open;//点击召唤师资料
DmFindPic PicBaiDu_Yixia;//查找是否有装备设置图标但不点击 DmFinStr findstr;
PicBaiDu_Open.SetPicName(".\\1.bmp");
PicBaiDu_Open.SetMove_ClickTime(1000);
PicBaiDu_Yixia.SetPicName(".\\2.bmp");
findstr.SetDicAndStr(0,"PLAY","f4dbb4-222222");
{
PicBaiDu_Yixia.Enable_Click_whileFind(false);//找到图片不点击
PicBaiDu_Yixia.Enable_break_whileFind();//找到了就返回
//找到了返回前执行自己的自定义函数
PicBaiDu_Yixia.SetFindCallBack(MyBinFindOrNoFindCallBack(ok90));
}
Mydm dm1;
dm1.MianzhuCe();
dm1.RegDM();
dm1.dm->SetDict(0,".\\dic.txt");
DmManger app1;
app1.AttachDm(&dm1);
app1.SetDoAndDo_Time(1000);
app1.SetSleepFunc(BindSleep(Mysleep));
app1.AddDo(&PicBaiDu_Open);
app1.AddDo(&findstr);
app1.AddDo(&PicBaiDu_Yixia);
//执行返回真的话执行这段代码
app1.CreateWith_DmABCDEFG_ACTION(0,偏移,100,20,双击,单击,输入文字,"TEST");
while (app1.Execu()==false)
{
OutputDebugStringA("false");
}
AfxMessageBox("over");
}
代码的主要执行体为DmManger:
代码:
#include "stdafx.h"
#include "DmManger.h"
DmManger::DmManger(void)
{
dmCur =NULL;
node.clear();
NeedABCDEFG_WhileTrue =false;
//sleepFuc =NULL;
}
DmManger::~DmManger(void)
{
}
bool DmManger::AttachDm(Mydm* dm)
{
if (!dm)
{
Msg("传入对象为空,%s",FunStr(无效的对象地址)); return false;