续上一篇,这一篇主要还是来写下SendMessage的一般可能会用到的操作。当然其中有些操作也可以用其他方式去实现。

上一篇我们在接收端做了Windows消息的自定义处理,所以我们可以更灵活的操作赋值,但是这都是基于我们自己写的程序,下面我们对第三方程序做一下简单的操作。

首先要指明一点,此操作都是基于句柄的,但是现在有很多程序的控件都是自绘的,所以是没有句柄的。

实现功能:

设置QQ窗口显示/隐藏(如果支持的化)设置QQ窗口最大化/最小化自定义设置QQ窗口的标题在输入控件中输入内容并回车

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

#region 设置窗口标题[DllImport("User32.dll")]
private static extern int SendMessage(int hWnd, int msg, int wParam, String lParam);const int WM_SETTEXT = 0x000C;
private void btnSetTitle_Click(object sender, EventArgs e)
{int handle = int.Parse(txtHandle.Text, System.Globalization.NumberStyles.AllowHexSpecifier);SendMessage(handle, WM_SETTEXT, 0, txtTitle.Text);
}#endregion#region 设置窗口显示隐藏
[DllImport("user32.dll")]
public static extern bool SendMessage(int hWnd, int msg, Boolean wParam, int lParam);const int WM_SHOWWINDOW = 0x18;private void btnShow_Click(object sender, EventArgs e)
{int handle = int.Parse(txtHandle.Text, System.Globalization.NumberStyles.AllowHexSpecifier);SendMessage(handle, WM_SHOWWINDOW, true, 0);
}private void btnHide_Click(object sender, EventArgs e)
{int handle = int.Parse(txtHandle.Text, System.Globalization.NumberStyles.AllowHexSpecifier);SendMessage(handle, WM_SHOWWINDOW, false, 0);
}#endregion#region 输入内容
/// <summary>
/// 查找子窗口句柄
/// </summary>
/// <param name="hwndParent"></param>
/// <param name="hwndChildAfter"></param>
/// <param name="lpszClass"></param>
/// <param name="lpszWindow"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern int FindWindowEx(int hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);[DllImport("User32.dll")]
private static extern int SendMessage(int hWnd, int msg, int wParam, int lParam);
const int WM_CHAR = 0x102;
private void button1_Click(object sender, EventArgs e)
{int handle = int.Parse(txtHandle.Text, System.Globalization.NumberStyles.AllowHexSpecifier);int textHandle = FindWindowEx(handle, IntPtr.Zero, "Edit", "");SendMessage(textHandle, WM_SETTEXT, 0, txtContent.Text);System.Threading.Thread.Sleep(1000);SendMessage(textHandle, WM_CHAR, 13, 0);}#endregion#region 最大最小化
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
const int WM_SYSCOMMAND = 0x112;
private void btnMax_Click(object sender, EventArgs e)
{int handle = int.Parse(txtHandle.Text, System.Globalization.NumberStyles.AllowHexSpecifier);SendMessage(handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}private void btnMini_Click(object sender, EventArgs e)
{int handle = int.Parse(txtHandle.Text, System.Globalization.NumberStyles.AllowHexSpecifier);SendMessage(handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
}
#endregion

实现效果:

以上句柄是我预先用SPY++抓好了的,也可以自己用FindWindow根据标题查找,由于QQ界面的渲染方式可能是动态的,所以这里设置标题实际是成功了的,可以看下图状态栏的名称。

还是上面写的问题,QQ没有输入框的句柄,所以输入这里我使用了记事本来实现效果,当然如果是winform程序,一般也是没问题的。更多的SendMessage的用法,大家也可以自行去百度。

由简入繁,拿来即用

更多精彩,请关注微信公众号:

C# 简单的操作其他程序相关推荐

  1. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

  2. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...

  3. c# dialogresult 选择文件_C#实战037:一个简单的入门应用程序NXPlug install

    前面通过一系列的NX二次开发已经基本完成了项目对NX的需求了,接着就是将插件打包给用户使用了.使用过程很简单只要将文件拷贝至任意目录并添加环境变量UGII_USER_DIR即可,为了方便一般都会放在N ...

  4. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  5. Scala入门到精通—— 第二节Scala基本类型及操作、程序控制结构

    本节主要内容 Scala基本类型 基本类型操作 Scala程序控制结构 Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in scala) 从上表中可以看出,S ...

  6. UNIX网络编程笔记(2):一个简单的时间获取程序

    这一讲通过一个简单的时间获取程序简单介绍套接字编程. 1.套接字API 1.1.套接字地址结构 上一讲中介绍了TCP的一些内容,知道了一个套接字对唯一标识了网络中的一个TCP连接,而一个套接字标识了一 ...

  7. 使用Express和MongoDB构建简单的CRUD应用程序

    by Zell Liew 由Zell Liew 使用Express和MongoDB构建简单的CRUD应用程序 (Building a Simple CRUD Application with Expr ...

  8. Spring Security(一):最简单的Spring Security程序

    一:简介 权限管理常用的有Apache Shiro和Spring Security, Apache Shiro简单易用,Spring Security集成复杂,但功能强大,可以与Spring的其它框架 ...

  9. Vulkan是什么?和我一起完成一个简单的Vulkan应用程序

    在本章,你将学到: Vulkan以及它背后的基本原理: 如何创建一个最简单的Vulkan应用程序: 在本书其余部分将使用到的术语和概念. 本章将介绍并解释Vulkan是什么.我们会介绍API背后的基本 ...

最新文章

  1. IOS 笔试题(二)
  2. 原来 Kubernetes 部署如此简单,看完全明白了
  3. 算术运算的RTL代码规则总结
  4. python里的体格是啥r_numpy.数组形状(R,1)和(R,)之间的差异
  5. 栈的动态顺序存储和实现(C语言)【栈】(7)
  6. python sanic加速_python微服务sanic 使用异步zipkin(2) - 一步步创建Sanic插件: sanic-zipin...
  7. 三值的排序 Sorting a Three-Valued Sequence
  8. Yii 框架学习--01 框架入门
  9. 如何使用ZBrush和3DMAX雕刻一个百夫长?
  10. 快速解码base64和utf-8的ASCII编码和URL解码
  11. java socket gui登录_java的socket服务端的GUI
  12. 浙大计算机硕士比本科985,二本出身的985研究生与985本科生,哪个更厉害?网友:差的太多!...
  13. mysql数据库恢复策略_MySQL 备份和恢复策略(一)
  14. SpringBoot番外篇(一):使用Spring Initializer快速创建Spring Boot项目(IDEA版)
  15. Exchange server 2010系列教程之四 如何卸载exchange server 2010
  16. 《C++ 进阶心法》书籍修正记录
  17. NV12等常用YUV数据格式
  18. svc android,安卓svc命令使用总结
  19. 网络安全常用的主流数据库(DBMS)✍
  20. 四芯水晶头电话线的接法

热门文章

  1. 数字化转型巨浪拍岸,成长型企业如何“渡河”?
  2. Backgrounds(背景)
  3. Linux对显卡驱动相关操作后,重启进不去图形界面,左上角一个横杠在闪
  4. 第四次作业类测试代码+108+曾宏宇
  5. oracle 获取每周五,Oracle获取周几以及每周对应得开始日期和结束日期
  6. R语言ineq算基尼系数_科学网—一招搞定泰尔指数及其分解 - 王庆喜的博文
  7. 这简直是无敌好嘛!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说三合一
  8. numpy.sum中axis参数用法解析
  9. 【Arcgis水文分析】使用DEM数据提取流域水系
  10. thinkphp集成银联网关支付简单实例