我正在使用Windows,我有两台显示器.
有些应用程序将始终在我的主监视器上启动,无论我何时关闭它们.
其他人总是会在辅助监视器上启动,无论我关闭它们的位置.
是否有一个隐藏在某处的注册表设置,我可以操作它来控制默认启动哪些监视器应用程序?
@rp:我有Ultramon,我同意它是不可或缺的,微软应该购买并将其整合到他们的操作系统中.但正如您所说,它不会让您控制程序启动的默认监视器.
这是我发现的.如果您希望默认情况下在辅助监视器上打开应用程序,请执行以下操作:
1. Open the application. 2. Re-size the window so that it is not maximized or minimized. 3. Move the window to the monitor you want it to open on by default. 4. Close the application. Do not re-size prior to closing. 5. Open the application. It should open on the monitor you just moved it to and closed it on. 6. Maximize the window.
此应用程序现在默认在此监视器上打开.如果要将其更改为其他监视器,请再次按照步骤1-6进行操作.
正确编写的Windows应用程序希望保存其运行之间的位置将保存GetWindowPlacement()
关闭之前的结果,然后SetWindowPlacement()
在启动时使用以恢复其位置.
通常,应用程序会将结果存储GetWindowPlacement()
在注册表中REG_BINARY
以方便使用.
该WINDOWPLACEMENT
路线比其他方法有许多优点:
处理自上次运行以来屏幕分辨率发生变化的情况:SetWindowPlacement()
将自动确保窗口不完全在屏幕外
保存状态(最小化/最大化),但也保存恢复的(正常)大小和位置
正确处理桌面指标,补偿任务栏位置等(即使用"工作空间坐标"而不是"屏幕坐标") - 依赖于保存屏幕坐标的技术可能会遇到"行走窗口"问题,其中窗口总是会出现如果用户在屏幕顶部有一个工具栏,则每次都低一点.
最后,正确处理窗口恢复的程序将考虑nCmdShow
从shell传入的参数.此参数在启动应用程序的快捷方式中设置(正常,最小化,最大化):
if(nCmdShow != SW_SHOWNORMAL) placement.showCmd = nCmdShow; //allow shortcut to override
对于非Win32应用程序,确保用于保存/恢复窗口位置的方法最终使用相同的底层调用非常重要,否则(如Java Swing的setBounds()
/ getBounds()
问题)最终会编写大量额外代码重新实现功能中已有的WINDOWPLACEMENT
功能.
获取UltraMon.很快.
http://realtimesoft.com/ultramon/
它不允许您指定应用程序启动的监视器,但它允许您将应用程序移动到另一个监视器,并通过单击鼠标保持其宽高比完好无损.这是一个非常方便的实用程序.
大多数程序将从您上次离开它们的地方开始.因此,如果您有两台显示器正在工作,但只有一台在家,则可以在家中启动笔记本电脑而不会看到其他显示器上运行的应用程序(现在不在那里).UltrMon还允许您快速轻松地将这些孤立应用程序移回主屏幕.
这不是这个问题的答案,但我用Shift + Win + [left,right] arrow keys
快捷方式解决了这个问题.您可以使用它将当前活动的窗口移动到另一个监视器.