我有两个显示器(HP EliteDisplay E190i),都连接了两台电脑(2x VGA + DP)。这些显示器还支持DVI,所以为了不使用愚蠢的切换按钮,每当我想在两台电脑之间切换时,我都必须通过显示器菜单进行导航。我曾经有过更傻瓜的显示器,切换非常容易,但我就是无法适应整个导航过程 - 它经常让人感到困惑...
所以问题来了 - 我希望能够通过执行命令快速在两台电脑之间切换。显然,这不能直接完成(两台计算机没有任何连接),但当显示器进入省电模式(或操作系统将它们关闭)时,显示器开始扫描可用输入。这样它们就会锁定到另一台计算机上,问题解决了。
不过,话说回来,我尝试过 this solution,效果很好,但并不完美:
- 它有一个淡出动画,在显示器实际关闭前需要几秒钟的时间 - 在上述淡出动画的持续时间内,我不能触摸鼠标/键盘,否则它会被取消
我尝试在将显示器置于睡眠状态之前按照this answer的方法禁用输入,然后在5秒后重新启用它,但这也不起作用,因为:
所以问题来了 - 我希望能够通过执行命令快速在两台电脑之间切换。显然,这不能直接完成(两台计算机没有任何连接),但当显示器进入省电模式(或操作系统将它们关闭)时,显示器开始扫描可用输入。这样它们就会锁定到另一台计算机上,问题解决了。
不过,话说回来,我尝试过 this solution,效果很好,但并不完美:
- 它有一个淡出动画,在显示器实际关闭前需要几秒钟的时间 - 在上述淡出动画的持续时间内,我不能触摸鼠标/键盘,否则它会被取消
我尝试在将显示器置于睡眠状态之前按照this answer的方法禁用输入,然后在5秒后重新启用它,但这也不起作用,因为:
- 需要以管理员权限运行应用程序,否则无法阻止输入
- 即使在以管理员权限运行时输入被阻止,我仍然可以在淡出动画期间移动鼠标或按键盘上的某些键来取消它(即使指针没有移动或键盘输入被忽略)。
以下是我的代码:
[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
[DllImport("user32.dll")]
private static extern int BlockInput(int fBlockIt);
static void Main()
{
SendMessage(0xFFFF, 0x112, 0xF170, 2);
try
{
int result = BlockInput(1);
Console.WriteLine(result);
Thread.Sleep(5000);
}
finally
{
BlockInput(0);
}
}
我在两台计算机上都使用Windows 7 Enterprise x64操作系统。
有没有办法让整个程序正常工作?