我需要在代码(C++)中检测显卡是如何连接到显示器的,即vga或dvi等.
我找到了两种可以做到这一点的方法:
但这些仅在Windows Vista或更高版本中受支持.
肯定有一种方法可以在XP中实现这一点,但经过多次搜索我找不到一个,而且我找到了一种方法变得非常紧迫.
有任何想法吗?
我看到这篇文章,其中有人想使用 EnumDisplayDevices 找出他们的显示器的名称。
这正是我想要的,我尝试在 C++ 中做类似的事情,但第二次调用 EnumDisplayDevices 似乎永远不会返回任何内容,我只获取有关显卡的信息。
DISPLAY_DEVICE dd;
memset(&dd, 0, sizeof(DISPLAY_DEVICE));
dd.cb = sizeof(dd);
int i = 0;
while(EnumDisplayDevices(NULL, i, &dd, 0))
{
Log(_T("Device Name: %s Device String: %s"), dd.DeviceName, dd.DeviceString);
if(EnumDisplayDevices(dd.DeviceName, 0, &dd, 0))
{
Log(_T("Monitor Name: %s Monitor String: %s"), dd.DeviceName, dd.DeviceString);
}
i++;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是
Device Name: \\.\DISPLAY1 Device String: NVIDIA GeForce 9300 GE
Device Name: \\.\DISPLAYV1 Device String: NetMeeting driver
Device Name: \\.\DISPLAYV2 Device String: RDPDD Chained DD
Run Code Online (Sandbox Code Playgroud)
目标平台是XP,我无法通过任何标准方法找到显示器名称。有任何想法吗?
谢谢。
我似乎无法找到这样做的方法,但我觉得奇怪的是注册表密钥在创建时根本不会给出时间戳.有谁知道一种方式?目标平台是XP 32位.
谢谢.
C++函数定义是这样的
__declspec(dllexport) LPWSTR __stdcall GetErrorString(int errCode);
Run Code Online (Sandbox Code Playgroud)
我在 C# 中这样称呼它
[DllImport("DLLTest.dll")]
public static extern string GetErrorString(int errCode);
static void Main(string[] args)
{
string result = GetErrorString(5);
}
Run Code Online (Sandbox Code Playgroud)
我收到 System.Runtime.InteropServices.SEHException 类型的未处理异常
我什至不确定 C++ DLL 是否可以尝试将 LPWSTR 返回到 C#...
谢谢。