我正在尝试检索一组与显示相关的界面,并且似乎总是得到259错误。由于我对WinApi
非常缺乏经验,我可能需要一些提示:)
#include <atlstr.h>
#include <SetupApi.h>
#pragma comment(lib, "setupapi.lib")
#include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
const GUID GUID_CLASS_MONITOR = {0x4d36e96e, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18};
const GUID GUID_DEVINTERFACE_MONITOR = {0xe6f07b5f, 0xee97, 0x4a90, 0xb0, 0x76, 0x33, 0xf5, 0x7b, 0xf4, 0xea, 0xa7};
int main( int argc, char *argv[ ] )
{
HDEVINFO hDevInfo;
SP_DEVICE_INTERFACE_DATA ifData;
ifData.cbSize = sizeof(ifData);
DWORD dwError;
hDevInfo = SetupDiGetClassDevs(NULL /*&GUID_CLASS_MONITOR*/, NULL, NULL, DIGCF_ALLCLASSES);
dwError = GetLastError();
BOOL bRtn = SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &GUID_CLASS_MONITOR, 0, &ifData); // GUID_DEVINTERFACE_MONITOR did not work either
dwError = GetLastError();
return 0;
}
我看不出我做错了什么SetupDiGetClassDevs
没有错误,但我尝试的关于SetupDiEnumDeviceInterfaces
的所有内容都返回 259 。
我一直在尝试设备设置以及设备接口GUID而没有运气。
编辑:澄清:bRtn返回0表示SetupDiEnumDeviceInterfaces
失败。 259
错误意味着没有更多项目,但我的系统附加了两个屏幕,因为我在没有GUID的情况下调用SetupDiGetClassDevs
,我预计至少会获得两个屏幕项目。
编辑:按建议添加了cbSize
答案 0 :(得分:2)
您是否知道在致电ifData.cbSize
之前必须正确设置SetupDiEnumDeviceInterfaces
?
(http://msdn.microsoft.com/en-us/library/windows/hardware/ff551015(v=vs.85).aspx)
调用者必须在调用此函数之前将DeviceInterfaceData.cbSize设置为sizeof(SP_DEVICE_INTERFACE_DATA)。
(http://msdn.microsoft.com/en-us/library/windows/hardware/ff552342(v=vs.85).aspx)
将SP_DEVICE_INTERFACE_DATA结构的实例作为参数的SetupAPI函数验证所提供结构的cbSize成员是否等于结构的大小(以字节为单位)。
您没有在代码中设置此值。
答案 1 :(得分:0)
出于某种原因,我通过尝试和错误找到的答案对我来说并不直观,但似乎有效。
由于我无法检索设备设置GUID,但我必须将DIGCF_DEVICEINTERFACE
与设备接口GUID GUID_DEVINTERFACE_MONITOR
一起添加,以便能够检索接口。
感谢提示,因为缺少cbSize也会导致另一个错误:/