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

合集下载

大漠 python调用

大漠 python调用

大漠 python调用
大漠是一个开源的Python库,可以用于调用各种功能和服务。

它提供了丰富的接口和功能,可以帮助开发者更方便地进行编程和开发工作。

使用大漠库进行Python调用非常简单。

首先,我们需要安装大漠库并导入它。

然后,我们可以使用库中提供的各种函数和方法来实现我们想要的功能。

例如,如果我们想要编写一个程序自动化鼠标点击的功能,可以使用大漠库中的鼠标点击函数来实现。

我们只需要调用相应的函数,并传入需要点击的坐标即可。

除了鼠标点击,大漠库还提供了许多其他功能,如键盘输入、窗口操作、图像识别等。

使用这些功能,我们可以编写出各种自动化程序,提高工作效率。

不仅如此,大漠库还可以调用一些外部服务,如OCR文字识别、语音合成等。

这些功能可以帮助开发者更轻松地处理一些复杂的任务。

大漠库是一个强大而方便的Python库,可以帮助开发者更高效地进行编程和开发工作。

无论是自动化任务还是外部服务调用,使用大漠库都可以帮助我们实现更多的功能。

让我们一起来探索和利用大漠库,为我们的编程工作增添便利和乐趣吧!。

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

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

开源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();//找到了就退出app1DmABCDEFG_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;}dmCur =dm;return true;}void DmManger::Msg(char* Str,...){va_list args;va_start(args,Str);vsprintf(MsgBuf,Str,args);va_end(args);::MessageBoxA(0,MsgBuf,":",0);}bool DmManger::Execu(){for (auto i = node.begin() ;i!=node.end();i++) {(*i)->NodeDm=dmCur;// sleepFuc(DoAndDoTime);if (sleepFuc){(*i)->funcSleep = sleepFuc;}(*i)->Do();DoSleep();if ((*i)->break_whileFind){if ((*i)->IsFind){LastX =(*i)->X;LastY =(*i)->Y;Do_ImCreateABCDEFG_While_True(); return true;}}}return false;}bool DmManger::Execu(int DoAndDoTime_) {for (auto i = node.begin() ;i!=node.end();i++){(*i)->NodeDm=dmCur;if (sleepFuc){(*i)->funcSleep = sleepFuc;}(*i)->Do();DoAndDoTime =DoAndDoTime_;DoSleep();if ((*i)->break_whileFind || (*i)->break_whileNoFind) {if ((*i)->IsFind){LastX =(*i)->X;LastY =(*i)->Y;Do_ImCreateABCDEFG_While_True();return true;}}}return false;}void DmManger::AddDo(DmNode* node_){node.push_back(node_);}void DmManger::SetSleepFunc(SleepFunc fuc) {sleepFuc = fuc;}void DmManger::SetDoAndDo_Time(int time) {DoAndDoTime = time;}void DmManger::DoSleep(){if (sleepFuc){sleepFuc(DoAndDoTime);}}void DmManger::Reset(){node.clear();}void DmManger::MoveToLastXY(int OffX,int offY){DoSleep();dmCur->dm->MoveTo(LastX.lVal +OffX ,LastY.lVal+offY); DoSleep();dmCur->dm->LeftClick();DoSleep();}void DmManger::CreateWith_DmABCDEFG_ACTION(int type_,...) {NeedABCDEFG_WhileTrue =true;va_list va;va_start(va,type_);int typex=0;typex=va_arg(va,int);while (typex!=0){if (typex==双击){OutputDebugStringA("创建双击动作");std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG _ACTION());// DmABCDEFG_ACTION* pt->pt_=(new DmABCDEFG_ACTION());ptest->SetWay(typex);this->ADCDEFG_LIST.push_back( ptest);}else if (typex==单击){OutputDebugStringA("创建单击");// DmABCDEFG_ACTION* ptest= new DmABCDEFG_ACTION();std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG_A CTION());ptest->SetWay(typex);this->ADCDEFG_LIST.push_back( ptest);}else if (typex==偏移){OutputDebugStringA("创建偏移");std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG_A CTION());int x= va_arg(va,int);int y= va_arg(va,int);ptest->SetWay(typex,x,y);this->ADCDEFG_LIST.push_back( ptest);}else if (typex==输入文字){OutputDebugStringA("创建输入文字");std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG_A CTION());char* szstr= va_arg(va,char*);ptest->SetWay(typex,szstr);this->ADCDEFG_LIST.push_back( ptest);}typex=va_arg(va,int);}va_end(va);}void DmManger::Do_ImCreateABCDEFG_While_True(){if (ADCDEFG_LIST.empty()==true){OutputDebugStringA("Do_ImCreateABCDEFG_While_True 字动作数组为空,直接返回");// IsFind =true;return;}for (auto i = ADCDEFG_LIST.begin() ;i!=ADCDEFG_LIST.end();i ++){std::shared_ptr<DmABCDEFG_ACTION> subnode =*i;//把找到图片后XY传给子动作以便做其他的事subnode->MangerX =LastX;subnode->MangerY =LastY;subnode->NodeDm =this->dmCur;subnode->DoABC();if (subnode->break_whileFind){if (subnode->IsFind){OutputDebugStringA("find sub");/*IsFind =true;*/}}DoSleep();}}不能运行请在Mydm.cpp里,Mydm::RegDM实现中,把if ( dm->Reg("改成你的大漠注册码","")!=1)DmABCDEFG_ACTION.cpp中void DmABCDEFG_ACTION::Do()里面输入文字那一段使用了LOL的窗口句柄,自己可以修改一下框架,很简单,+LONG类型成员即可代码需要C++11支持:vs2012以及更高的版本即可。

openmodelica调用c代码

openmodelica调用c代码

主题:openmodelica调用c代码1. 介绍OpenModelicaOpenModelica是一种用于系统级建模和仿真的开源工具。

它允许用户使用建模语言对系统进行建模,并进行仿真和分析。

这使得OpenModelica成为工程师和科学家在设计和测试各种系统时的理想选择。

2. c代码在系统建模中的重要性C语言是一种被广泛应用的编程语言,它可以用于开发各种软件和系统。

在系统建模领域,C代码可以用于描述系统的特定行为和功能。

将C代码整合到OpenModelica中可以为用户提供更丰富的建模能力。

3. OpenModelica调用C代码的优势通过OpenModelica调用C代码,用户可以利用C代码的强大功能,如高效性能和低级的系统控制。

这使得OpenModelica能够满足更广泛的建模需求,并为用户提供更灵活和多样化的建模选择。

4. OpenModelica调用C代码的实现方法在OpenModelica中,用户可以通过外部函数接口(External Function Interface)来调用C代码。

用户可以使用OpenModelica的建模工具来创建一个接口函数,该函数将调用C代码并将其嵌入到建模中。

这个过程需要用户具备一定的C语言编程能力,但经过简单的学习后,就能够轻松掌握。

5. 调用C代码的示例假设用户想要在OpenModelica中建模一个电机系统,并使用C代码描述电机的控制算法。

用户可以首先编写C代码来描述电机的控制算法,然后利用OpenModelica的外部函数接口来调用这段C代码。

通过这种方式,用户可以在OpenModelica中实现对电机系统的复杂建模和仿真。

6. 调用C代码的注意事项在使用OpenModelica调用C代码时,用户需要注意一些细节。

确保C代码在编译时没有错误,并且符合OpenModelica的接口要求。

需要理解C代码与OpenModelica建模的协同工作方式,以确保两者能够正确地互相调用。

开源软件模拟键盘操作方法

开源软件模拟键盘操作方法

开源软件模拟键盘操作方法
1. 使用Python模拟键盘操作:使用Python中的pyautogui库可以模拟键盘按键。

例如,要模拟按下“Ctrl+C”组合键,可以使用以下代码:
import pyautogui
pyautogui.keyDown('ctrl')
pyautogui.press('c')
pyautogui.keyUp('ctrl')
2. 使用AutoHotkey模拟键盘操作:AutoHotkey是一个免费开源脚本语言,专门用于自动化任务,包括模拟键盘和鼠标操作。

以下是一个使用AutoHotkey 模拟按下“Ctrl+C”组合键的脚本:
^c::
Send, {ctrl down}c{ctrl up}
Return
3. 使用Java Robot类模拟键盘操作:Java中的Robot类可以让程序模拟键盘和鼠标操作。

以下是一个使用Java Robot类模拟按下“Ctrl+C”组合键的代码:
import java.awt.Robot;
import java.awt.event.KeyEvent;
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_CONTROL);
无论使用哪种方法,都需要先了解键盘上的按键代码和操作方法。

开源社区中有大量的键盘模拟库和文档可用来参考。

大漠插件字库原理介绍.

大漠插件字库原理介绍.

首先说明下大漠综合工具制作字库的过程和原理1.截取你所需要的图片2.点击你所需要字的颜色3.点击提取点阵4.输入字符按回车生成字库具体的原理我不好说,但是就我的理解是:对图片中不符合指定颜色的部分去除掉,然后二值化获取点阵,点阵也就是这些颜色的分布规律,二值化就是黑白两色,RGB格式中黑色"000000"白色"ffffff"由于我的脚本在别人电脑上运行的时候经常失效,今天改成16位色后我机器上运行也失效了,而我这个脚本主要采用的就是大漠插件的找字功能,我以为是机器间的色偏造成的,一直想法子算色偏,但是我失败了。

后来我想起论坛上有个帖子专门讲过同色系的RGB格式中R值是不变的(不好意思忘了作者了,在这里致谢)于是我就在大漠综合工具的色偏处输入了00ffff结果是在16位色环境下,大漠综合工具中二值化区域内的字显示的跟我在32位色环境下做的一模一样,接着我提取点阵,制作字库,进行调试,命令格式如下:dm_ret =dm.FindStr(0,0,978,585, "码", "ffd463-00ffff", 1.0, x1, y1)If x1 >= 0 ThenMessageBox x1 & y1End If准确的弹出了x,y的坐标值接着我换32位色做同样的调试,显示结果与16位色下相同,我测了坐标正好是我要找的字的左上角经多次测试发现这个方法中字色的R值必须为FF或00(至于F1,01等未测试,有兴趣的朋友可以试试)庆幸啊以后找字可以不考虑偏色了呵呵再说了考虑我也不会算具体原理我也不是很懂,但是我估计应该是:我比较了点阵中R值相同的所有点,取得符合二值化点阵区域内所有的点造成的再次提醒此方法只适合R值为00,FF的其他位置相同的未测试当然这么做效率是低了点,但是在我看来脚本应该是:稳定性>通用性>执行效率,毕竟脚本也是你编写的一种软件吗鲜花,银币在哪拿来啊呵呵简单说下后台操作的方法,先判断该窗口是否支持后台,用下面的语句:Hwnd=Plugin.Window.Foreground()Hwmd=Plugin.Window.GetkeyFocusWnd()If Hwmd<>0 thenMessagebox "可以"ElseMessagebox "不可以"End if然后把下面的放在脚本开头Hwnd=Plugin.Window.Foreground()Hwnd=Plugin.Window.GetkeyFocusWnd()//下面接自己的代码首先后台一点是要有句柄、这个很简单第一步我们先打开抓抓,接着点击句柄接着把鼠标移到你所要后台的窗口上,按下F8 是否看见当前窗口句柄那里出现一串数字?把它复制下来第二步我们点击图像,在指定窗口句柄那里打钩接着把数字复制进去按下抓图键(Print Screen SysRq) 是否只看见你要后台的的图像呢?对着你所需要的坐标按右键加入点1 记住坐标然后加入到后台鼠标点击里面就行了第三步我们在后台命令中找到鼠标指向窗口点击插入命令是Hwnd = Plugin.Window.MousePoint()第四步我们要进行后台鼠标点击或者后台输入键盘命令是Call Plugin.Bkgnd.LeftClick(Hwnd, 0, 0)在按键看了很多教程关于"多开..."的我看了后回味,似乎都是单线程的,往往新手会问,难道不能让精灵同事做2件事情吗?新手问的其实是问:按键可以多线程后台吗?由此我突然奇想且试验成功.且次试验可将任何的单开后台变为多开后台脚本.如有愚昧的地方指指教了. 作业:设计一个在记事本上后台打字"1"的循环代码要求:能循环多开Hwnd = Plugin.Window.MousePoint()rem aCall Plugin.Bkgnd.KeyPress(Hwnd, 49)Delay 500goto a注:8.0写的如只有7的同学自己翻译不太难的回复后能见教程本帖隐藏的内容需要回复才可以浏览第一步:将禁止脚本重复运行选为否(在是否循环的下面)第二步:设置启动热键为F2(以免与记事本热键冲突)第三步:保存退出(或选调试)第四步:打开第一个记事本文件,鼠标指中按F2,此时可看见后台打的111出现最小化第五步:打开第二个记事本文件,鼠标指中按F2,此时可看见后台打的111出现最小化........此时你如果将多个记事本都打开看他们都在干活呢-------可以无限后台多开-多线程的哦总结:第一步很关键.启示:如果我做的"打1"的脚本换成打怪的呢?本帖隐藏的内容需要回复才可以浏览第1步:什么是后台插件及命令首先我们要明白什么是后台插件以及后台命令,在编辑窗口找到全部命令,找到窗口插件(建议大家可以站内搜一下361插件,下载后放进去,看一下361插件的命令),点开后点击每一条命令仔细看说明,对比每条命令跟前台命令的对应关系,这样我们就可以把对应的前台命令转换为后台命令了。

按键插件应用说明

按键插件应用说明

按键插件应用篇注意:本篇做为按键使用大漠插件的插件篇,本篇会按会员要求有所增补,故顺序会有所改变,请大家按实际顺序观看!第一节、教你做一个最简单的打怪挂在我们做游戏的辅助工具的时候,一般是将游戏窗口化,这样是为了将来游戏多开或者是后台打游戏,前台可以看电影等等做准备的。

1、先查找游戏快捷键一般的游戏都有快捷键,这个我们要仔细的查找。

2、使用按键精灵来XXX一个简单的前台挂通过这个简单的挂我们可以看出A、怪物的级别不同,被打死的时间也不一样,所以我们要判断打死一个怪的时间B、人物的血量消耗到一定比例时加血的问题C、珍兽加血的问题D、加血药吃光后买药问题,等等这些我会在以后的教程中一一的给大家讲授好,现在开始第二节第二节、大漠工具、插件的使用。

1、大漠插件与工具熟悉按键的朋友都知道,大漠的插件是免费的,并且是免费插件中几乎最好用的插件这个是下载XXX:下载注册方法:打包dm.dll到附件添加以下代码在脚本最开始//这句意思是解包文件到文件夹PutAttachment "c:\test_game","*.*"//这句意思是创创建并返回对像set ws=createobject("Wscript.Shell")//这句意思是注册大漠插件ws.run "regsvr32 c:\test_game\dm.dll /s"set ws=nothingDelay 1500我们可以在D盘做一个游戏的文件夹来使用。

在D盘做一个TianLong的文件夹吧,大家来看我的演示。

第三节、文字识别的方法。

好,大家都注册完了吧,现在开始讲一下文字的识别方法1、我们先在上边所说过的文件夹中建立一个记事本吧,名还是为TianLong.txt,然后打开大漠工具,打开或新建字库。

2、我们就找这个字吧,“路”,请仔细看我的操作好,文字识别大家都会了吧,我在下一节给大家讲一下游戏的后台判断。

大漠插件开发手册

大漠插件开发手册

大漠插件开发手册大漠插件是一款用于自动化操作和控制Windows系统的软件开发工具,它可以模拟鼠标、键盘等操作,并提供了丰富的API接口,方便开发者进行各种自动化任务的开发。

本手册主要介绍大漠插件的基本用法和相关API接口的调用方法,帮助开发者快速上手和开发自己的自动化任务。

1. 安装和配置大漠插件- 下载大漠插件的安装包,并进行安装。

- 配置开发环境,将大漠插件的安装目录添加到系统路径中。

2. 创建一个插件对象在代码中引入大漠插件的命名空间,并创建一个插件对象。

```using System;using System.IO;using System.Runtime.InteropServices;namespace DM.PluginDemo{class Program{static void Main(string[] args){DmPlugin.Plugin dm = new DmPlugin.Plugin();}}}```3. 配置大漠插件的基本参数在创建插件对象后,需要对插件进行一些基本参数的配置,比如设置插件所使用的窗口句柄、设置插件的工作路径等。

```DmPlugin.Plugin dm = new DmPlugin.Plugin();dm.SetPath(Path.GetDirectoryName(System.Reflection.Assembly. GetExecutingAssembly().Location));dm.SetDict(0, "dm_soft.txt");```4. 使用鼠标相关的API接口大漠插件提供了一系列鼠标相关的API接口,比如模拟鼠标左键点击、模拟鼠标移动等。

```dm.MoveTo(100, 100);dm.LeftClick();```5. 使用键盘相关的API接口大漠插件也提供了一系列键盘相关的API接口,比如模拟键盘按键、模拟键盘输入等。

学习怎么制作游戏辅助,按键后台插件命令为什么会失效?

学习怎么制作游戏辅助,按键后台插件命令为什么会失效?

学习怎么制作游戏辅助,按键后台插件命令为什么会失效?来源:按键学院【按键精灵】按键后台命令就是无效!抓狂啊,暴躁啊,忍不住泪牛满面啊~是否有同学遇到这样的情况呢?有吧?肯定有。

是什么原因呢?原因一、游戏窗口句柄没有获取到1. 游戏加壳,无法获取窗口句柄。

你要绑定的游戏它加了壳,所以无法获取窗口句柄,无法绑定窗口。

无法向窗口发送后台命令。

(加壳的全称是可执行程序资源压缩,是保护文件的常用手段.它起到了加密隐藏的保护作用。

让你无法抓到窗口句柄。

)这种情况比较复杂,有很多脱壳的工具,但是并不是你试用了一款脱壳软件它就一定适用于你要绑定的游戏,你可能要尝试很多种。

2. 游戏hook了GetParent函数接口hook技术可以将自身的代码“融入”被hook住的程序的进程中,成为目标进程的一个部分。

通过hook“接触”到需要修改的api函数入口点,改变它的地址指向新的自定义的函数。

GetParent函数是用于获得一个指定子窗口的父窗口句柄,如果游戏对它进行了hook,我们就无法获取想要获取的游戏窗口句柄。

3. 电脑上运行了其他的挂机软件电脑上运行了其他的挂机软件,导致了要操作的游戏窗口受到了干扰冲突。

关掉其他的挂机软件,重启游戏再绑定。

导致了要操作的游戏窗口受到了干扰冲突。

关掉其他的挂机软件,重启游戏再绑定。

原因二、游戏采用的绘图方式差异(图色信息获取与识别方向)目前较为热门的几种绘图分别是:GDI、OpenGL 、DirectX。

它们的功能就是处理图形图像(我们把范围缩小一点,就拿游戏窗口的图色做例子),GDI 是通过操作系统支配最后达成游戏窗口图色的显示,而OpenGL 、DirectX 它们两个是由显卡操作达成游戏窗口图色显示的。

按键精灵无法对基于显卡的OpenGL 、DirectX直接操作:我们的按键后台命令是基于操作系统的,所以无法直接对基于显卡的OpenGL 、DirectX 进行操作。

无法对它操作就意味着无法获取图色信息,在使用后台图色命令的时候就会失效。

C#调用大漠插件

C#调用大漠插件

C#调⽤⼤漠插件⼤漠插件是⼀个很不错的东西,在按键精灵和易语⾔⾥⾯⽤得很多,可以后台找图找字,写游戏⾃动脚本⽤得特别多。

前⾯写⼀个微信的⾃动脚本,查了⼀些资料,易语⾔不太熟悉,按键精灵功能上可能不好实现,就找了些资料,⼤漠插件是可以⽤⼀、引⽤Ddm.dll.NET⾥⾯可以直接引⽤,引⽤⽅法,添加引⽤--COM--找到DM,双击即可⼆、注册⼤漠插件//这是注册DLL到系统的⼀个⽅法,注册⼤漠则调⽤ AutoRegCom("regsvr32 -s dm.dll");static string AutoRegCom(string strCmd){string rInfo;try{Process myProcess = new Process();ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe");eShellExecute = false;myProcessStartInfo.CreateNoWindow = true;myProcessStartInfo.RedirectStandardOutput = true;myProcess.StartInfo = myProcessStartInfo;myProcessStartInfo.Arguments = "/c " + strCmd;myProcess.Start();StreamReader myStreamReader = myProcess.StandardOutput;rInfo = myStreamReader.ReadToEnd();myProcess.Close();rInfo = strCmd + "\r\n" + rInfo;return rInfo;}catch (Exception ex){return ex.Message;}}三、实例化⼤漠对象Dm.dmsoft dm = new Dm.dmsoft();四、调⽤⼤漠的⽅法直接通过实例化的对象dm调⽤,如dm.MoveTo(30, 30);完整代码:窗体上放⼀个按钮,点击按钮,调⽤⼤漠插件将⿏标移动到(30,30)using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Diagnostics;using System.IO;namespace Player{public partial class Player : Form{public Player(){InitializeComponent();AutoRegCom("regsvr32 -s dm.dll");}private void button1_Click(object sender, EventArgs e){Dm.dmsoft dm = new Dm.dmsoft();dm.MoveTo(30, 30);}static string AutoRegCom(string strCmd){string rInfo;try{Process myProcess = new Process();ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe");eShellExecute = false;myProcessStartInfo.CreateNoWindow = true;myProcessStartInfo.RedirectStandardOutput = true;myProcess.StartInfo = myProcessStartInfo;myProcessStartInfo.Arguments = "/c " + strCmd;myProcess.Start();StreamReader myStreamReader = myProcess.StandardOutput;rInfo = myStreamReader.ReadToEnd();myProcess.Close();rInfo = strCmd + "\r\n" + rInfo;return rInfo;}catch (Exception ex){return ex.Message;}}}}。

VC大漠实例

VC大漠实例

VC大漠实例MFC VC++ (VS2010) 调用大漠插件实例小工具源代码:隐藏鼠标指定的窗口,显示时要求输入密码:119 MiniTool.cpp 部分:// MiniTool.cpp : 定义应用程序的类行为。

//#include "stdafx.h"#include "MiniT ool.h"#include "MiniT oolDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// CMiniToolAppBEGIN_MESSAGE_MAP(CMiniT oolApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP()// CMiniToolApp 构造CMiniToolApp::CMiniToolApp(){// TODO: 在此处添加构造代码,// 将所有重要的初始化放置在InitInstance 中}// 唯一的一个CMiniToolApp 对象CMiniToolApp theApp;// CMiniToolApp 初始化BOOL CMiniToolApp::InitInstance(){// 如果一个运行在Windows XP 上的应用程序清单指定要// 使用ComCtl32.dll 版本6 或更高版本来启用可视化方式,//则需要InitCommonControlsEx()。

否则,将无法创建窗口。

INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。

InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("MiniTool by liuh"));WinExec("regsvr32.exe dm.dll /s",SW_SHOW);//注册dm.dll,如果dm.dll为当前程序目录相对路径,则直接写dm.dll即可。

大漠各个插件说明[指南]

大漠各个插件说明[指南]

大漠各个插件说明[指南]大漠各个插件说明1. 无返回值的不能带括号 ,或者说无括号不能带返回值,例如dm.FindStr 0,0,2000,2000,"长安","aaaaa-00000",1.0,intX,intYdm.MoveTo intX,intYdm.LeftClickdm.SetPath "c:\xxxx"dm.SetDict 0,"test.txt"dm.LoadPic "*.bmp"等等,这些都是不需要返回值的,那么不需要加括号,当然,你也可以加括号,但是就必须遵循规则22.有返回值的必须带括号,或者说,有括号必须有返回值,例如dm_ret = dm.FindStr(0,0,2000,2000,"长安","aaaaa-00000",1.0,intX,intY)dm_ret = dm.MoveTo(intX,intY)m_ret = dm.LeftClick()ddm_ret = dm.SetPath("c:\xxxx")dm_ret = dm.SetDict(0,"test.txt") dm_ret = dm.LoadPic("*.bmp") 有些函数,是必须有返回值的,那么就必须带括号,比如Ocr函数等ss = dm.Ocr(0,0,2000,2000,"aaaaaa-000000",1.0)4按键多线程调用插件目前来讲,按键的多线程还不够成熟。

尽量少用。

以下是在按键下使用多线程调用插件的一个示例.// 注册部分我就省略了Dim hwndSet dm = createobject("dm.dmsoft") TracePrint dm.Ver()// 主绑定(当然你也可以不要主绑定。

C#实现的三种方式实现模拟键盘按键

C#实现的三种方式实现模拟键盘按键

C#实现的三种⽅式实现模拟键盘按键1.System.Windows.Forms.SendKeys组合键:Ctrl = ^ 、Shift = + 、Alt = %模拟按键:Aprivate void button1_Click(object sender, EventArgs e){textBox1.Focus();SendKeys.Send("{A}");}模拟组合键:CTRL + Aprivate void button1_Click(object sender, EventArgs e){webBrowser1.Focus();SendKeys.Send("^{A}");}SendKeys.Send // 异步模拟按键(不阻塞UI)SendKeys.SendWait // 同步模拟按键(会阻塞UI直到对⽅处理完消息后返回)//这种⽅式适⽤于WinForm程序,在Console程序以及WPF程序中不适⽤2.keybd_eventDLL引⽤[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);模拟按键:Aprivate void button1_Click(object sender, EventArgs e){textBox1.Focus();keybd_event(Keys.A, 0, 0, 0);}模拟组合键:CTRL + Apublic const int KEYEVENTF_KEYUP = 2;private void button1_Click(object sender, EventArgs e){webBrowser1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.A, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);}3.PostMessage上⾯两种⽅式都是全局范围呢,现在介绍如何对单个窗⼝进⾏模拟按键模拟按键:A / 两次[DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]public static extern int PostMessage(IntPtr hWnd, int Msg, Keys wParam, int lParam);public const int WM_CHAR = 256;private void button1_Click(object sender, EventArgs e){textBox1.Focus();PostMessage(textBox1.Handle, 256, Keys.A, 2);}模拟组合键:CTRL + A如下⽅式可能会失效,所以最好采⽤上述两种⽅式1public const int WM_KEYDOWN = 256;public const int WM_KEYUP = 257;private void button1_Click(object sender, EventArgs e){webBrowser1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.A, 0, 0, 0);PostMessage(webBrowser1.Handle, WM_KEYDOWN, Keys.A, 0); keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);}。

VS2008调用大漠插件

VS2008调用大漠插件

YYX –来不及思考博客地址:/ 无意之中找到了大漠插件,这个插件给我们写游戏辅助的来说带来了很大的便利,我琢磨了一段时间把VS2008如何调用DM.DLL的方法写出来,共享给那些为此带来困恼的朋友们。

首先我们新建一个MFC项目:
去掉我们多余不需要的控件。

拖上一个按钮上去:
工程上右键点添加类,然后选择
然后添加上去我们的DM.DLL在点会自动生成Cdmsoft.h文件,我们点完成。

在我们的里面导入Cdmsoft.h
然后在我们的按钮添加如下代码:
Cdmsoft dm;//申明一个对象
WinExec("regsvr32.exe dm.dll /s",SW_SHOW);//注册我们的DM.DLL
CoInitialize(NULL);
CLSID clsid;
HRESULT
hr=CLSIDFromProgID(OLESTR("dm.dmsoft"),&clsid);//利用“根名称.类名”获取CLSID,&就是把指针给函数,也就是传址。

dm.CreateDispatch(clsid);//从注册表中获取到dll路径,到这里就调用成功了。

剩下就是调用DM.DLL本身里面功能函数,至于在那里初始化合适,那里卸载合适,自己去琢磨。

图文教程结束,希望能帮到大家!。

能真正后台运行的按键精灵代码支持小化和切换窗口

能真正后台运行的按键精灵代码支持小化和切换窗口

能真正后台运行的按键精灵代码支持小化和切换窗口————————————————————————————————作者:————————————————————————————————日期:能真正后台运行的按键精灵代码支持最小化和切换窗口能真正后台运行的按键精灵代码是附2,详细应用是附3.均可直接复制使用.主题:按键精灵切换窗口最小化后台运行游戏1、游戏句柄后台的意思就是当窗口被遮盖或移开的时候,仍能够正常的执行脚本动作,所以必须先找到该游戏的窗口句柄,这样可以保证我们编辑的脚本语句有正确的使用方向,获取窗口句柄的方法有很多,我一般使用以下的方法:Dim hwndPlugin hwnd=Window.MousePoint()Plugin是调用插件命令,凡是调用插件都需要使用这个命令,hwnd就是得到的句柄,Window是插件的名称MousePoint()返回鼠标所在的窗口的句柄关于窗口这里需要多说几句,以网页游戏为例,鼠标放在标题栏上和放在游戏窗口所得到的句柄是不一样的,游戏窗口是IE的一个子窗口,因此在运行脚本前,将你的鼠标放在游戏窗口的区域内再运行脚本。

得到句柄费函数很多,有兴趣的自己去试试看,不过知道一个就足够了。

2、模拟动作得到窗口句柄后,你就可以向这个窗口模拟需要的动作了,在这里要用到按键精灵7的插件(既然已经有7了以前的插件就不作介绍了),模拟动作的函数有如下几个-模拟鼠标点击Plugin Bkgnd.LeftClick(句柄,横坐标,纵坐标) //模拟鼠标左键点击Plugin Bkgnd.RightClick(句柄,横坐标,纵坐标) //模拟鼠标右键点击其中的句柄就是上面我们已经得到的句柄,这里的横坐标和纵坐标是针对游戏窗口,而不是针对屏幕的(看晕了吧^_^关于这一点足足困扰了我一个礼拜的时间才弄明白)。

屏幕坐标,是以屏幕左上角为基点(0,0),右下角的坐标是和屏幕分辨率有关的,而窗口坐标,不是在屏幕的左上角,例如word中的编辑窗口的0,0位置是在工具栏下面的,看不懂也没关系,你只要记住下面的方法就行了,首先在得到窗口句柄后加上如下的代码:Plugin s = Window.GetClientRect(hwnd)XYArray = Split(s, "|", -1, 1)dx = XYArray(0)dy = XYarray(1)其次,在横坐标和纵坐标的后面都分别减去dx和dy就行了,为什么!!不用去管他,反正这样做不会错,举例说明例如你抓点得到的横坐标是x,纵坐标是y,那么模拟鼠标左键点击的语句应该是这样的:Plugin Bkgnd.LeftClick(句柄x-dx,y-dy)-模拟键盘动作Plugin Bkgnd.KeyPress(句柄,按键码) //模拟键盘动作这里的按键码可以很容易的在按键精灵中查到,包括组合键-输入字符串Plugin Window.SendString(句柄,字符串)这个函数在登陆和喊话时是非常有用的,其中的字符串可以是字符串变量3、后台找色后台脚本尽量少用找色语句,否则你的游戏将“卡巴死机”,即使少用也会出现很多的“马赛克”幸运的是不影响找色功能,即使游戏图像已经乱七八糟,既然是要后台操作,难看就难看吧^_^。

实现按键c版的滚轮消息按键

实现按键c版的滚轮消息按键

//DLL#define _WIN32_WINNT 0x0500#include <windows.h>_declspec(dllexport) BOOL MouseHK();//滚轮吃药LRESULT CALLBACK HookProcMouse(int nCode, WPARAM wParam, LPARAM lParam);//鼠标钩子回调函数HHOOK hkMouse = NULL;//鼠标钩子句柄HINSTANCE hWnd = NULL;//DLL实例句柄BOOL MouseHK(){if(hkMouse){UnhookWindowsHookEx(hkMouse);hkMouse = NULL;return FALSE;}else{hkMouse = SetWindowsHookEx(WH_MOUSE, HookProcMouse, hWnd, 0);return TRUE;}}LRESULT CALLBACK HookProcMouse(int nCode, WPARAM wParam, LPARAM lParam){short x;typedef struct tagMOUSEHOOKSTRUCTEX {MOUSEHOOKSTRUCT MOUSEHOOKSTRUCT;DWORD mouseData;} MOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX, *LPMOUSEHOOKSTRUCTEX;if(nCode >= 0 && wParam == WM_MOUSEWHEEL){LPMOUSEHOOKSTRUCTEX m = (LPMOUSEHOOKSTRUCTEX)lParam;x = HIWORD(m->mouseData);if(x > 0) keybd_event('2', 0, 0, 0);else keybd_event('2', 0, 0, 0);}return CallNextHookEx(hkMouse, nCode, wParam, lParam);}BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){hWnd = (HINSTANCE)hModule;switch (ul_reason_for_call){case DLL_PROCESS_A TTACH:break;case DLL_THREAD_ATTACH:break;case DLL_PROCESS_DETACH:case DLL_THREAD_DETACH:if (hkMouse) UnhookWindowsHookEx(hkMouse);break;}return TRUE;}//APP#define _WIN32_WINNT 0X0500#include <windows.h>#include <tchar.h>#include "resource.h"#pragma comment(lib, "hk.lib")_declspec(dllimport) BOOL MouseHK();BOOL WINAPI MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)// TODO: Place code here.DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainProc);return 0;}BOOL WINAPI MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch(uMsg){case WM_COMMAND:switch(LOWORD(wParam)){case ID_MOUSEHK:if(MouseHK()) SetDlgItemText(hWnd, ID_MOUSEHK, _T("停止"));else SetDlgItemText(hWnd, ID_MOUSEHK, _T("开始"));break;case IDCANCEL:EndDialog(hWnd, NULL);}}return FALSE;}//RC//Microsoft Developer Studio generated resource script.//#include "resource.h"#define APSTUDIO_READONL Y_SYMBOLS///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"/////////////////////////////////////////////////////////////////////////////#undef APSTUDIO_READONL Y_SYMBOLS/////////////////////////////////////////////////////////////////////////////// Chinese (P.R.C.) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #pragma code_page(936)#endif //_WIN32#ifdef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// TEXTINCLUDE//1 TEXTINCLUDE DISCARDABLEBEGIN"resource.h\0"END2 TEXTINCLUDE DISCARDABLEBEGIN"#include ""afxres.h""\r\n""\0"END3 TEXTINCLUDE DISCARDABLEBEGIN"\r\n""\0"END#endif // APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Dialog//IDD_MAIN DIALOG DISCARDABLE 0, 0, 81, 79STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION "Dialog"FONT 10, "System"BEGINDEFPUSHBUTTON "开始",ID_MOUSEHK,7,56,67,16CTEXT "剑侠情缘",IDC_STA TIC,7,7,67,11CTEXT "倚天情",IDC_STATIC,7,25,67,11CTEXT "超级滚轮",IDC_STA TIC,7,41,67,11END///////////////////////////////////////////////////////////////////////////////// DESIGNINFO//#ifdef APSTUDIO_INVOKEDGUIDELINES DESIGNINFO DISCARDABLEBEGINIDD_MAIN, DIALOGBEGINLEFTMARGIN, 7RIGHTMARGIN, 74TOPMARGIN, 7BOTTOMMARGIN, 72ENDEND#endif // APSTUDIO_INVOKED#endif // Chinese (P.R.C.) resources/////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 3 resource.///////////////////////////////////////////////////////////////////////////////#endif // not APSTUDIO_INVOKED//RC.H//{{NO_DEPENDENCIES}}// Microsoft Developer Studio generated include file.// Used by dialog.rc//#define IDD_MAIN 101#define ID_MOUSEHK 1004// Next default values for new objects//#ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONL Y_SYMBOLS#define _APS_NEXT_RESOURCE_V ALUE 103#define _APS_NEXT_COMMAND_V ALUE 40001 #define _APS_NEXT_CONTROL_V ALUE 1003 #define _APS_NEXT_SYMED_V ALUE 101#endif#endif。

第二章 大漠插件的介绍和调用

第二章 大漠插件的介绍和调用

一大漠插件的介绍大漠插件压缩包第一个就是大漠插件了。

我调用的大漠功能都是通过调用它里面的函数实现的。

第二个是注册dll用的组件,按键精灵通过这个组件自动注册大漠插件到系统。

第三个也是最重要的大漠插件各个函数的说明文档,学会和看懂他,你就可以做出各种功能的脚本了。

不要看不起脚本,如果用VC调用大漠的话,那就不叫脚本了,叫程序。

虽说功能还是鼠标键盘模拟。

第四个也很重要,以后很多调试,图文识别都要用这个工具。

第五个就是一个bat的手动把大漠注册到系统的文件。

在win7下的话,右键选择管理员权限运行。

目前使用的这个大漠插件的版本为免费的 v3.1233版。

二大漠插件在按键精灵中的调用先来看看,如果在按键精灵(以后简称按键里调用。

首先要了解,大体的工作流程。

开始先创建一个大漠对象,接下来就可以调用这个对象的各个函数了。

但是实际上在创建大漠对象前还要先判断系统有没有注册大漠插件。

没有注册的话是无法创建大漠对象的。

咱们今天暂时先不管这些。

先手动注册-----也就是运行刚才那个注册大漠插件到系统。

三大漠插件调用实例接下来先创建一个按键精灵脚本,并切换到源代码模式。

(不会的请参见上一章的教程)按Ctrl+S是快速保存,如果有错误下面脚本信息栏会有提示。

当然这个提示并不一定准确,有时因为其他行的错误,导致报错在这行,也是有可能的,因此要仔细,一个逗号,一个括号都有可能出错。

点击顶部的调试按钮出现这个提示是保存进入调试模式后,左下角会有这个调试界面按F10或者鼠标直接点击都可以。

运行结果这就是把当前使用的大漠插件的版本号用弹窗展示出来了。

这种弹窗也可以用于调试信息的查看。

好了,今天就先到这里。

下一章,我们会介绍按键的后台操作和窗口的绑定。

大漠插件绑定窗口原理

大漠插件绑定窗口原理

大漠插件绑定窗口原理一、背景介绍大漠插件是一款常用的Windows自动化工具,可以实现鼠标键盘的模拟操作、窗口识别、图像识别等功能。

在使用大漠插件时,我们需要将其与目标窗口进行绑定,以便对该窗口进行操作。

本文将介绍大漠插件绑定窗口的原理。

二、大漠插件基本原理大漠插件基于Windows API实现,可以通过调用Windows API来实现鼠标键盘模拟操作、窗口识别等功能。

在使用大漠插件时,我们需要先创建一个对象,并使用该对象调用相应的方法来实现所需功能。

三、窗口句柄在Windows系统中,每个窗口都有一个唯一的句柄(handle),可以通过这个句柄来对该窗口进行操作。

在使用大漠插件时,我们需要获取目标窗口的句柄,并将其与大漠插件进行绑定。

四、获取窗口句柄获取目标窗口的句柄有多种方法,其中比较常用的方法有以下几种:1. 使用FindWindow函数FindWindow函数可以根据窗口类名和窗口标题来查找符合条件的第一个顶级窗口,并返回其句柄。

具体使用方法如下:HWND hwnd = FindWindow(NULL, "窗口标题");其中,第一个参数为窗口类名(如果不指定,则表示查找所有顶级窗口),第二个参数为窗口标题。

2. 使用FindWindowEx函数FindWindowEx函数可以在指定的父窗口下查找符合条件的子窗口,并返回其句柄。

具体使用方法如下:HWND hwndParent = FindWindow(NULL, "父窗口标题"); HWND hwndChild = FindWindowEx(hwndParent, NULL, "子窗口类名", "子窗口标题");其中,第一个参数为父窗口句柄,第二个参数为子窗口句柄(如果不指定,则表示查找所有子窗口),第三个参数为子窗口类名,第四个参数为子窗口标题。

3. 使用EnumWindows函数EnumWindows函数可以枚举系统中所有顶级窗口,并对每个顶级窗口调用一个回调函数进行处理。

易语言大漠插件写法

易语言大漠插件写法

易语言大漠插件写法
易语言是一种面向中文用户的编程语言,而大漠插件是用于实现自动化操作的插件,通常用于编写自动化脚本。

在易语言中使用大漠插件可以实现诸如模拟鼠标点击、键盘输入等操作。

下面我将从多个角度来介绍易语言中大漠插件的写法。

首先,要使用大漠插件,需要在易语言中进行插件的引入和初始化。

在代码中需要使用`插件初始化`命令来初始化大漠插件,然后使用`插件调用`命令来调用大漠插件的各种功能。

其次,大漠插件的写法通常涉及到对各种操作的调用,比如模拟鼠标点击、键盘输入、图像识别等。

在易语言中,可以使用大漠插件提供的函数来实现这些操作,比如使用`MouseClick`函数来模拟鼠标点击,使用`KeyPress`函数来模拟键盘输入,使用`FindPic`函数来进行图像识别等。

另外,大漠插件的写法还涉及到对插件返回结果的处理。

在调用大漠插件的函数之后,通常需要对函数的返回结果进行判断和处理,以确保操作的准确性和稳定性。

总的来说,易语言中使用大漠插件的写法主要包括插件的引入和初始化、对各种操作的调用以及对插件返回结果的处理。

在实际编写中,需要根据具体的需求和场景来灵活运用大漠插件的各种功能,并结合易语言的语法特点来编写相应的自动化脚本。

希望这些能帮助到你。

按键精灵教程:DNF游戏脚本刷图制作过程

按键精灵教程:DNF游戏脚本刷图制作过程

按键精灵教程:DNF游戏脚本刷图制作过程PutAttachment ".\Plugin", "RegDll.dll" PutAttachment "C:大漠测试后台", "dm.dll" need_ver = "3.1233"Set ws = createobject("Wscript.Shell")ws.run "regsvr32 atl.dll /s"Set ws = nothingPutAttachment ".\Plugin", "RegDll.dll"Call Plugin.RegDll.Reg("C:大漠测试后台\dm.dll") set dm =createobject("dm.dmsoft") ver = dm.Ver() if ver <> need_ver then set dm = nothingset ws=createobject("Wscript.Shell")ws.run "regsvr32 C:大漠测试后台\dm.dll /s" set ws=nothingDelay 1500set dm = createobject("dm.dmsoft")ver = dm.Ver()if ver <> need_ver thenmessagebox "插件版本错误,当前使用的版本是:"&ver&", 插件所在目录是:"&dm.GetBasePath()messagebox "脚本插件错误,请重新打开,并退出所有杀毒和系统防火墙"EndScriptEnd IfElseTracePrint "注册成功"End Ifdm.SetPath "C:大漠测试后台"// 以上全部都是注册大漠,采用的是大漠3.1233 版本插件hwnd = dm.FindWindow("", " 英雄联盟登录程序")// 上面这个标题可以改成自己玩的游戏标题dm_ret = dm.BindWindow(hwnd, "normal", "normal", "normal", 0)/* 上面的三个normal 分别是:1:屏幕颜色获取方式2:鼠标仿真模式3:键盘仿真模式4:0 的意思是模式以上四个可以自己一个的调试,先将第一个normal 一个的换,直到能成功截图为止,截图命令在第48 行如果截图成功,那么再来调试第二个鼠标仿真模式,选取游戏中某个按钮的坐标,然后点击第三个normal 是键盘仿真模式,比如游戏中有个快捷键是A,那么你可以调整键盘仿真模式,知道能顺利的按下A后游戏能有反应!如果你觉得这样改麻烦,你可以在按键精灵界面上添加四个下拉框,这样看起来简单点!不过写起来有点麻烦,你们自己看着办吧!*/Delay 1500// 有些游戏需要这个延时,否则会导致某些游戏崩溃If dm_ret = 0 ThenMessageBox "绑定失败"ElseIf dm_ret = 1 ThenMessageBox "绑定成功"End Ifdm_ret = dm.Capture(0, 0, 2000, 2000, "screen.bmp")/* 上面这个是截图,截图成功后会保存到上面设置的路径:C:大漠测试后台自己根据需要修改路径!*/dm_ret = dm.UnBindWindow()/* 注意:如果是测试鼠标,可以将第48 行的截图换成鼠标移动点击,如果游戏中的按钮被点击到了,那么这个游戏就支持这种后台鼠标模式:dm.MoveTo x, ydm.LeftClick如果你是测试键盘,你可以将第48 行的截图换成键盘按键的命令:比如你游戏中某个功能的快捷键是A,A 的按键码是:65,那么:dm.KeyPress 65 如果你的键盘快捷键按下去,游戏有反应,那么,你的后台键盘就搞定了!。

  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();//找到了就退出app1DmABCDEFG_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;}dmCur =dm;return true;}void DmManger::Msg(char* Str,...){va_list args;va_start(args,Str);vsprintf(MsgBuf,Str,args);va_end(args);::MessageBoxA(0,MsgBuf,":",0);}bool DmManger::Execu(){for (auto i = node.begin() ;i!=node.end();i++) {(*i)->NodeDm=dmCur;// sleepFuc(DoAndDoTime);if (sleepFuc){(*i)->funcSleep = sleepFuc;}(*i)->Do();DoSleep();if ((*i)->break_whileFind){if ((*i)->IsFind){LastX =(*i)->X;LastY =(*i)->Y;Do_ImCreateABCDEFG_While_True(); return true;}}}return false;}bool DmManger::Execu(int DoAndDoTime_) {for (auto i = node.begin() ;i!=node.end();i++){(*i)->NodeDm=dmCur;if (sleepFuc){(*i)->funcSleep = sleepFuc;}(*i)->Do();DoAndDoTime =DoAndDoTime_;DoSleep();if ((*i)->break_whileFind || (*i)->break_whileNoFind) {if ((*i)->IsFind){LastX =(*i)->X;LastY =(*i)->Y;Do_ImCreateABCDEFG_While_True();return true;}}}return false;}void DmManger::AddDo(DmNode* node_){node.push_back(node_);}void DmManger::SetSleepFunc(SleepFunc fuc) {sleepFuc = fuc;}void DmManger::SetDoAndDo_Time(int time) {DoAndDoTime = time;}void DmManger::DoSleep(){if (sleepFuc){sleepFuc(DoAndDoTime);}}void DmManger::Reset(){node.clear();}void DmManger::MoveToLastXY(int OffX,int offY){DoSleep();dmCur->dm->MoveTo(LastX.lVal +OffX ,LastY.lVal+offY); DoSleep();dmCur->dm->LeftClick();DoSleep();}void DmManger::CreateWith_DmABCDEFG_ACTION(int type_,...) {NeedABCDEFG_WhileTrue =true;va_list va;va_start(va,type_);int typex=0;typex=va_arg(va,int);while (typex!=0){if (typex==双击){OutputDebugStringA("创建双击动作");std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG _ACTION());// DmABCDEFG_ACTION* pt->pt_=(new DmABCDEFG_ACTION());ptest->SetWay(typex);this->ADCDEFG_LIST.push_back( ptest);}else if (typex==单击){OutputDebugStringA("创建单击");// DmABCDEFG_ACTION* ptest= new DmABCDEFG_ACTION();std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG_A CTION());ptest->SetWay(typex);this->ADCDEFG_LIST.push_back( ptest);}else if (typex==偏移){OutputDebugStringA("创建偏移");std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG_A CTION());int x= va_arg(va,int);int y= va_arg(va,int);ptest->SetWay(typex,x,y);this->ADCDEFG_LIST.push_back( ptest);}else if (typex==输入文字){OutputDebugStringA("创建输入文字");std::shared_ptr<DmABCDEFG_ACTION> ptest( new DmABCDEFG_A CTION());char* szstr= va_arg(va,char*);ptest->SetWay(typex,szstr);this->ADCDEFG_LIST.push_back( ptest);}typex=va_arg(va,int);}va_end(va);}void DmManger::Do_ImCreateABCDEFG_While_True(){if (ADCDEFG_LIST.empty()==true){OutputDebugStringA("Do_ImCreateABCDEFG_While_True 字动作数组为空,直接返回");// IsFind =true;return;}for (auto i = ADCDEFG_LIST.begin() ;i!=ADCDEFG_LIST.end();i ++){std::shared_ptr<DmABCDEFG_ACTION> subnode =*i;//把找到图片后XY传给子动作以便做其他的事subnode->MangerX =LastX;subnode->MangerY =LastY;subnode->NodeDm =this->dmCur;subnode->DoABC();if (subnode->break_whileFind){if (subnode->IsFind){OutputDebugStringA("find sub");/*IsFind =true;*/}}DoSleep();}}不能运行请在Mydm.cpp里,Mydm::RegDM实现中,把if ( dm->Reg("改成你的大漠注册码","")!=1)DmABCDEFG_ACTION.cpp中void DmABCDEFG_ACTION::Do()里面输入文字那一段使用了LOL的窗口句柄,自己可以修改一下框架,很简单,+LONG类型成员即可代码需要C++11支持:vs2012以及更高的版本即可。

相关文档
最新文档