最近升级成了双显示器,
以前只是知道双显示器爽,但用过之后才知道,原来这么爽。
然而美中不足,我也发现了一点小问题,就是我经常有这样一个需求:
有一个程序,已经被最大化了,我要将它从一个显示器移动到另一个显示器上面,同时仍然保持最大化。
以前要完成这个事情,我需要首先将此程序还原,移动到另一个显示器,再将其最大化。
这回的目的就是将这一系列繁琐的过程自动化掉。 使用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++编程环境中,开发人员经常需要处理与操作系统交互的任务,比如枚举系统中的所有可见应用窗口,并且能够对这些窗口执行操作,如关闭、最大化或最小化。这个任务涉及到了多个关键知识点,包括Windows API的使用...
3. **窗口定位**:在双屏环境下,开发者可能需要将应用程序窗口放置在特定显示器上,这需要使用`SetWindowPos`函数,结合显示器信息来设定窗口的位置。 4. **事件处理**:程序可能需要响应显示器的动态变化,比如...
步骤一:把easysize.h拷贝到CMyDlg项目文件夹中,同时在CMyDlg的.h文件和.cpp文件中加入#include "easysize.h"; 步骤二:在CMyDlg类的h文件中,加入DECLARE_EASYSIZE,注意结尾处不要加“;”。 class CMyDlg : ...
在VC++编程环境中,开发一个能够定时关闭显示器的程序是一项基础但实用的任务。这个程序的主要目的是帮助用户在设定的时间后自动使显示器进入休眠或关闭状态,以节省能源或者在无人使用电脑时保持安全。接下来,我们...
在VC++编程环境中,窗口的最大化和最小化是常见的用户界面交互功能,这对于任何桌面应用程序来说都是必不可少的。本文将详细讲解如何在VC++中实现窗口的最大化和最小化功能,并提供示例代码进行说明。 首先,理解...
在VC++编程环境中,窗口最小化与最大化是常见的功能,对于初学者来说,理解并实现这一功能是非常重要的。本文将详细讲解如何通过代码实现这些功能,适用于VC++初学者。 首先,我们需要了解Windows API(应用程序...
综上所述,“VC++移动无标题栏窗口”项目展示了如何利用Windows API在VC++环境中创建一个没有标题栏的窗口,并实现用户可以通过点击窗口任何位置来移动窗口的功能。这个项目对于理解Windows编程中的窗口管理、鼠标...
这对于处理多个窗口间的位置关系特别有用。`hWndFrom`和`hWndTo`分别是源窗口和目标窗口的句柄,`lpPoints`是包含多个点的数组,`cPoints`指定了点的数量。 除了这些基本的API,VC++程序员还需要理解窗口的缩放和...
在VC++编程中,创建一个可以任意停靠的吸附窗口是一项常见的需求,尤其在开发桌面应用软件时,如音乐播放器、系统监控工具等。这个技术可以让用户自定义界面布局,提升用户体验。以下是对实现这一功能的关键知识点的...
【VC++6行号显示器】是一款为解决在Visual C++ 6.0环境下编程时无法直接显示代码行号问题的工具。在默认情况下,VC++6的源代码编辑器不提供行号显示功能,这使得在调试代码或查找错误时可能会增加一定的困扰。通过...
窗口位置的自动调整也非常重要,比如在窗口最大化或最小化时。这可以通过处理`WM_GETMINMAXINFO`消息来实现,你需要在该消息的处理函数中设置窗口的最大和最小尺寸。 在界面编程中,为了保证窗口的响应性和用户体验...
在VC++环境中,实现“字随鼠标移动”的功能主要涉及到Windows API编程,特别是与窗口消息处理、图形设备接口(GDI)以及鼠标事件相关的知识。下面将详细解释这些知识点。 首先,VC++作为Microsoft Visual Studio的...
1. **初始化**: 在程序启动时,可能会有一个用户界面供用户设置关闭显示器的时间,如设定为30分钟后自动关闭。 2. **创建定时器**: 根据用户设定的时间,使用SetTimer函数创建一个定时器,设置间隔为所设时间的毫秒...
在Windows编程领域,VC++(Microsoft Visual C++)是一种广泛使用的开发工具,它允许程序员创建各种类型的应用程序,包括不规则形状的窗口和用于显示图片的窗口。在本篇文章中,我们将深入探讨如何使用VC++来实现...
掌握如何获取主窗口指针有助于进行诸如消息处理、窗口间通信等高级编程任务。下面我们将深入探讨如何在VC++中获取主窗口指针。 首先,我们需要理解窗口和指针的概念。在Windows API中,每个窗口都有一个独一无二的...
标题 "倍福VC++显示器程序编码翻译" 涉及的核心技术主要是在使用Microsoft的Visual C++(简称VC++)编程环境下,为贝克霍夫(Beckhoff)的工业自动化设备开发显示器程序,并进行代码的编译和翻译。这个过程涉及到的...
总结来说,"VC++6.0窗口绑架(强行改变父窗口)"是一个关于Windows编程中改变窗口父子关系的技术,它涉及到跨进程操作和`SetParent`函数的使用,可以在多文档界面或Win32 API中实现。在实际操作时,需要充分了解其潜在...
2. **快捷键操作**:VC6.0支持自定义快捷键,创建一些用于在窗口间切换的快捷键可以极大提高效率。 3. **布局保存**:VC6.0允许保存和加载窗口布局,如果你经常在单屏和双屏模式下切换,保存不同布局会很有帮助。 ...