2009-11-17 58 views
0

可见分辨率我不完全知道如何字这个问题,所以我只是要说明我的问题。如何检查系统

我的VB 6程序在注册表中保存屏幕的位置,以便在重新加载了它可以有一个默认位置。这按预期工作,但我遇到了一个问题。我有一台带有2台显示器的电脑。我将窗口拖到第二个屏幕,然后第二天拔下第二个显示器。每次我加载程序时,它都会出现在码头上,但表格本身并不是。

我想这是隐藏在第二显示器的空间(或者是第二显示器应该)现在,在我第一次连接一台显示器抢回来,但它并没有显示出来。显示器设置使主监视器(1)位于新监视器(2)的左侧。我不得不将(2)拖到(1)的左边,然后我将它拖回到主窗口,一切正常。我提到这一点是因为我觉得每个监视器号码的分辨率都是相对于它自己的。多监视器是一个巨大的坐标平面吗?

我想知道的是,当我从注册表(Form.left和Form.top)获取位置编号时,是否有办法检查系统可用的内容?这不是一个大问题,但我知道我会让客户打来电话,最终问:“它的载入,但我无法找到它!”并希望尽可能避免这些电话。

谢谢大家

回答

0

不知道VB的,但你可以调用本地的Win32 API来处理这个问题。

GetSystemMetrics(SM_CMONITORS)返回监视器的数量,或者如果需要区分“真实”监视器和伪显示监视器,可以使用EnumDisplayMonitors()枚举它们。

使用MonitorFromPoint()或MonitorFromRect()或MonitorFromWindow()在指定的点标识监视器,然后使用GetMonitorInfo()返回有关该监视器的信息,包括其虚拟屏幕坐标。然后,您可以将窗口放置在您选择的显示器上。

我不知道如何可靠地检测第二显示器是否丢失或断电。你可以使用设置API(!),我猜 - SetupDiEnumDeviceInfo()可以用来枚举监视器设备,并且SetupDiGetDeviceRegistryProperty()可以用来检索每个信息,比如它的当前电源状态。

0

不是一个真正的回答你的问题,但它可能在处理今后类似的问题,或您的客户帮助,如果他们碰到它。

如果右键单击任务栏按钮(或在Windows 7上,右键单击窗口的Aero Peek预览),您将看到一个Move选项。点击它,然后按下其中一个箭头键,无所谓。之后,窗口将处于可移动模式,您只需移动鼠标即可,它会重新显示在屏幕上,就像拖动标题栏一样。

+0

雅,我在想,正是此举选项是如何工作的。我试图用它来拖动窗体。没有真正的工作。我想我错过了一些东西。 感谢您的提示。 – 2009-11-17 19:51:17