我经常使用附加的KVM切换器启动我的Windows 7 PC,专注于另一台计算机。当我切换到启动的PC时,显示分辨率错误(并且未检测到第二个连接的监视器)。
我可以通过右键单击桌面,选择Screen Resolution
并点击Detect
来更正此问题。这使Windows可以检测附加的显示并调整到最佳分辨率。
我想写一个小实用程序来自动执行此操作。我应该使用哪个Win32 API调用或C#对象?
答案 0 :(得分:1)
这会让你在中途:
执行:control.exe desk.cpl,设置,@设置
这将直接打开屏幕分辨率面板。
我可能还会建议像http://en.wikipedia.org/wiki/Windows_Script_Host这样的脚本工具 并编写一个实用程序,打开面板并单击按钮。
除非控制面板可能直接调用windows .dll,您可以直接在代码中加载和调用,但这需要进行一些检测。 (您可以先在调试器中运行.cpl,然后查看单击检测时会发生什么)。
答案 1 :(得分:1)
您可以尝试:
答案 2 :(得分:1)
为什么不使用Do It Again并编写一个通过录制鼠标和键盘操作来重置分辨率的宏?
答案 3 :(得分:0)
不确定这是否适合您,但您可以尝试这样的事情。至少它可以让你开始。
[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);
}
}