得到窗口句柄的方法

本文介绍了多种获取窗口句柄的方法,包括直接获取如GetActiveWindow()等,通过枚举方式如FindWindowEx(),以及根据特定参数如进程ID来获取句柄的过程。还提供了示例代码说明如何使用枚举函数来获取所有窗口。

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

   1、直接得句柄

        GetActiveWindow();        //得激活窗口句柄

        GetForegroundWindows();           //的前台窗口句柄

       AfxGetApp()->GetMainWnd()->GetSafeHwnd()      //很常规的,涉及到很多方法

2、枚举型的

     HWND GetWindow(      
     HWND hWnd,
     UINT uCmd );                 //要先有hWnd,然后指明uCmd 的关系

HWND FindWindowEx(      
     HWND hwndParent,
     HWND hwndChildAfter,
     LPCTSTR lpszClass,
     LPCTSTR lpszWindow);         //由类名和窗口标题得句柄,可能不只一个,所以不唯一确定

3、其他参数的句柄

     进程ID:

    MARK:由句柄得ID可以用GetWindowThreadProcessId()

    而由ID的句柄只能枚举+比较了

历遍全部窗体,并取得他们对应的HWND进一步取得对应PID,符合已知PID的就是了,当然可能要判断一下窗体状态了,如果进程只有一个窗体那就不用了。

例:
如果要在列表框里显示所有的窗口
BOOL CALLBACK EnumWindowsProc(
   HWND hwnd,       // handle to parent window
   LPARAM lParam    // application-defined value
)
{
char lpWinTitle[256];  
::GetWindowText(hwnd,lpWinTitle,256-1);  
CString m_strTitle;
m_strTitle.Format("%s",lpWinTitle);
CListBox *p_l = (CListBox *)lParam;
if (!m_strTitle.IsEmpty())
{
   p_l->AddString(lpWinTitle);
}
return TRUE;
}

调用EnumWindows(EnumWindowsProc, (LPARAM)GetDlgItem(IDC_LIST1));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值