尝试使用 AccessibleObjectFromWindow() 时出错

Error trying to use AccessibleObjectFromWindow()

我正在尝试使用 AccessibleObjectFromWindow() 函数,但是我的 main.cpp returns 这些错误:

main.cpp:24: error: undefined reference to 'IID_IAccessible'
main.cpp:27: error: undefined reference to 'AccessibleObjectFromWindow'
main.cpp:-1: error: collect2.exe: error: ld returned 1 exit status

main.cpp

#include <iostream>
#include <windows.h>
#include <winuser.h>
#include <oleacc.h>
#include <OleAuto.h>

int main(int argc, char *argv[]){

    HWND lastForegroundHwnd = GetForegroundWindow();
    DWORD dwId = OBJID_CARET;
    REFIID riid = IID_IAccessible;
    void *ppvObject = NULL;

    HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, dwId, riid, &ppvObject);

    return 0;
}

有谁知道我该如何解决这个问题?

对于第一个错误,您需要 link in uuid.lib

对于第二个错误,你需要在Oleacc.lib中link,只包含oleacc.h.

是不够的

请参阅 Qt Creator 文档中的 Adding Libraries to Projects

或者,您可以在代码中使用 #pragma comment(lib, "filename.lib") 语句,例如:

#pragma comment(lib, "uuid.lib")
#pragma comment(lib, "Oleacc.lib")

附带说明一下,您不需要为 dwIdriid 参数使用变量,只需直接传递它们即可(尤其是 riid )。但更重要的是,您需要将 ppvObject 声明为 IAccessible*,而不是 void*,例如:

IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_IAccessible, (void**)&ppvObject);

更好的选择是使用 IID_PPV_ARGS() 宏,让它为您处理 riidppvObject 参数,例如:

IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_PPV_ARGS(&ppvObject));