首页,要说明几个概念:
- Win32 平台是 消息驱动模式
- .Net 框架是 事件驱动模式
- 标题所指的 “控制外部程序”,外部程序是指与本程序无内在相关性的另外一个程序
基于上面提到的,对于.NET的winform程序,在默认情况下(即未对接收消息的事件做自定义处理,说白了:就是没有 重写/覆写(override)窗体(Form)的DefWndProc 事件),.Net 的 winform 程序,是不响应所接收到的自定义消息的。
我们这里要讨论的内容,就分为两种情况:
- C#/.NET的程序,控制外部的 win32程序(win16不做考虑)
- C#/.NET的程序,控制外部的 .NET程序
从标题,大家也看到, C# 对外部程序的控制, 我们也分为两种情况来讨论:
- .NET 平台自带的 SendKeys 和 Process 结合的方式
- 完全利用 Windows API 的消息机制 的方式
一、.NET平台自带的 Process 和 SendKeys 结合的方式
本例子,用 C# 的一个Winform程序,创建一个指定路径的文本文件,写入某些内容后,并保存。
为了看清效果,将 Form 的 TopMost 设为 true
注: SendKeys 发送的按键的接收窗体,必须是当前的活动窗体
二、C# 利用 Windows API 控制 外部的 win32 程序
我们这里,用控制 “计算器”程序,算一个 3 + 2 = 5 的算式来做示例。
API 中我们要用到的函数有 FindWindow, FindWindowEx, SendMessage, SetForegroundWindow
对于API的引用方法,大家去看 API 手册,我这里提供一个VB自带的API查询程序
要使用API,需要引入命名空间
using System.Runtime.InteropServices;
下面的API引用部分的代码,放入 class 内部