我需要一种方法让我的.Net Winform应用程序检测我的应用是否在笔记本电脑或工作站上打开。
我查看了Environment
和SystemInformation
,但无济于事。 WMI
可以解决这个问题吗?
感谢方向......
根据要求,我有一个使用合并复制的应用程序,允许我们的用户在会员家中工作。一些使用该程序的人永远不会进入现场,因此只有塔。这是一个仅限工作的应用程序,因此我们的系统在某种程就像在桌面上没有UPS和没有笔记本电脑CPU一样。
我已经设置了DAL,以便能够在本地SQL和中央SQL Server之间切换设置。我希望能够根据系统自动设置。
如果是笔记本电脑那么他们应该指向本地,如果是塔,集中。
这有帮助吗?我故意把它关掉,以免弄乱答案。对于为完成相反的道歉而道歉。
答案 0 :(得分:13)
由于涉及边缘情况,这是一个非常难以解决的问题。我现在还不知道你的应用程序需要多准确,但这是一个可靠的方法来确定用户是否在一台黑色笔记本电脑上。
您可能需要查看EstimatedRunTime。
<强> EstimatedRunTime 强>
Data type: uint32 Access type: Read-only Estimate in minutes of the time to battery charge depletion under the
如果实用程序存在负载条件 电源关闭,或丢失并保持关闭, 或者笔记本电脑与...断开连接 能量源。这个属性是 继承自CIM_Battery。
您也可以查看:
此外,这是一个有趣的讨论类似问题和处理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)
根据您的最新信息,我有几点建议。
将其设为可配置选项。在安装或第一次运行期间询问它们是什么。这比猜测要准确得多。
如果您已经有合并复制...为什么不将每个人视为断开连接/远程用户?
答案 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";
}