获得指定位置的窗体及窗体里面控件的ID

2017-02-11 20:16:41  访问(3499) 赞(0) 踩(0)


相关下载:eKDemo.exe.zip  eKDemo.zip     


// 获得顶父窗体的HWND
HWND CeKDemoDlg::GetTopParentHWND(HWND _hWnd)
{
	HWND theResult = _hWnd;

	if(theResult == NULL)
		return theResult;

	HWND pW = NULL;

	while(theResult !=NULL)
	{
		pW= ::GetParent(theResult);

		if(pW == NULL)
			return theResult;

		theResult = pW;
	}

	return NULL;
}

// 获得窗体的控件名称 //
CString CeKDemoDlg::PrintCtrlName(CString layer,HWND _hWnd)
{
	if(_hWnd==NULL)
		return ""; 

	CString str;


	//获取窗体_hWnd的子窗体  
	HWND hChildWnd = ::GetWindow(_hWnd, GW_CHILD);  
	while(hChildWnd!=NULL)  
	{  
		//获取窗口类名  
		char szClassName[MAX_PATH];  
		::GetClassName(hChildWnd, szClassName, MAX_PATH);  

		CString strOne;

		strOne.Format("%s",szClassName);

		if(szClassName)
		{			
			str+= "\r\n";
			str += layer;
			str += strOne;
		}

		try
		{
			str += " |输出内容|==> ";

			char szText[MAX_PATH];  

			::SendMessage(hChildWnd,WM_GETTEXT,(WPARAM)MAX_PATH,(LPARAM)szText);  

			str += szText;
		}
		catch(CUserException ex)
		{
		}


		CString subStr = PrintCtrlName(layer+"--",hChildWnd);

		if(subStr)
		{
			str += subStr;
		}

		//继续访问下一个子窗体  
		hChildWnd = ::GetNextWindow(hChildWnd, GW_HWNDNEXT); 

	} 

	
//WinAPI: GetWindow - 获取与指定窗口具有指定关系的窗口的句柄
//
////声明:
//GetWindow(
//  hWnd: HWND; {指定的窗口句柄}
//  uCmd: UINT  {指定的关系选项}
//): HWND;      {失败返回0; 成功返回符合的窗口句柄}
//
////uCmd 可选值:
//GW_HWNDFIRST = 0; {同级别第一个}
//GW_HWNDLAST  = 1; {同级别最后一个}
//GW_HWNDNEXT  = 2; {同级别下一个}
//GW_HWNDPREV  = 3; {同级别上一个}
//GW_OWNER     = 4; {属主窗口}
//GW_CHILD     = 5; {子窗口}


	return str;
}

void CeKDemoDlg::OnBnClickedButtonWindowfrompoint()
{
	// TODO: 在此添加控件通知处理程序代码


	POINT p;
	p.x = 200;
	p.y = 200;

	HWND _hWnd=::WindowFromPoint(p);
	// HWND _hWnd=::FindWindow(_T("WindowsFormsApplication1"),NULL);  


	if(_hWnd==NULL)
	{
		AfxMessageBox(_T("没有获得窗体"));
		return;
	}

	// AfxMessageBox(_T("OK"));


	_hWnd = GetTopParentHWND(_hWnd);

	if(_hWnd == NULL)
	{
		AfxMessageBox(_T("获得顶窗体失败"));
		return;
	}

	TCHAR title[MAX_PATH];

	// 获得窗体标题 //
	::GetWindowText(_hWnd,title,MAX_PATH);

	CString strTitle = title;

	AfxMessageBox(strTitle);

}

void CeKDemoDlg::OnBnClickedButtonOne()
{
	// TODO: 在此添加控件通知处理程序代码
	POINT p;
	p.x = 200;
	p.y = 200;

	HWND _hWnd=::WindowFromPoint(p);
	// HWND _hWnd=::FindWindow(_T("WindowsFormsApplication1"),NULL);  


	if(_hWnd==NULL)
	{
		AfxMessageBox(_T("没有获得窗体"));
		return;
	}

	// AfxMessageBox(_T("OK"));


	_hWnd = GetTopParentHWND(_hWnd);

	if(_hWnd == NULL)
	{
		AfxMessageBox(_T("获得顶窗体失败"));
		return;
	}

	CString str = PrintCtrlName("",_hWnd);

	CTextBoxResultDialog fd;

	fd.ResultTextSet(str);

	fd.DoModal();


}


标签:获得指定位置的窗体及窗体里面控件的ID 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)