我正在尝试检索一组与显示相关的界面,并且似乎总是收到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

最佳答案

您知道在呼叫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成员是否等于该结构的大小(以字节为单位)。


您没有在代码中显示设置此值。

关于c++ - 显示的SetupDiEnumDeviceInterfaces错误259,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18917583/

10-13 03:26