我正在嘗試使顯示所有顯示器和顯示器名稱的函數。 但是第二次我調用enumDisplayDevices時,如果第一個參數是lpDisplayDevice.DeviceName,則會出現錯誤。我知道這是第一個參數,因爲它被設置爲「IntPtr.Zero」,而不是錯誤。C#如何獲取Windows顯示器名稱
我找不到另一個如何在C#中執行此操作的示例。
public static void show_display_devices()
{
DISPLAY_DEVICE lpDisplayDevice = new DISPLAY_DEVICE(0); // OUT
int devNum = 0;
while(true)
{
bool success = EnumDisplayDevices(IntPtr.Zero, devNum, ref lpDisplayDevice, 0);
if(!success)
break;
Console.WriteLine("\ndevNum =" + devNum);
Console.WriteLine("cb =" + lpDisplayDevice.cb);
Console.WriteLine("DeviceID =" + lpDisplayDevice.DeviceID);
Console.WriteLine("DeviceKey =" + lpDisplayDevice.DeviceKey);
Console.WriteLine("DeviceName =" + lpDisplayDevice.DeviceName.Trim());
Console.WriteLine("DeviceString =" + lpDisplayDevice.DeviceString.Trim());
// Show monitor name:
DISPLAY_DEVICE monitor_name = new DISPLAY_DEVICE(0); // OUT
>>>>>>>>>>> NEXT LINE HAS ERROR: <<<<<<<<<<<<<<<
EnumDisplayDevices(lpDisplayDevice.DeviceName, 0, ref monitor_name, 0); <<<<<<<<<<<<<<<<< "lpDisplayDevice.DeviceName" causes error <<<<<<
^^^^^^^^^^^^^^^^^^^^^^^^^^ - CAUSES ERROR <<<<<<
Console.WriteLine("Monitor name =" + lpDisplayDevice.DeviceString.Trim());
++devNum;
}
}
它的那種無用的,因爲我從來沒有見過一個安裝在監視器已正確安裝,其名稱在設備管理器中正確顯示。 「通用即插即用監視器」是在程序運行的所有計算機的99.9%中可以找到的監視器名稱。 – Havenard 2013-04-24 18:59:50
我認爲你的問題應該包括你的DISPLAY_DEVICE結構和EnumDisplayDevices方法的定義。該錯誤可能與特定字段或函數參數如何編組有關。由於EnumDisplayDevices的第一個參數是一個LPCTSTR,通常作爲C#字符串參數處理,所以我懷疑這裏可能有類型不匹配。 – RogerN 2013-04-24 19:11:10
Havenard:在我們的產品中,當我們已知的HDMI監視器連接時,我讀取監視器名稱以確定監視器是否連接。 – 2013-04-24 19:57:57