Windows API
Windows 这个多作业系统除了谐和应用程序的实行、分派内存、治理资本…以外, 它同时也是一个很大的效劳中心,挪用这个效劳中心的种种效劳(每一种效劳就是一个函数),能够帮应用程式到达开启视窗、描写图形、运用周边设备等目标,因为这些函数效劳的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
GetDesktopWindow
函数功用:该函数返回桌面窗口的句柄。桌面窗口掩盖全部屏幕。桌面窗口是一个要在其上绘制一切的图标和其他窗口的地区。
函数原型:HWND GetDesktopWindow(VOID)
参数:无。
返回值:函数返回桌面窗口的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本:;
头文件:Winuser.h;库文件:user32.lib。
【声明】
vb
Public Declare Function GetDesktopWindow Lib “user32” Alias “GetDesktopWindow” () As Long
vb_net
Public Declare Function GetDesktopWindow Lib “user32” Alias “GetDesktopWindow” () As Integer
c#
[DllImport(“user32.dll”, EntryPoint = “GetDesktopWindow”, CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr GetDesktopWindow();
【申明】
获得代表全部屏幕的一个窗口(桌面窗口)句柄
【返回值】
Long,桌面窗口的句柄
获得桌面一切窗口句柄的要领
建立项目
API导入
GetDesktopWindow
/// <summary>
/// 该函数返回桌面窗口的句柄。桌面窗口掩盖全部屏幕。桌面窗口是一个要在其上绘制一切的图标和其他窗口的地区。
/// 【申明】获得代表全部屏幕的一个窗口(桌面窗口)句柄.
/// </summary>
/// <returns>返回值:函数返回桌面窗口的句柄。</returns>
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr GetDesktopWindow();
GetWindow
/// <summary> /// 该函数返回与指定窗口有特定关联(如Z序或一切者)的窗口句柄。 /// 函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd); /// </summary> /// <param name="hWnd">窗口句柄。要获得的窗口句柄是根据nCmd参数值相对于这个窗口的句柄。</param> /// <param name="uCmd">申明指定窗口与要获得句柄的窗口之间的关联。该参数值参考GetWindowCmd罗列。</param> /// <returns>返回值:假如函数胜利,返回值为窗口句柄;假如与指定窗口有特定关联的窗口不存在,则返回值为NULL。 /// 若想获得更多错误信息,请挪用GetLastError函数。 /// 备注:在轮回体中挪用函数EnumChildWindow比挪用GetWindow函数牢靠。挪用GetWindow函数完成该使命的应用程序可能会堕入死轮回或退回一个已被烧毁的窗口句柄。 /// 速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。 /// </returns> [DllImport("user32.dll", SetLastError = true)] static extern IntPtr GetWindow(IntPtr hWnd, GetWindowCmd uCmd);
GetWindowCmd
/// <summary> /// 窗口与要获得句柄的窗口之间的关联。 /// </summary> enum GetWindowCmd : uint { /// <summary> /// 返回的句柄标识了在Z序最高端的雷同范例的窗口。 /// 假如指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口; /// 假如指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口: /// 假如指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。 /// </summary> GW_HWNDFIRST = 0, /// <summary> /// 返回的句柄标识了在z序最低端的雷同范例的窗口。 /// 假如指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口: /// 假如指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口; /// 假如指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。 /// </summary> GW_HWNDLAST = 1, /// <summary> /// 返回的句柄标识了在Z序中指定窗口下的雷同范例的窗口。 /// 假如指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口: /// 假如指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口; /// 假如指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。 /// </summary> GW_HWNDNEXT = 2, /// <summary> /// 返回的句柄标识了在Z序中指定窗口上的雷同范例的窗口。 /// 假如指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口; /// 假如指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口; /// 假如指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。 /// </summary> GW_HWNDPREV = 3, /// <summary> /// 返回的句柄标识了指定窗口的一切者窗口(假如存在)。 /// GW_OWNER与GW_CHILD不是相对的参数,没有父窗口的寄义,假如想得到父窗口请运用GetParent()。 /// 比方:比方偶然对话框的控件的GW_OWNER,是不存在的。 /// </summary> GW_OWNER = 4, /// <summary> /// 假如指定窗口是父窗口,则获得的是在Tab序顶端的子窗口的句柄,否则为NULL。 /// 函数仅搜检指定父窗口的子窗口,不搜检继承窗口。 /// </summary> GW_CHILD = 5, /// <summary> /// (WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状况弹出式窗口(检索运用第一个由GW_HWNDNEXT 查找到的满足前述前提的窗口); /// 假如无使能窗口,则获得的句柄与指定窗口雷同。 /// </summary> GW_ENABLEDPOPUP = 6 } /*GetWindowCmd指定效果窗口与源窗口的关联,它们建立在下述常数基础上: GW_CHILD 寻觅源窗口的第一个子窗口 GW_HWNDFIRST 为一个源子窗口寻觅第一个兄弟(同级)窗口,或寻觅第一个顶级窗口 GW_HWNDLAST 为一个源子窗口寻觅末了一个兄弟(同级)窗口,或寻觅末了一个顶级窗口 GW_HWNDNEXT 为源窗口寻觅下一个兄弟窗口 GW_HWNDPREV 为源窗口寻觅前一个兄弟窗口 GW_OWNER 寻觅窗口的一切者 */
编写要领
/// <summary> /// 获得桌面一切窗口句柄的要领 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { dataGridView1.Rows.Clear(); //1、猎取桌面窗口的句柄 IntPtr desktopPtr = GetDesktopWindow(); //2、获得一个子窗口(这通常是一个顶层窗口,当前运动的窗口) IntPtr winPtr = GetWindow(desktopPtr, GetWindowCmd.GW_CHILD); //3、轮回获得桌面下的一切子窗口 while (winPtr != IntPtr.Zero) { //4、继承猎取下一个子窗口 winPtr = GetWindow(winPtr, GetWindowCmd.GW_HWNDNEXT); } }
以上就是C# WindowsAPI应用之GetDesktopWindow-获得桌面一切窗口句柄的要领详解的细致内容,更多请关注ki4网别的相干文章!