问一下C#怎么样对第三方程序的窗口进行各种操作

.Net技术 码拜 9年前 (2016-03-09) 2832次浏览
各位高手,本人是刚开始学者,所以可能问的问题很幼稚。麻烦不吝指点。
假设本人要在C#程序中对第三方程序的窗口进行各种操作,例如下面例子将“任务管理器窗口”前置并激活。
通过API函数的FindWindow函数,得到窗口句柄,然后调用SetForegroundWindow函数。
然而,本人又看到一篇文章标题为:Microsoft Win32 to Microsoft .NET Framework API Map。
https://msdn.microsoft.com/en-us/library/aa302340.aspx#win32map_windowfunctions
按照里面的对照,Win32的SetForegroundWindow和.NET Framework的System.Windows.Forms.Form.Activate是对应的。
本人的问题是:假如使用Form.Activate代替SetForegroundWindow,【这里应该填什么?】.Form.Activate();
另外一个问题是:像这样的问题,用什么百度关键字能找到答案呢?本人找了很久都无法找到,但本人又觉得本人的问题很简单,就是在C#怎么样对第三方程序的窗口进行各种操作。但确实搜索不到答案。
using System;
using System.Net;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
class Trade
{
// 查找主窗口
[DllImport(“user32.dll”, EntryPoint = “FindWindow”)]
private extern static IntPtr FindWindow(
string lpClassName,
string lpWindowName);

// 窗口最前
[DllImport(“user32.dll”)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

static void Main()
{
IntPtr maindHwnd = FindWindow(null, “任务管理器”);
SetForegroundWindow(maindHwnd);
//【这里应该填什么?】.Form.Activate();
}
}

解决方案

15

c#调用win api操作窗体
拿到窗口句柄后,其他操作都可以通过句柄来实现
文档说了是对应,可不是完全的替代

6

引用 2 楼 caibirdcnb的回复:
Quote: 引用 1 楼 xian_wwq 的回复:

c#调用win api操作窗体
拿到窗口句柄后,其他操作都可以通过句柄来实现
文档说了是对应,可不是完全的替代

谢谢回复。
这么说的话,本人想问一下另外的问题:
1. 假如想激活任务管理器并前置,能不能不使用DllImport实现?假如能,怎么样实现?
2. Form.Activate()这个方法的格式是什么? 例如,假如是窗体.Form.Activate(),那窗体应该是句柄还是标题还是其它什么呢?

外部窗口不能这么用。

1

获取句柄之后事情就简单了,不过本人所知都是用api操作,一般是发送seedmessage消息让窗口之前

1

顺便说一下,对第三方窗体的操作,基本可以用消息完成,

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明问一下C#怎么样对第三方程序的窗口进行各种操作
喜欢 (0)
[1034331897@qq.com]
分享 (0)