我正在使用Windows,并且有两个监视器。
某些应用程序将始终在我的主监视器上启动,无论它们在关闭时处于何处。
其他人将始终在辅助监视器上启动,无论我关闭它们时在哪里。
是否有某个注册表设置隐藏在某个地方,我可以操纵该注册表设置来控制默认情况下启动到哪个监视器应用程序?
@rp:我有Ultramon,并且我同意它是必不可少的,以至于Microsoft应该购买它并将其整合到他们的OS中。但是正如您所说,它不能让您控制程序启动时所使用的默认监视器。
我正在使用Windows,并且有两个监视器。
某些应用程序将始终在我的主监视器上启动,无论它们在关闭时处于何处。
其他人将始终在辅助监视器上启动,无论我关闭它们时在哪里。
是否有某个注册表设置隐藏在某个地方,我可以操纵该注册表设置来控制默认情况下启动到哪个监视器应用程序?
@rp:我有Ultramon,并且我同意它是必不可少的,以至于Microsoft应该购买它并将其整合到他们的OS中。但是正如您所说,它不能让您控制程序启动时所使用的默认监视器。
Answers:
编写正确的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
功能。
这就是我所发现的。如果您希望默认情况下在辅助监视器上打开应用程序,请执行以下操作:
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。
获取UltraMon。很快。
http://realtimesoft.com/ultramon/
它不能让您指定启动应用程序的监视器,但是可以让您将应用程序移动到另一台监视器,并通过单击鼠标保持其宽高比不变。这是一个非常方便的实用程序。
大多数程序将从您上次离开的位置开始。因此,如果您有两台显示器在工作,而在家中只有一台显示器,则可以在家中启动笔记本电脑,而看不到另一台显示器上正在运行的应用程序(现在不存在)。UltrMon还使您可以轻松快捷地将这些孤立的应用程序移回主屏幕。
这并非完全是这个问题的答案,但我通过Shift + Win + [left,right] arrow keys
捷径解决了这个问题。您可以将当前活动的窗口移动到另一个监视器。
我相当确定主监视器是默认监视器。如果该应用程序的编码方式不错,则在关闭该应用程序时,它会记住该应用程序的最新位置,然后会在该位置重新打开,但是-您已经注意到-这不是默认行为。
编辑:我通常的方法是将位置存储在应用程序的设置中。加载时,如果没有任何值,则默认为屏幕中心。关闭表单后,它将记录其位置。这样,无论何时打开,它都在最后。但是,我不知道有一种简单的方法可以告诉它第一次自动在第二台监视器上启动。
-凯文·费尔柴尔德(Kevin Fairchild)
所以我在Adobe Reader 9.0中遇到了这个问题。程序以某种方式忘记在我的右显示器上打开,而一直在我的左显示器上打开。大多数程序允许您将其拖动,最大化屏幕,然后将其关闭,这样它就会记住。嗯,对于Adobe,我必须先将其拖动然后关闭,然后再最大化它,以便Windows记住下次要打开哪个屏幕。将其设置为正确的监视器后,即可将其最大化。我认为这很愚蠢,因为几乎所有Windows程序都会自动记住它,而无需尝试为XP记住一种方法。
我注意到,如果我在一个屏幕上的桌面上放置快捷方式,则启动的应用程序可能会出现在该屏幕上(如果该应用程序本身未重新定位)。
这也适用于从Windows资源管理器运行的东西-如果资源管理器在一个屏幕上,则启动的应用程序将选择要使用的监视器。
再次-我认为这是启动应用程序指定默认(Windows托管)位置时的情况。大多数应用程序似乎都以某种方式覆盖了此默认行为。
像这样创建的一个简单窗口将执行以下操作:
hWnd = CreateWindow(windowClass,windowTitle,WS_VISIBLE | WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,SW_SHOW,CW_USEDEFAULT,0,NULL,NULL,hInst,NULL);
右键单击快捷方式,然后选择属性。确保您位于“快捷方式”选项卡上。选择“运行”下拉框,并将其更改为“最大化”。
这可能有助于在主监视器上全屏启动程序。