c#获取窗口句柄后 如何遍历所有控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#获取窗口句柄后 如何遍历所有控件相关的知识,希望对你有一定的参考价值。

参考技术A 两种办法.
FindWindow得到句柄之后:
1.通过FindWindowEx得到控件句柄,这个有层次限制
2.通过EnumWindows遍历所有控件得到控件句柄

根据获取的窗口句柄遍历窗口Edit控件

网上说遍历窗口控件有两种方法:
1),使用EnumChildWindows,没有深究,
2),使用::FindWindowEx和GetWindow组合
下面只说第二种方法,
首先根据标题获取窗口的句柄,
HWND hWnd=::FindWindow(NULL,“zhang001”);
      findwindow原型:
   FindWindow(
      lpClassName,        {窗口的类名}
      lpWindowName: PChar {窗口的标题}
    ): HWND;              {返回窗口的句柄; 失败返回 0}
根据窗口句柄获取窗口上的一个Edit控件,
HWND hChild = ::FindWindowEx(hWnd,NULL,_T("Edit"),NULL);
//FindWindowEx 比 FindWindow 多出两个句柄参数:
FindWindowEx(
  Parent: HWND;     {要查找子窗口的父窗口句柄}
  Child: HWND;      {子窗口句柄}
  ClassName: PChar; {}
  WindowName: PChar {}
): HWND;
{
如果 Parent 是 0, 则函数以桌面窗口为父窗口, 查找桌面窗口的所有子窗口;
如果  是 HWND_MESSAGE, 函数仅查找所有消息窗口;
子窗口必须是 Parent 窗口的直接子窗口;
如果 Child 是 0, 查找从 Parent 的第一个子窗口开始;
如果 Parent 和 Child 同时是 0, 则函数查找所有的顶层窗口及消息窗口.
}
这样可以获取窗口上的第一个Edit控件,第几个控件应该是以ID的大小编号的

要根据第一个Edit控件找到下一个Edit控件,使用GetWindow。
Getwindow的函数原型如下:
函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd);
 
  参数:
 
  hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。
 
  nCmd:说明指定窗口与要获得句柄的窗口之间的关系。  
GetWindow()具体的使用方法见:http://blog.163.com/[email protected]/blog/static/1384137482014684254551/
hChild = ::GetWindow(h,GW_HWNDNEXT);//获取窗口的下一个控件

HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件   
 while(hwndChild)   
 {   
  .....
  .....
  hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);   
 }

以上是关于c#获取窗口句柄后 如何遍历所有控件的主要内容,如果未能解决你的问题,请参考以下文章

C#获取当前窗体句柄及该窗体里的信息

主窗口中如何获取子窗口某控件句柄?

根据获取的窗口句柄遍历窗口Edit控件

如何获取控件句柄 vc

vb2013 已获得主窗口句柄,怎么遍历所有子窗句柄到TreeView中?

MFC中怎样获取指定窗口的句柄