[C#]窗口的一些简单操作

来源:互联网 发布:深圳市行知实验小学 编辑:程序博客网 时间:2024/06/05 15:30

【前言】因为最近要做一个设计到窗口的项目,所以开始整理关于窗口的资料。


第一、获取当前最顶层的窗口

————GetForegroundWindow

————函数功能:获取一个前台窗口的句柄(窗口与用户当前的工作)。该系统分配给其他线程比它的前台窗口的线程创建一个稍微更高的优先级

————函数原型:HWND GetForegroundWindow(void);

————返回值:返回值是一个前台窗口的句柄。在某些情况下,如一个窗口失去激活时,前台窗口可以是NULL

————C#声明:[DllImport("user32.dll")]
  private static extern IntPtr GetForegroundWindow();



第二、根据句柄获取相关信息

————GetWindowText

————该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控件,则拷贝控件的文本。但是,GetWindowText不能接收其他应用程序中控件的文本。

————函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);
————实例:[DllImport("user32.dll")]
public extern static int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);搜索
StringBuilder s = new StringBuilder(512);                              
int i = GetWindowText(this.Handle, s, s.Capacity); //把this.handle换成你需要的句柄                
MessageBox.Show(s.ToString());


————GetClassName

————该函数获得指定窗口所属的类的类名。

————[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)

{


Console.Write("Window handle is :");

Console.WriteLine(hwnd);

return true;

}

}



第三、把隐藏的窗口置前







0 0