最近升级成了双显示器,
以前只是知道双显示器爽,但用过之后才知道,原来这么爽。
然而美中不足,我也发现了一点小问题,就是我经常有这样一个需求:
有一个程序,已经被最大化了,我要将它从一个显示器移动到另一个显示器上面,同时仍然保持最大化。
以前要完成这个事情,我需要首先将此程序还原,移动到另一个显示器,再将其最大化。
这回的目的就是将这一系列繁琐的过程自动化掉。 使用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隐藏掉。
分享到:
相关推荐
VC++:SMS短信测试: 实现短信的收发,
VC++: SuiteLink协议解析
VC++: 串口调试源码
VC++: OPCDA开发简单示例
1.VC++ 实现枚举所有可见应用窗口,并支持发送消息进行关闭、最大化或者最小化 2.支持跨进程发消息 3.源码
步骤一:把easysize.h拷贝到CMyDlg项目文件夹中,同时在CMyDlg的.h文件和.cpp文件中加入#include "easysize.h"; 步骤二:在CMyDlg类的h文件中,加入DECLARE_EASYSIZE,注意结尾处不要加“;”。 class CMyDlg : ...
供初学者学习VC之用,实现基础的文件拖拽功能
VC++ 实现可任意停靠的吸附窗口 VC++实现可任意停靠的吸附窗口,就像系统的任务栏一样,会自动感应边界,然后自动吸附至拖动的地方,在一些音乐播放器上面经常会用到这种功能,需要的可借鉴一下。
VC++二值化VC++二值化VC++二值化
用vc++6写程序,没有行号,错了,也不知道具体哪一行。用这个就方便了。 VC++6行号显示器,内附使用说明。
摘要:VC/C++源码,系统相关,关闭显示器 VC++模拟关闭显示器(显示器待机)省电模式,双击生成的EXE文件,显示器即黑屏,按ESC键可恢复正常状态。函数解释: SendMessage 进队消息,将消息放入与创建窗口的线程相...
VC++6.0一个定时关闭显示器和计时器的小程序
VC++ 实现字随鼠标移动,可以动态显示
VC++在屏幕坐标和窗口坐标之间转换
双屏显示源代码,是双屏编程人员必不可少的参考代码,可实现扩展模式、克隆模式。 可以编译通过 不缺文件 可以运行
阴影窗口的实现原理,简单来讲:就是在主窗口创建时,创建一个子窗口,吸附于主窗口的底部。然后在子窗口上做一个带半透明阴影效果的描绘。 详情请参见与之配套的博客:...
在VC++6.0中移动无标题栏的窗口,线代码,有详细使用说明
详解VC++中的窗口与视口
程序很简单,获取并显示当前系统时间,可设置时间,定时关闭显示器功能,