0

ディスプレイ関連のインターフェイスのセットを取得しようとしていますが、常に 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ていることはわかりませんが、エラーはありませんが、私が試したことはすべて259SetupDiEnumDeviceInterfacesを返します。デバイスのセットアップとデバイス インターフェイスの GUID の両方を試してみましたが、うまくいきませんでした。

編集: 明確化: bRtn は、SetupDiEnumDeviceInterfaces失敗したことを意味する 0 を返します。エラーは259アイテムがないことを意味しますが、私のシステムには 2 つの画面が接続SetupDiGetClassDevsされており、GUID なしで呼び出しているため、少なくとも 2 つの画面アイテムを取得することを期待していました。

編集:提案されたようにcbSizeを追加

4

2 に答える 2

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 メンバーが構造体のサイズ (バイト単位) と等しいかどうかを確認します。

コードでこの値を設定することを示していません。

于 2013-09-20T13:18:41.357 に答える
0

何らかの理由で、試行錯誤して見つけた答えは直感的ではありませんが、うまくいくようです。

デバイス セットアップ GUIDを取得できないため、インターフェイスを取得できるようにするには、DIGCF_DEVICEINTERFACEデバイス インターフェイス GUID に組み合わせて追加する必要がありました。GUID_DEVINTERFACE_MONITOR

cbSize が欠落していると別のエラーが発生する可能性があるため、ヒントをありがとう:/

于 2013-09-20T13:31:19.413 に答える