在C#中使用 SendMessage 实现操作外部其他程序上的控件教程

  • 在C#中使用 SendMessage 实现操作外部其他程序上的控件教程已关闭评论
  • 313 次浏览
  • A+
所属分类:.NET技术
摘要

本案例使用的是c# winform .NET Framework 4.7.2首先我们声明一个寻找窗体的函数 然后我们调用此函数去寻找要操作的窗体程序


一、C#代码实现

本案例使用的是c# winform .NET Framework 4.7.2

首先我们声明一个寻找窗体的函数

[DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

然后我们调用此函数去寻找要操作的窗体程序

 

IntPtr ParenthWnd = new IntPtr(0); ParenthWnd = YSQ.FindWindow(null, "123");

在C#中使用 SendMessage 实现操作外部其他程序上的控件教程

第一个参数是窗体的类名、第二个参数是窗体的标题,二者必须要有一个。这里推荐vs自带的 spy++ 工具查看窗体参数

然后我们再声明一个寻找窗体里按钮的函数

[DllImport("User32.dll", EntryPoint = "FindWindowEx")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName); 

 参数说明:

hwndParent
 主窗体句柄、第一步调用 FindWindow 函数返回的值
hwndChildAfter
 子窗体的句柄,可空
lpClassName
要寻找的控件的类名
lpWindowName
要寻找的控件的标题

然后我们调用此函数寻找窗体里的 “连接” 按钮。

IntPtr btnPtr = YSQ.FindWindowEx(ParenthWnd, IntPtr.Zero, "Button", "连接"); YSQ.PostMessage(btnPtr, 0x201, 0, 0); YSQ.PostMessage(btnPtr, 0x202, 0, 0); textBox1.AppendText($"点击【连接】按钮,按钮句柄:{btnPtr}rnrn");

然后我们还需要定义一个给窗体发送消息的函数

 

[DllImport("User32.Dll", EntryPoint = "PostMessageA")] public static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam); 

 

然后调用 PostMessage 函数发送鼠标按下的消息

YSQ.PostMessage(btnPtr, 0x201, 0, 0); YSQ.PostMessage(btnPtr, 0x202, 0, 0);

 

//按下鼠标左键
WM_LBUTTONDOWN = 0x201
//释放鼠标左键
WM_LBUTTONUP = 0x202

更多函数代码请移步MSDN官网查看

这样就实现了点击其他程序里的按钮操作!

  

 

github:https://github.com/2629180692
博客园:http://www.cnblogs.com/wurendao
完成日期 ©2020-02-10 无人岛
遇到什么问题欢迎到下面评论里提出或者联系我哦!

【转载文章务必保留出处和署名,谢谢!】