mfc获取其它程序窗口句柄

该博客介绍了如何在MFC中通过EnumWindows和EnumChildWindows函数获取其他程序的窗口句柄,并比较窗口标题,特别针对名为'waw.exe'的窗口进行了示例操作。主要函数包括获取窗口标题的getWindowTitle,比较两个字符串的equal,以及显示消息框的show。在OnBnClickedOk事件中调用了EnumWindows遍历顶层窗口,寻找特定标题的窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const char *getWindowTitle(HWND hWnd){
	char WindowTitle[1000]={0};      
    ::GetWindowText(hWnd,WindowTitle,1000);  
	 std::string *title = new std::string(WindowTitle);
	 return (*title).c_str();
}
bool equal(const char *a, const char *b){
	return strcmp(a, b) == 0;
}
void show(const char *message){
	AfxMessageBox(message);
}
  
//EnumChildWindows回调函数,hwnd为指定的父窗口  
BOOL CALLBACK EnumChildWindowsProc(HWND hWnd,LPARAM lParam)  
{  
    char WindowTitle[1000]={0};      
    ::GetWindowText(hWnd,WindowTitle,1000);  
    printf("%s\n",WindowTitle);  

	if(equal( getWindowTitle(GetParent(hWnd)), getWindowTitle(hWnd))){
		//show(WindowTitle);
	}
	
    return true;     
}  
  
//EnumWindows回调函数,hwnd为发现的顶层窗口  
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)  
{  
    if (GetParent(hWnd)==NULL && IsWindowVisible(hWnd) )  //判断是否顶层窗口并且可见  
    {  
        const char *WindowTitle = getWindowTitle (hWnd); 
		
        EnumChildWindows(hWnd,EnumChildWindowsProc,NULL); //获取父窗口的所有子窗口  
		if(equal(WindowTitle, "waw.exe")){
			show(WindowTitle);
			return false;
		}
    }  
      
    return true;     
}  

void CwawWithLogDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
// CDialogEx::OnOK();
   EnumWindows(EnumWindowsProc ,NULL );  
}
在Microsoft Foundation Classes (MFC)库中,可以使用各种方法来获取当前控件窗口句柄。这通常涉及到使用MFC的消息映射机制和控件的消息处理函数。 一种常见的方法是使用控件的窗口过程函数(通常是一个名为`WndProc`的函数)来获取当前控件窗口句柄。在MFC中,控件通常通过发送特定的消息来与应用程序进行交互,这些消息会被映射到窗口过程函数进行处理。通过在窗口过程函数中获取相应的消息参数,你可以获得当前控件窗口句柄。 下面是一个简单的示例,展示如何使用MFC获取当前控件窗口句柄: ```cpp void CYourClass::OnYourMessage() { // 检查是否接收到特定的控件消息 if (WM_YOUR_MESSAGE_TYPE == LOWORD(lParam)) { // 获取当前控件窗口句柄 HWND hwnd = GetWindow(GW_CHILD, NULL); while (hwnd != NULL) { if (hwnd == GetDlgItem(m_hWnd, IDC_YOUR_CONTROL)) // 检查是否是我们要找的控件 { // 找到了,处理它 // TODO: 在这里添加你需要的代码 break; } hwnd = GetNextWindow(hwnd, GW_HWNDNEXT); // 继续查找下一个控件窗口 } } else { // 其他类型的消息,处理它们... } } ``` 在这个示例中,`WM_YOUR_MESSAGE_TYPE`应该被替换为你想要处理的特定控件消息的类型。`GetDlgItem(m_hWnd, IDC_YOUR_CONTROL)`用于获取指定控件的句柄。这个例子中的`IDC_YOUR_CONTROL`需要替换为你的实际控件ID。`GetWindow(GW_CHILD, NULL)`用于获取当前控件窗口的第一个子窗口句柄。如果需要获取其他子窗口句柄,可以使用`GetNextWindow(hwnd, GW_HWNDNEXT)`函数进行遍历。 请注意,上述代码仅作为一个示例,实际使用时可能需要根据具体情况进行修改和调整。另外,确保在处理控件消息之前已经正确地创建和初始化了相应的控件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值