开源 C++配合大漠插件实现的消息泵模式按键模拟编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档