【问题标题】:Laptop Battery Status?笔记本电脑电池状态?
【发布时间】:2009-07-23 20:02:19
【问题描述】:

有什么方法可以在 Windows 和 Linux 之间以可移植的方式从 C++ 程序获取电池的状态(充电/放电/当前充电/容量/等...)。我正在做一个供我自己使用的小程序,需要一些帮助。请在我的博客上查看程序的描述:


The JB Journals

另外,有什么方法可以实际查看计算机当前是否连接到互联网。我目前正在通过请求 www.google.com 并查看是否收到“503 错误”作为回报来执行此操作。有更好的方法吗?我正在将 libCurl 用于我程序的 web 界面部分,但想知道是否有更好的选择...

【问题讨论】:

  • -1:“Windows 和 Linux 之间的可移植方式”很少——如果有的话——实际上会发生。您正在使用哪些库或框架?赛格温?任何真正“便携”的东西?

标签: c windows linux internet-connection


【解决方案1】:
  1. 在 windows 和 linux 之间没有可移植的方式来获取电池状态。您必须查询完全不同的 API。您必须查看是否有人为此编写了包装器,但很可能您需要自己做。 (也许你问是否有任何包装器或库?)

  2. 有很多方法可以查看计算机是否连接到 Internet,但基本上都归结为 ping 可能已启动的主机(如 google)。我使用 ping 而不是 http 连接。有各种 C 库可用于执行您自己的 ping(无需调用程序)。

【讨论】:

  • ping 不能防止由于 dns 重定向而导致的误报。
  • 对不起,我忘了提。是的,我正在寻找各种图书馆。目前,我正在使用 DBus 连接到 GNOME 电源管理小程序,并且我正在寻找某种方法来在 Windows 上获得相同的功能(BatteryStatusChange 上的信号)。
【解决方案2】:

关于您关于以编程方式确定您是否连接到互联网的第二个问题。在 google.com 请求中查找 503 并非万无一失。许多 wifi 网络会重定向流量或以其他方式提供不正确的 dns 名称,以防止您在未经他们授权的情况下连接到互联网。

例如,如果您不支付 comcast 账单,comcast 会重写所有 dns 响应以将您指向一个 IP 地址,告诉您支付您的 comcast 账单。从 http 层的角度来看,没有发生错误,您已经成功完成了对 google.com 的 http 请求。不幸的是页面的内容不同。

【讨论】:

    【解决方案3】:

    正如您可能从各种答案中推断出的那样,“已连接到互联网”问题的格式不正确。您无法对计算机进行内部操作来确定它连接到哪种网络。您可以拥有有效的 IP,但位于专用网络上。 ICMP ping 可能会被防火墙过滤,但 HTTP 不会。到任意主机的 HTTP 可能会动态路由到本地“立即付款”帐户管理应用程序。故障模式的列表不胜枚举。如果您确实需要知道是否可以访问 Internet 上的给定服务,则需要尝试连接到该服务。

    我无法谈论 Windows 中的电源管理问题,但在 linux 中读取电池状态就像打开 /proc/acpi/battery 下的文件一样简单(可能有多个电池目录,每个目录都包含“state " 和 "info" 文件,带有纯文本、人类可读的字段。

    【讨论】:

      【解决方案4】:

      要测试互联网连接,请检查您的 IP 地址。如果您在 linux 中有 0.0.0.0,在 windows 中有 169.254.x.y,则没有

      ifconfig (linux)
      ipconfig (windows)
      

      【讨论】:

      • 这不是一个好的检查。这只检查您是否有 IP 地址,以及您是否连接到某个本地网络。不是整个互联网。
      • 因为我是通过 WiMax 设备连接的,所以我实际上一直连接到 Wateen 网络。我必须实际登录才能访问互联网。所以我确实有一个IP。还有什么办法吗?
      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多