我經常用連接在另一臺計算機上的KVM切換器啓動我的Windows 7 PC。當我切換到啓動的PC時,顯示分辨率錯誤(並且未檢測到第二個連接的顯示器)。如何在Windows中強制顯示檢測?
我可以通過右鍵單擊桌面,選擇Screen Resolution
並單擊Detect
來更正此問題。這使Windows檢測到連接的顯示器並調整到最佳分辨率。
我想寫一個小工具來自動執行此操作。我應該使用哪種Win32 API調用或C#對象?
我經常用連接在另一臺計算機上的KVM切換器啓動我的Windows 7 PC。當我切換到啓動的PC時,顯示分辨率錯誤(並且未檢測到第二個連接的顯示器)。如何在Windows中強制顯示檢測?
我可以通過右鍵單擊桌面,選擇Screen Resolution
並單擊Detect
來更正此問題。這使Windows檢測到連接的顯示器並調整到最佳分辨率。
我想寫一個小工具來自動執行此操作。我應該使用哪種Win32 API調用或C#對象?
你可以試試:
如果由於某種原因無法使用任務計劃程序,請嘗試將其設置爲以管理員身份運行,因爲Win7 UAC會很麻煩。 – Marlon 2010-10-08 05:02:42
不知道這是否適合你,但你可以嘗試這樣的事情。至少它可以讓你開始。
[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);
}
}
gah,這可能是C/C++中的一個班輪,當C/C++在這裏是自然選擇時,爲什麼人們會用C#來打擾他們,併爲此而走出困境? – 2013-05-18 11:55:37
也許是因爲他要求C#。 – 2013-06-24 16:46:02
這將讓你有中途:
執行:CONTROL.EXE的desk.cpl,設置,@設置
這將直接帶來了屏幕分辨率面板。
我也可能會建議一個腳本工具,如http://en.wikipedia.org/wiki/Windows_Script_Host 然後編寫一個實用程序來打開面板並單擊按鈕。
除非控制面板可能會直接調用windows.dll,您可以直接在代碼中加載和調用該代碼,但這需要一些偵測來檢測。 (你可以通過在調試器中運行.cpl開始,看看當你點擊檢測時會發生什麼)。
爲什麼不只是使用Do It Again並編寫一個宏,通過記錄鼠標和鍵盤操作來重置分辨率?
我沒有刷新選項。這可能是視頻卡製造商的附加組件。 – 2010-10-04 21:35:20
對不起,漢斯,它實際上是說'檢測' - 我編輯了這個問題。我相信這是一個標準的按鈕。 – 2010-10-04 23:49:02