`

VC++: 在双显示器间,移动最大化的窗口

阅读更多

最近升级成了双显示器,

以前只是知道双显示器爽,但用过之后才知道,原来这么爽。

 

然而美中不足,我也发现了一点小问题,就是我经常有这样一个需求:

有一个程序,已经被最大化了,我要将它从一个显示器移动到另一个显示器上面,同时仍然保持最大化。

 

以前要完成这个事情,我需要首先将此程序还原,移动到另一个显示器,再将其最大化。

这回的目的就是将这一系列繁琐的过程自动化掉。 使用VC++ 2008实现。

程序的功能是只要一运行它,就将当前的活动窗口移动到另一个显示器上面,并实现最大化。

至于这个程序的运行时机,叫给AutoHotKey,或者Launchy来完成。

 

首先创建一个工程,我觉得最合适的模板是:

【Visual C++】->【Win32】->【Win32 Console Application】

并在向导设置Application type为:Windows application。

其实这个类型本无所谓。但我之所以喜欢这个模板是因为:

首先,我不想看到那个黑呼呼的dos窗口,执行这个命令的时候他不美观不要紧,

更关键的是在我去取活动窗口的时候, 会取到他自己。

其次我也不喜欢我这小小的功能还要弄出一个窗口来(vs2008中mfc的入口貌似又一次被封装了,我找不到头了。)

 

也正因为此,我在创建完上述模板后,做的第一件事情就是将入口:_tWinMain 的函数体,替换为下面代码。

 

	int const width_move  = ::GetSystemMetrics(SM_CXSCREEN);

	//step 01, hide app: launchy
	//if used in AutoHotKey(http://www.autohotkey.com/),  set this flag to false.
	//if used in Launchy   (http://www.launchy.net/),     set this flag to true.
	int use_launchy = 0;
	if (use_launchy)
	{
		HWND  hWnd_launchy  = ::GetForegroundWindow();
		::ShowWindow(hWnd_launchy,SW_HIDE);
	}

	//step 02, normalize the target window
	HWND  hWnd  = ::GetForegroundWindow();
	::ShowWindow(hWnd,SW_NORMAL);


	//step 03, move window
	RECT rect;
	::GetWindowRect(hWnd,&rect);

	if (rect.left>=0)
	{
		rect.left = rect.left - width_move;
		rect.right = rect.right - width_move; 
	} 
	else
	{
		rect.left = rect.left + width_move;
		rect.right = rect.right + width_move;
	}

	::SetWindowPos(hWnd,HWND_TOP,rect.left, rect.top , rect.right - rect.left ,rect.bottom - rect.top , SWP_SHOWWINDOW);

	//step 04, maximize target window again.
	::ShowWindow(hWnd,SW_SHOWMAXIMIZED);
 

 

这就一切ok啦~ 编译,然后放到AutoHotKey,或者Launchy里面行啦~

 

需要说明的是:

1. 关于上述程序中的常量: width_move

    我没有做仔细的调查,如果两个显示器大小不一样,可能需要调整。

    对于我目前的需求,设置成主显示器的宽度够用。

 

2. 关于上述程序中的变量: use_launchy

    如果在launchy中使用,我要去的窗口其实是除了Launchy以外的最前窗口。

    所以我要先把Launchy隐藏掉。

 

 

 

 

 

 

分享到:
评论
1 楼 wjason 2012-07-11  
想在多显示器间快速移动窗口, 可以参考下面这篇新博客.
下面这篇博客的方法更简单

AutoHotkey:使用快捷键,在双显示器间,移动最大化的窗口
http://wjason.iteye.com/blog/1584859

相关推荐

Global site tag (gtag.js) - Google Analytics