如何判断用户是否使用笔记本电脑?

时间:2010-05-14 19:50:47

标签: .net winforms system

我需要一种方法让我的.Net Winform应用程序检测我的应用是否在笔记本电脑或工作站上打开。

我查看了EnvironmentSystemInformation,但无济于事。 WMI可以解决这个问题吗?

感谢方向......


根据要求,我有一个使用合并复制的应用程序,允许我们的用户在会员家中工作。一些使用该程序的人永远不会进入现场,因此只有塔。这是一个仅限工作的应用程序,因此我们的系统在某种程就像在桌面上没有UPS和没有笔记本电脑CPU一样。

我已经设置了DAL,以便能够在本地SQL和中央SQL Server之间切换设置。我希望能够根据系统自动设置。

如果是笔记本电脑那么他们应该指向本地,如果是塔,集中。

这有帮助吗?我故意把它关掉,以免弄乱答案。对于为完成相反的道歉而道歉。

7 个答案:

答案 0 :(得分:13)

由于涉及边缘情况,这是一个非常难以解决的问题。我现在还不知道你的应用程序需要多准确,但这是一个可靠的方法来确定用户是否在一台黑色笔记本电脑上。

Win32_Battery

您可能需要查看EstimatedRunTime。

  

<强> EstimatedRunTime

Data type: uint32
Access type: Read-only

Estimate in minutes of the time to battery charge depletion under the
     

如果实用程序存在负载条件   电源关闭,或丢失并保持关闭,   或者笔记本电脑与...断开连接   能量源。这个属性是   继承自CIM_Battery。

您也可以查看:

Win32_PortableBattery

此外,这是一个有趣的讨论类似问题和处理UPS。

http://forum.bigfix.com/viewtopic.php?pid=19908

具体做法是:

"Microsoft ACPI-Compliant Control Method Battery"

此外,正如评论中所述,您必须考虑将笔记本电脑上的用户插入墙上并断开电池。

答案 1 :(得分:4)

http://msdn.microsoft.com/en-us/library/Aa394474

然后看看

ChassisTypes

Value Meaning
1 Other
2 Unknown
3 Desktop
4 Low Profile Desktop
5 Pizza Box
6 Mini Tower
7 Tower
8 Portable
9 Laptop
10 Notebook
11 Hand Held
12 Docking Station
13 All in One
14 Sub Notebook
15 Space-Saving
16 Lunch Box
17 Main System Chassis
18 Expansion Chassis
19 SubChassis
20 Bus Expansion Chassis
21 Peripheral Chassis
22 Storage Chassis

答案 2 :(得分:3)

使用(see this question)获取处理器类型:

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")

如果您确定它是移动处理器,那么您就得到了答案。

(值得注意的是,WMI会为您提供更好的信息,如我所链接的问题所述。)

答案 3 :(得分:1)

根据您的最新信息,我有几点建议。

  1. 将其设为可配置选项。在安装或第一次运行期间询问它们是什么。这比猜测要准确得多。

  2. 如果您已经有合并复制...为什么不将每个人视为断开连接/远程用户?

答案 4 :(得分:1)

我已成功测试了以下批处理文件,但仅在几台计算机上进行了测试:

@echo off
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\ACPI" /s | find "DeviceDesc" | find "ACPI Lid" > nul
if errorlevel 1 (
    echo This computer IS NOT a laptop ^(no ^"ACPI Lid^" device found in Registry^)
) else (
    echo This computer IS a laptop ^(^"ACPI Lid^" device found in Registry^)
)
echo. & pause

答案 5 :(得分:0)

也许您可以查询电池信息?

查看this

答案 6 :(得分:0)

您可以在C ++中检查计算机是否有盖子。 我认为只有笔记本电脑有盖子,因此应该检查一下此参数。

SYSTEM_POWER_CAPABILITIES  oPowerCapabilities;

CallNtPowerInformation( POWER_INFORMATION_LEVEL::SystemPowerCapabilities, NULL, 0, &oPowerCapabilities, sizeof( oPowerCapabilities ) );

if( oPowerCapabilities.LidPresent == 1 )
{
    cout<<"Laptop";
}
else
{
    cout<<"PC";
}