我有两台显示器(HP EliteDisplay E190i),都连接到两台计算机(2x VGA + DP)。
这些显示器还支持DVI,因此不必每次都有一个愚蠢的切换按钮,每当我希望在计算机之间切换时,我必须浏览显示器的菜单。我曾经有笨显示器和开关是很容易的,但我不能习惯的整个导航的东西 - 它往往变得扑朔迷离......如何在C#中立即强制显示器进入省电模式?
所以这里的交易 - 我希望能够快速切换通过执行命令在计算机之间。显然这不能直接完成(计算机之间没有任何连接),但是当显示器进入省电模式(或者当操作系统关闭它们时),显示器开始扫描可用输入。这样他们会锁定到另一台计算机,并解决问题。
够介绍,虽然,我已经试过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 64在两台计算机上。
有没有什么办法让整个仪式工作?
因此,与第二个解决方案的问题是,你不能用管理员权限运行呢? –
不,当我按照预期运行管理员权限时,输入被阻止。然而,即使输入被封锁,移动鼠标或按我的键盘上的键(物理)取消了淡出动画 - 即使_pointer_没有移动和键盘输入被忽略(被按下的键,但没有文字是键入记事本)。 –
如何在发送睡眠命令之前阻止输入 – RomCoo