还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

MFC 获取并移动其他应用程序窗口的方法

来源:清泛原创     2016-10-26 09:19:03    人气:     我有话说( 0 人参与)

首先获取其他应用程序窗口句柄的方法有两种:1、FindWindow:用于获取应用程序的窗口句柄HWND FindWindow(LPCTSTR lpClassName, class...

首先获取其他应用程序窗口句柄的方法有两种:

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;
	}
}
这样指定窗口就可以随主程序启动而停靠了,效果如下:

FindWindow WindowFromPoint SetWindowPos

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: