枚举电池设备c ++ windows

时间:2013-02-07 22:21:09

标签: c++ winapi battery

我使用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:\Users\Owner\AppData\Local\Temp\ccTMeaf9.o:Untitled1.cpp:(.text+0x28): undefined reference to `__imp_SetupDiGetClassDevsA' collect2: ld returned 1 exit status

我是c ++的初学者,所以我可能会遗漏一些明显的东西,但这就是他们在指南中的表现。任何建议都会很棒。

3 个答案:

答案 0 :(得分:3)

文档说谎,GUID实际上是在devguid.h中定义的。另外(如果您还没有在另一个源文件中执行此操作),则需要

#define INITGUID
在包含BatClass.h和devguid.h之前

。如果项目中没有此项,则链接时会出现未定义的符号错误,如果您有多个符号错误,则链接时会出现多重定义的符号错误。

答案 1 :(得分:0)

在我的mingw / GCC标题中的devguid.h和我的旧版MSSDK中定义了它。

尝试添加此内容:

#include <devguid.h>

答案 2 :(得分:0)

以下代码在DevCPP上编译:

#define INITGUID
#include <windows.h>
#include<ddk\batclass.h>
#include<setupapi.h>

int main() {
{
    HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVICE_BATTERY, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
}

注意 GUID_DEVICE_BATTERY

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

该程序未经过测试运行。它只能正确编译。