admin

C#调用大漠插件实现QQ和微信模拟发送文本消息
前言是一款集前后台,文字识别,图色,键鼠,窗口,内存,DX,Call等功能于一身的综合插件。主要用于按键精灵、简单...
扫描右侧二维码阅读全文
04
2019/02

C#调用大漠插件实现QQ和微信模拟发送文本消息

776316-20181107185522591-1522314939.png

前言

是一款集前后台,文字识别,图色,键鼠,窗口,内存,DX,Call等功能于一身的综合插件。主要用于按键精灵、简单游、易语言等辅助制作工具,具有识别速度超级快的特点! 采用COM接口编写,适用于所有语言调用。

目前大漠的demo易语言和按键精灵很多,但是C#的例子却基本没有,前端时间需要开发一款模拟发送文本到QQ和微信上面,于是第一时间想到了大漠插件。大漠插件提供了COM版,直接注册到系统后即可在C#里面使用。

注册方法:https://jingyan.baidu.com/article/ea24bc39b052c6da62b33123.html

C#代码注册DLL文件

通过上面我们知道其实注册COM组件只是调用了CMD命令,那么我们可以直接封装到程序里面,让程序在每次启动的时候注册一次就可以了。

static string AutoRegCom(string strCmd)
{
    string rInfo;
    try
    {
        Process myProcess = new Process();
        ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe");
        myProcessStartInfo.UseShellExecute = 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;
    }
}

调用方法:

var regResult = AutoRegCom("regsvr32 -s dm.dll");

再在解决方案管理器->项目->添加引用->选择大漠插件的DLL(dm.dll)添加引用并实例化:

private static dmsoft _dmsoft = new dmsoft();

枚举查找QQ聊天窗口和微信聊天窗口

微信聊天窗口类名:ChatWnd
QQ聊天窗口类名:TXGuiFoundation
大漠插件中查找窗口的方法为:EnumWindow
具体实现如下:

var list = new List<int>();
list.AddRange(_dmsoft.EnumWindow(0, "", "TXGuiFoundation", 18).Split(',').Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => Convert.ToInt32(x)));
list.AddRange(_dmsoft.EnumWindow(0, "", "ChatWnd", 18).Split(',').Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => Convert.ToInt32(x)));
windInfoBindingSource.DataSource = list.Select(x => new WindInfo()
{
    Handle = x,
    ClassName = _dmsoft.GetWindowClass(x),
    Title = _dmsoft.GetWindowTitle(x),
}).ToList();

通过EnumWindow方法查找符合类名条件的所有窗口,并且获得窗口句柄、标题、类名然后存放到自定义的结构类当中。

绑定窗口并发送消息

  • 绑定窗口
  • 设置窗口为焦点窗口
  • 发送文本消息到窗口
  • 最小化窗口
  • 解绑窗口
foreach (var windInfo in w.Where(x => x.Enable))
{
    //绑定窗口,设置绑定模式
    _dmsoft.BindWindowEx(windInfo.Handle, "gdi", "windows", "windows", "", 0);
    Thread.Sleep(50);
    //设置窗口为可见模式并获取焦点
    _dmsoft.SetWindowState(windInfo.Handle, 1);
    _dmsoft.SetWindowState(windInfo.Handle, 8);
    Thread.Sleep(50);
    //根据窗口句柄发送文本消息
    _dmsoft.SendString2(windInfo.Handle, content);
    Thread.Sleep(200);
    //按下Enter键发送消息
    _dmsoft.KeyDown(13);
    _dmsoft.KeyUp(13);
    //设置窗口为最小化模式
    _dmsoft.SetWindowState(windInfo.Handle, 9);
    _dmsoft.SetWindowState(windInfo.Handle, 2);
    //解绑窗口
    _dmsoft.UnBindWindow();
}
  1. BindWindowEx为绑定窗口,具体的绑定模式参数可以参考大漠的官方文档。
  2. SetWindowState为设置窗口的状态(是否可见、最大化、最小化)。
  3. SendString2为发送文本到指定窗口。
  4. KeyDown、KeyUp根据虚拟键码按下或者弹起绑定窗口的按键。
  5. UnBindWindow解绑当前绑定窗口

总结

大漠插件作用于一些模拟鼠标、键盘以及窗口操作还是非常好用的,目前大漠插件从3.1235开始进行收费,上面例子中我使用的是3.1233版本。关于大漠插件和官方的说明文档我以及打包上传。
https://pan.baidu.com/s/1VJRdpl3scsLxbpxFAWZ_5A 提取码:mu25

Last modification:February 17th, 2019 at 02:19 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment