确定 Metro 应用程序在 Windows 8 平板电脑还是台式电脑上运行

13

我正在开发Windows 8 Metro风格的应用程序。如果在台式机上运行,此应用程序具有比平板电脑更多的功能。但我的问题是如何检测应用程序正在PC或平板电脑上运行。 我不想分别发布两个版本以供PC和平板电脑使用。

请帮助我。 更新:是否可以使用GetSystemMetrics来实现? 在桌面上,我们的应用程序像客户端和服务器一样运行,但在平板电脑和移动设备上,它只能像客户端一样运行。


5
你为什么关心这是一台平板电脑?CPU对你来说很重要吗?还是有鼠标/键盘的存在?或者其他原因? - svick
@svick:在桌面上,我们的应用程序表现得像客户端和服务器,但在平板电脑和移动设备上,它只表现为客户端。 - Shashi
4
当用户将他们的平板电脑放入带有键盘、鼠标和外部显示器的插座站时会发生什么? - Raymond Chen
1
你能定义一下“平板电脑”吗?为什么要在平板电脑上缩减应用程序的功能呢?因为许多Win8平板电脑都是完全功能齐备的个人电脑。 - jv42
2
我会重复其他评论并说,仅从平板电脑和桌面电脑的角度来看是错误的。你需要考虑为什么要区分它们——是因为你只想在足够快的CPU上运行服务器吗?还是因为你不想浪费电池寿命?还是因为网络连接的问题?还是因为触摸功能的问题? - Eclipse
3个回答

7

Windows.Devices 命名空间提供了关于设备功能的丰富信息。例如,要确定设备是否支持触控功能,您可以使用以下代码:

var hasTouch = Windows.Devices.Input
                  .PointerDevice.GetPointerDevices()
                  .Any(p => p.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch);

4
可以。然而,请看一下沃尔玛、史泰普斯和许多其他商店销售的HP TouchSmart台式电脑。它们是具有触摸屏功能的完整台式电脑。你不想仅仅因为Touch的大小而错误地认为自己在使用平板电脑。 - djdanlib

5
如果是针对桌面电脑和平板电脑(不包括笔记本电脑)的话,您可以检查“电池属性”(例如AC/电池供应、电池剩余等),据我所知,这些属性仅适用于使用电池电源的计算机,而桌面电脑显然没有这个功能。
简单来说,我的台式电脑没有电池通知,而我的笔记本电脑有。

@Mahantesh:如果您觉得这个有帮助,请投一票... :) 我没有很多。 - Viral Jain
一台桌面电脑可以通过连接备用电池/UPS系统(通常通过USB)来具有“电池属性”。 - hometoast
@hometoast:是的,绝对可以有...但它们的百分比微不足道(我还没有看到过一个,更别说使用它了)。我的意思不是我们应该忽视它们或什么,但是例外总是存在的。这只是一个解决方法 :) - Viral Jain

0

我的建议是调用CoreDLL中的GetSystemInfo API。

以下是一个示例调用:

    [DllImport("coredll")]
    static extern void GetSystemInfo(ref SYSTEM_INFO pSI); 

    public struct SYSTEM_INFO
    {
        public uint dwOemId;
        public uint dwPageSize;
        public uint lpMinimumApplicationAddress;
        public uint lpMaximumApplicationAddress;
        public uint dwActiveProcessorMask;
        public uint dwNumberOfProcessors;
        public uint dwProcessorType;
        public uint dwAllocationGranularity;
        public uint dwProcessorLevel;
        public uint dwProcessorRevision;
    }

如果您从平板电脑中获取此信息,它应该返回处理器类型2577,因为我认为它正在运行ARM处理器。您可能需要找到您要针对的特定处理器类型或传递一个目标处理器类型列表。

4
假设所有平板电脑都采用ARM芯片是一个错误的想法。虽然现在大部分是这样,但英特尔有意进军这个市场。 - Mark Ransom
真的,但是以那种速度,除了硬件之外,平板电脑与标准PC有什么不同呢?我想我们可以检查是否缺少鼠标或键盘,或者类型。可能是屏幕尺寸吗?WPF应用程序通常可以很好地适应不同大小的屏幕,所以下一个问题是区分平板电脑和PC的目的是什么。 - Mike Calvert
1
原始问题陈述为“如果在桌面电脑上运行,会有更多功能”。由于这些功能未被定义,我无法回答您的问题。 - Mark Ransom
@MarkRansom:在桌面上,我们的应用程序行为类似客户端和服务器,但在标签页和移动设备中,它仅表现为客户端。我不区分桌面电脑和标签页功能。我区分我的应用程序功能。 - Shashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接