我正在尝试查看应用程序是在笔记本电脑上还是在桌面上运行,有关如何实现这一目标的任何想法?
注意:我只对使用Delphi和/或C ++编写的API感兴趣。
编辑:我的目标平台是Windows XP +,即使Windows 7也可以。最后编辑:谢谢大家的帮助,我创建了一个带帮助方法的单元(在Delphi中)随意翻译成C ++或其他语言和/或帮助扩展(或修复可能)缺陷)。 该单位可在http://www.delphigeist.com/2011/02/laptop-specific-functions.html
找到答案 0 :(得分:16)
使用此结构:SYSTEM_POWER_STATUS
,并检查ACLineStatus
字段的值。
免责声明:尝试尝试这些。我不是在说他们是否可靠。但他们几乎正确。
-
编辑:
使用GetSystemPowerStatus
获取上述结构的值。
顺便说一句,你也可以试验结构的其他领域;也许你可以找到一些有用的模式,给你一些不同领域的值组合,以帮助你可靠地检测应用程序是否在笔记本电脑上运行。
答案 1 :(得分:9)
我认为没有一种标准的方法可以检查应用程序是否在笔记本电脑上运行,但我认为还没有必要了解这一点的标准理由。
关键是笔记本电脑与桌面没有太大的不同:有些笔记本电脑永远不会被移动,我想可以用嵌入式UPS构建一个桌面(看作电池吗?)< / p>
我认为你应该知道它是否是一台笔记本电脑,使用你需要的功能来检查笔记本电脑:
您是否想知道它是否是笔记本电脑,因为如果计算机可能会被移动,您的应用程序需要采取不同的行为?然后检查是否已插入电池。
您想知道它是否是笔记本电脑,以确定是否可以修改硬件?在这种情况下,请检查主板型号或询问对话框。
你是否需要检查它,以便知道如果长时间使用太长时间是否会烧死?只需监控温度......
答案 2 :(得分:4)
我不相信有一种可靠的方法来检测它。
答案 3 :(得分:3)
显然,隐藏的问题是公司的笔记本电脑通常没有足够的内存,但公司的台式机却没有。要解决此特定问题,请将用于内存的内存与安装的内存进行比较:EnumProcesses()
和GetProcessMemoryInfo
告诉您第一个; GetPhysicallyInstalledSystemMemory()
告诉你第二个。
如果它们距离太近,您可以通知用户有使用2.5 GB的73个正在运行的进程,但只有2GB的RAM存在。这是您的程序无法启动的正当理由。
答案 4 :(得分:2)
MSDN讨论了电源和设备感知应用程序的API here
您还可以查看其他内容:
如果上述某些数字属实,那么您可以假设笔记本电脑。
您也可以在安装时询问用户....
答案 5 :(得分:1)
以下是您可能会发现对此问题有用的一些其他答案和链接:
How to detect when the laptop is running on batteries?
How can I tell if a user is using a laptop
后者还讨论了WMI,而答案以.NET为中心,你可以使用Delphi的WMI。