[C#]窗口的一些简单操作
2015-12-31 17:06
543 查看
【前言】因为最近要做一个设计到窗口的项目,所以开始整理关于窗口的资料。
第一、获取当前最顶层的窗口
————GetForegroundWindow
————函数功能:获取一个前台窗口的句柄(窗口与用户当前的工作)。该系统分配给其他线程比它的前台窗口的线程创建一个稍微更高的优先级
————函数原型:HWND GetForegroundWindow(void);
————返回值:返回值是一个前台窗口的句柄。在某些情况下,如一个窗口失去激活时,前台窗口可以是[b]NULL。[/b]
————C#声明:[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
第二、根据句柄获取相关信息
————GetWindowText
————该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控件,则拷贝控件的文本。但是,GetWindowText不能接收其他应用程序中控件的文本。
————函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);
————实例:
————[b]GetClassName[/b]
————该函数获得指定窗口所属的类的类名。
————[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName,int nMaxCount);
————实例:
我们都知道微软.Net中,C# 是用来开发网络解决方案的首先语言。但是在胖客户端,C# 同样有着出色的表现。对那些熟悉 Win32 API 的程序员来说,关键是如何将 C# 的新特性与 Win32 API 融合在一起。
下面例子说明如何在 C# 中调用 Win32 API - EnumWindows 枚举所有窗口:
1.首先需要声明一个委托函数用于 Win32 API - EnumWindows 的回调函数:
public delegate bool CallBack(int hwnd, int lParam);
2.然后利用 C# 中的平台调用声明从 USER32.DLL 库中调用 API - EnumWindows,具体参数请参考 MSDN - Win32 API。
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
3.最后实例化委托,调用 EnumWindows。
CallBack myCallBack = new CallBack(EnumWindowsApp.Report);
4.完全代码如下:
using System;
using System.Runtime.InteropServices;
public delegate bool CallBack(int hwnd, int lParam);
public class EnumWindowsApp
{
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
public static void Main()
{
CallBack myCallBack = new CallBack(EnumWindowsApp.Report);
EnumWindows(myCallBack, 0);
}
public static bool Report(int hwnd, int lParam)
{
[b]Console.Write("Window handle is :");
Console.WriteLine(hwnd);
return true;
}
}
第三、把隐藏的窗口置前
第一、获取当前最顶层的窗口
————GetForegroundWindow
————函数功能:获取一个前台窗口的句柄(窗口与用户当前的工作)。该系统分配给其他线程比它的前台窗口的线程创建一个稍微更高的优先级
————函数原型:HWND GetForegroundWindow(void);
————返回值:返回值是一个前台窗口的句柄。在某些情况下,如一个窗口失去激活时,前台窗口可以是[b]NULL。[/b]
————C#声明:[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
第二、根据句柄获取相关信息
————GetWindowText
————该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控件,则拷贝控件的文本。但是,GetWindowText不能接收其他应用程序中控件的文本。
————函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);
————实例:
[DllImport(
"user32.dll"
)]
————[b]GetClassName[/b]
————该函数获得指定窗口所属的类的类名。
————[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName,int nMaxCount);
————实例:
我们都知道微软.Net中,C# 是用来开发网络解决方案的首先语言。但是在胖客户端,C# 同样有着出色的表现。对那些熟悉 Win32 API 的程序员来说,关键是如何将 C# 的新特性与 Win32 API 融合在一起。
下面例子说明如何在 C# 中调用 Win32 API - EnumWindows 枚举所有窗口:
1.首先需要声明一个委托函数用于 Win32 API - EnumWindows 的回调函数:
public delegate bool CallBack(int hwnd, int lParam);
2.然后利用 C# 中的平台调用声明从 USER32.DLL 库中调用 API - EnumWindows,具体参数请参考 MSDN - Win32 API。
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
3.最后实例化委托,调用 EnumWindows。
CallBack myCallBack = new CallBack(EnumWindowsApp.Report);
4.完全代码如下:
using System;
using System.Runtime.InteropServices;
public delegate bool CallBack(int hwnd, int lParam);
public class EnumWindowsApp
{
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
public static void Main()
{
CallBack myCallBack = new CallBack(EnumWindowsApp.Report);
EnumWindows(myCallBack, 0);
}
public static bool Report(int hwnd, int lParam)
{
[b]Console.Write("Window handle is :");
Console.WriteLine(hwnd);
return true;
}
}
第三、把隐藏的窗口置前
相关文章推荐
- 将c#的程序设置成服务
- C# 格式字符串的格式项
- c#一些常用的方法集合
- 一小时学会C# 6
- c#根据ip获取城市地址
- C# String类常用的方法的使用
- c#动态加载dll文件
- .net C#发送邮件
- 利用C#进行Socket通信编程
- 扩展方法
- C#反射是什么
- VisualC# winform窗体应用程序 语句加this有的怎么不加?
- (转)C#根据当前时间获取周,月,季度,年度等时间段的起止时间
- C#一个简单下载程序实例(可用于更新)
- C# 写XML格式的字符串 (是否保存到硬盘)
- C#.Net操作XML方法二
- 说说C#的async和await
- C# winform 程序中响应键盘事件
- 装箱与拆箱
- 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel