我如何强制在Windows中显示检测?

我经常用连接在另一台计算机上的KVM切换器启动Windows 7电脑。 当我切换到启动电脑时,显示分辨率是错误的(并且没有检测到第二个连接的显示器)。

我可以通过右键单击桌面,selectScreen Resolution并单击Detect来更正此问题。 这使Windows检测到连接的显示器,并调整到最佳的分辨率。

我想写一个小工具自动执行此操作。 我应该使用哪个Win32 API调用或C#对象?

Solutions Collecting From Web of "我如何强制在Windows中显示检测?"

你可以试试:

  1. 您可以使用Spy ++来搜索打开的窗口,并查看其属性和消息。
  2. 使用过程来启动“rundll32.exe shell32.dll,Control_RunDLL desk.cpl”或试验直接调用它,看看你是否可以得到一个窗口句柄,检查下面的链接的想法。
  3. 使用代码“发送按钮点击外部的应用程序”,并修改它来搜索“屏幕分辨率”标题的窗口,并发送一个BN_CLICK到子窗口的标题“检测”。
  4. 由于计算机已经启动,因此可能需要在登录时自动启动计算机,以便使用任务计划程序。

不知道这是否适合你,但你可以尝试这样的事情。 至少它可以让你开始。

 [StructLayout(LayoutKind.Explicit, Pack = 1, Size = 714)] public struct DISPLAY_DEVICE { [FieldOffset(0)] public int cb; [FieldOffset(4)] public char DeviceName; [FieldOffset(68)] public char DeviceString; [FieldOffset(324)] public int StateFlags; [FieldOffset(328)] public char DeviceID; [FieldOffset(584)] public char DeviceKey; } [DllImport("User32.dll", SetLastError = true)] static extern Boolean EnumDisplayDevices( string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags ); public void DetectDevices() { var flag = true; for (uint i = 0; flag && i < 100; i++) { var device = new DISPLAY_DEVICE(); device.cb = Marshal.SizeOf(device); flag = EnumDisplayDevices(null, i, ref device, 1); } } 

这会让你在途中:

执行:control.exe desk.cpl,设置,@设置

这将直接调出屏幕分辨率面板。

我也可能会建议一个像http://en.wikipedia.org/wiki/Windows_Script_Host这样的脚本工具,然后编写一个实用程序来打开面板并点击按钮&#x3002;

除此之外,控制面板可能会直接调用windows的.dll文件,您可以直接在代码中加载和调用,但这需要进行一些侦测。 (你可以通过在调试器中运行.cpl开始,看看你点击detect时会发生什么)。

为什么不只是使用Do It Again并编写一个宏,通过记录鼠标和键盘操作来重置分辨率?