(不通过GetWindowText可以吗?)
FindWindow
GetDlgItemText
如果不同进程,需要VirtualAllocEx在对方进程中申请一段
SendMessage后ReadProcessMemory
FindWindow
之后用SendMessage就行了
可以自定义属性,通过SetProp设定
然后GetProp判断,如果名字重复的话
FromHandle()
GetLastActivePopup
The GetLastActivePopup function determines which pop-up window owned by the specified window was most recently active.
HWND GetLastActivePopup(
HWND hWnd // handle to owner window
);
哪个窗口弹出MessageBox(),哪个就是它的owern
::GetLastActivePopup好像是不行的,以下是一段测试代码,如果得到LastActivePopup的handle不是对话框本身,则关闭这个窗口。但是从来没有真正执行过。
void CTestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
MessageBox("Test");
HWND hWnd=::GetLastActivePopup(this->m_hWnd);//这里设置了断点1,每次WM_TIMER时都会响应
if(hWnd!=this->m_hWnd)
::DestroyWindow(hWnd);//这里设置了断点2,但是从来没有经过这里
CDialog::OnTimer(nIDEvent);
}
继续关注这个话题
MessageBox("Test")返回之后窗口已经不存在了吧。还能通过GetLastActivePopup取得吗?
还有,如果你的CTestDlg不是顶级窗口的话,GetLastActivePopup永远返回自己的hWnd。
所以说在单线程的情况下使用MessageBox是无法用GetLastActivePopup获得HWND的,但是如果是多窗口的程序,使用GetLastActivePopup是能得到最近活动的窗口HANDLE的