MFC 获取并移动其他应用程序窗口的方法
清泛原创
首先获取其他应用程序窗口句柄的方法有两种:
1、FindWindow(用于获取应用程序的窗口句柄)
1、FindWindow(用于获取应用程序的窗口句柄)
HWND FindWindow(
LPCTSTR lpClassName, // class name,窗口的类名称
LPCTSTR lpWindowName // window name,窗口标题名称
);
使用时,两者只要知道一个就可以定位到你想要的窗口上了,若两个参数都为NULL,则搜索所有启动的进程,这里,为了获取应用程序的窗口信息,可以使用Spy++(微软vs自带工具,没有的话请自行下载),这个软件很好用,可以获得窗口类名称,标题等信息(还可以监视窗口消息)。
//FindWindowEx:用于获取应用程序中指定子窗口的句柄
HWND FindWindowEx(
HWND hwndParent, // handle to parent window,应用程序窗口句柄
HWND hwndChildAfter, // handle to child window,子窗口的句柄
LPCTSTR lpszClass, // class name,子窗口类
LPCTSTR lpszWindow // window name,子窗口标题
);
2、WindowFromPoint:利用WindowFromPoint函数得到指定坐标点所在的窗口句柄,这种方法不依赖窗口信息。
void CDlgSpy::OnMouseMove(UINT nFlags, CPoint point)
{
POINT pnt;
::GetCursorPos(&pnt);
HWND hwndCur = ::WindowFromPoint(pnt);
//...
}
其次,得到窗口句柄后移动窗口的方法:
//等待启动完毕
HWND hMain = NULL;
while(1)
{
if (hMain = ::FindWindow(NULL, "窗口标题"))
{
CRect rect, rectDlg;
pMainFrame->GetWindowRect(&rect);
::GetWindowRect(hMain, rectDlg);
::SetWindowPos(hMain, NULL, rect.right-10, rect.top, rectDlg.Width(), rectDlg.Height(), SWP_SHOWWINDOW | SWP_NOSIZE);
break;
}
}
这样指定窗口就可以随主程序启动而停靠了,效果如下: