모든 디스플레이 및 모니터 이름을 표시하는 함수를 만들려고합니다. 하지만 두 번째로 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
귀하의 질문에 DISPLAY_DEVICE 구조체 및 EnumDisplayDevices 메서드에 대한 정의를 포함시켜야한다고 생각합니다. 이 오류는 특정 필드 나 함수 인수가 마샬링되는 방식과 관련이 있습니다. EnumDisplayDevices의 첫 번째 인수는 일반적으로 C# 문자열 인수로 처리되는 LPCTSTR이므로 여기에 형식이 일치하지 않을 수도 있습니다. – RogerN
Havenard : 우리 제품에서 알려진 HDMI 모니터가 연결되면 모니터 이름을 읽고 모니터가 연결되어 있는지 확인합니다. –