枚举电池设备c++窗口

Enumerating battery devices c++ windows

本文关键字:c++ 窗口 枚举      更新时间:2023-10-16

我使用windows api来获取各种硬件信息,如cpu使用情况和电池信息。我一直在按照本指南获取电池设备的名称http://msdn.microsoft.com/en-us/library/windows/desktop/bb204769%28v=vs.85%29.aspx但是我到了这里就被卡住了。

#define INITGUID
#include<windows.h>
#include<batclass.h>
#include<setupapi.h>
#include<devguid.h>
using namespace std;
int main()
{
HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVCLASS_BATTERY, 0, 0, DIGCF_PRESENT 
| DIGCF_DEVICEINTERFACE);
}

但是我得到以下错误

[Linker error] C:UsersOwnerAppDataLocalTempccTMeaf9.o:Untitled1.cpp:(.text+0x28): undefined reference to `__imp_SetupDiGetClassDevsA' collect2: ld returned 1 exit status

我是c++的初学者,所以我可能会错过一些显而易见的东西,但这就是他们在指南中的做法。任何建议都很好。

文档撒谎了,GUID实际上是在devguid.h中定义的。此外(如果你还没有在另一个源文件中这样做),你需要

#define INITGUID

在包含BatClass.h和devguid.h之前,如果您的项目中没有这样的错误,则在链接时会得到一个未定义的符号错误,如果您有多个错误,则会在链接时得到多个定义的符号。

它是在devguid.h中我的mingw/GCC头文件和MSSDK的旧副本中定义的。

尝试添加以下内容:

#include <devguid.h>

以下代码在DevCPP上编译:

#define INITGUID
#include <windows.h>
#include<ddkbatclass.h>
#include<setupapi.h>
int main() {
{
    HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVICE_BATTERY, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
}

注意GUID_DEVICE_BATTERY

为了获得正确的链接,您必须在项目选项|参数|链接器中添加库libsetupapi.a

程序未测试为运行。它只能正确编译。