有没有办法以编程方式更改屏幕分辨率或启用/禁用Windows XP中的多个监视器?例如,在两台显示器上从一台显示器的1024x768更改为1280x104?我会对win32函数最感兴趣,但是任何可以绑定到Windows快捷方式的东西就足够了.
我们正在开发一个Web应用程序,需要在不同的屏幕上打开两个不同的浏览器实例.显然我们使用的电脑已经具有双显示屏,两台显示器都具有相同的尺寸和分辨率.
我们的想法是,一旦Windows启动,两个应用程序应立即全屏打开,我们首选的浏览器是Chrome,因为它有几个命令可以帮助我们完成任务.
我们成功地向启动程序添加了两个在kiosk模式下打开两个实例的快捷方式,但是我们无法选择打开哪个显示.
快捷方式有这个目标:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\temp --kiosk www.domain.com --new-window "%1" --window-position=0,0
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\temp --kiosk www.domain2.com --new-window "%2" --window-position=1680,0
Run Code Online (Sandbox Code Playgroud)
为了打开两个实例,chromes需要创建一个临时文件,其中包含要打开的实例的信息 (--user-data-dir=c:\temp)
我们尝试使用(--window-position=1680,0)指定打开实例的位置,但Chrome似乎优先考虑最后一个实例打开的最后位置,因此无论命令如何,两个实例都在同一窗口打开.
我们在这个网站上找到了所有可用命令的列表,但列表很大,我们甚至不知道我们在寻找什么:
http://peter.sh/experiments/chromium-command-line-switches/
我找到了这个命令:--display=:0.0 | --display=:0.1 但它似乎没有用,或者我没有正确使用它
有任何想法吗?谢谢.
我希望能够通过代码设置"将我的Windows桌面扩展到此监视器上".PowerShell脚本是理想的.WMI似乎是前进的方向,但我对WMI知之甚少.
我在Linux上运行VNC服务器,在Windows上运行TightVNC查看器(2009年2月10日版本1.3.10),并附带2个监视器.我想同时在两台显示器上进行全屏会话,但每当我这样做时,我的全屏总是只使用一台显示器.
是否可以将全屏扩展到本地监视器上?也许有一个更现代的观众版本可以使它工作?
(在常规模式下,不是全屏模式,很容易 - 只需运行具有双倍桌面大小的VNC服务器,并在两台显示器上拉伸本地计算机上的窗口.这是我无法工作的全屏模式.)
非常感谢,非常感谢你的帮助.
当对表单类添加了对运行时DPI切换的支持时,没有考虑像菜单这样的基本UI元素.
菜单绘图从根本上被打破,因为它依赖于Screen.MenuFont,这是一个系统范围的度量,不是特定于监视器.因此,虽然表单本身可以相对简单地进行适当缩放,但是显示在其上的菜单只有在缩放恰好匹配加载到Screen对象中的任何度量标准时才能正常工作.
这是主菜单栏,弹出菜单和表单上所有弹出菜单的问题.如果将表单移动到具有与系统指标不同的DPI的监视器,则这些都不会缩放.
真正做到这一点的唯一方法是修复VCL.等待Embarcadero充实多DPI并不是一个真正的选择.
查看VCL代码,基本问题是Screen.MenuFont属性被分配给菜单画布,而不是选择适合显示菜单的监视器的字体.只需在VCL源代码中搜索Screen.MenuFont即可找到受影响的类.
在不必完全重写所涉及的类的情况下,解决此限制的正确方法是什么?
我的第一个倾向是使用绕行来跟踪菜单弹出窗口并在用于设置菜单时覆盖Screen.MenuFont属性.这似乎太过分了.
所以.. 我正在构建一个 chrome 扩展程序,它包含一个简单的弹出页面,当您单击扩展程序的图标时会出现该页面。这个弹出页面由一些简单的 HTML、CSS 和 jQuery 代码组成。没有什么花哨。
该JS似乎运行正常,但CSS悬停,过渡和动画效果是非常laggy (可达5秒落后),当我交互与它在外部监视器上。
其他一切都运行得很好,我可以看到 JavaScript 正在按预期执行。这只是上面提到的 CSS 渲染问题。
有趣的是,如果我将相同的浏览器窗口拖到笔记本电脑的本机屏幕上,问题就消失了。一切顺利。将同一个窗口拖到我的 2 个外接显示器和 Bam 中的任何一个!落后城市...
我在我朋友的电脑上测试过,他也有同样的问题。在本机屏幕上运行良好,在外部显示器上运行缓慢。到目前为止,该问题似乎只发生在 Mac 上。经过排除,我知道问题不是显示器本身造成的,与视频输入线无关。我只能在连接到我的 Macbook Pro(2015 年初)和我朋友的 Macbook Pro(2014 年初)的外接显示器上观察到此错误。
我尝试过的事情(并没有帮助):
想知道其他人是否遇到过类似的问题?这个奇怪的外部显示器延迟问题整周都在困扰着我,我完全没有想法。
Github repo 到演示项目 -> https://github.com/peachteaboba/chrome_extension_bug_demo
我正在尝试为我的系统上的监视器获取友好名称.我正在使用C#.
我试过了Screen,只是给了我//./DisplayXX.我也曾尝试既Win32_DesktopMonitor和EnumDisplayDevices,他们都给予我的变化//./DisplayXXOR Generic Monitor,而我知道我的显示器名称SyncMaster和SM2333T.
现在,Windows知道这些监视器是什么,使用正确的名称在" 设备和打印机"窗口中显示它们,并在用于设置位置和分辨率的对话框中显示它们.
我在哪里可以从中获取这些名称?我已经查看了注册表,似乎无法找到它们,所以任何帮助都会很棒.
解决方案:
我遇到的问题是EnumDisplayDevices第二次调用时iDevNum再次调用id,这意味着我试图从错误的位置获取数据,然后将其替换为0,它完美地运行,请参阅下面的代码.
var device = new DISPLAY_DEVICE();
device.cb = Marshal.SizeOf(device);
try
{
for (uint id = 0; EnumDisplayDevices(null, id, ref device, 0); id++)
{
Console.WriteLine(String.Format("{0}, {1}, {2}, {3}, {4}, {5}", id, device.DeviceName, device.DeviceString, device.StateFlags, device.DeviceID, device.DeviceKey));
Console.WriteLine();
device.cb = Marshal.SizeOf(device);
EnumDisplayDevices(device.DeviceName, 0, ref device, 0);
Console.WriteLine(String.Format("{0}, {1}, {2}, {3}, {4}, {5}", id, device.DeviceName, …Run Code Online (Sandbox Code Playgroud) 我在我的程序中做了类似的事情:
Int32 currentMonitorCount = Screen.AllScreens.Length;
if (currentMonitorCount < 2)
{
//Put app in single screen mode.
}
else
{
//Put app in dual screen mode.
}
Run Code Online (Sandbox Code Playgroud)
非常重要我的应用程序可识别当前连接的监视器数量.
但是,在我多次插入/拔出显示器后,Screen.AllScreens.Length始终返回"2".
我的显示器知道它没有连接(它已进入'节电'模式),控制面板知道它没有连接(它只显示一个显示器).
那我错过了什么?我怎么知道只有一台显示器?
使用AutoHotkey,如何绑定热键以跨多个监视器拉伸/最大化/跨越窗口,以便它覆盖两个显示?
现在,我必须通过用鼠标手动拉伸窗口来做到这一点.我知道有专门的工具可以做到这一点,但我已经运行了一个AutoHotkey脚本,宁愿限制我继续运行的工具数量.
我需要使用显示器作为我的特殊应用程序的"私人"设备,我想将它用作一种类型的手电筒并在其上全屏绘制特殊图案.我不希望OS(Windows 7)将此监视器识别为常用监视器.即用户不应该将鼠标移动到该监视器,或更改其分辨率,或在其上运行屏幕保护程序或其他任何内容.但我希望能够从我的应用程序中与它进行交互.使用HDMI电缆将显示器插入视频卡(最可能是nVidia).
最简单的方法是什么?所有解决方案都受到赞赏,包括购买额外的适配器或简单的视频卡,或任何其他特殊设备.我现在想象的唯一解决方案是将显示器插入另一台计算机,在该计算机上运行一个守护程序,通过以太网或其他任何方式将其连接到我的计算机,从我的计算机与该守护程序进行通信.它很丑陋,需要额外的电脑.但我需要解决这个问题.
windows ×4
c# ×2
.net ×1
autohotkey ×1
css ×1
delphi ×1
dpi ×1
fullscreen ×1
hardware ×1
kiosk-mode ×1
performance ×1
powershell ×1
resolution ×1
vcl ×1
vnc ×1
vnc-viewer ×1
winapi ×1
windows-7 ×1
winforms ×1
wmi ×1