C# 确定metro应用程序正在Windows 8选项卡或桌面PC中运行

C# 确定metro应用程序正在Windows 8选项卡或桌面PC中运行,c#,windows-8,microsoft-metro,windows-runtime,C#,Windows 8,Microsoft Metro,Windows Runtime,我正在开发windows 8 metro风格的应用程序。与平板电脑相比,该应用程序在台式电脑上运行时具有更多功能。但我的问题是如何检测应用程序在PC或Tab中运行。 我不想为PC和TAB分别发布2版本 请帮帮我。 更新:什么时候可以用GetSystemMatrics实现? 在桌面上,我们的应用程序的行为类似于客户端和服务器,但在选项卡和移动设备上,它的行为类似于仅客户端我的建议是调用CoreDLL中的GetSystemInfo API 下面是一个示例调用: [DllImport("cor

我正在开发windows 8 metro风格的应用程序。与平板电脑相比,该应用程序在台式电脑上运行时具有更多功能。但我的问题是如何检测应用程序在PC或Tab中运行。 我不想为PC和TAB分别发布2版本

请帮帮我。 更新:什么时候可以用GetSystemMatrics实现?
在桌面上,我们的应用程序的行为类似于客户端和服务器,但在选项卡和移动设备上,它的行为类似于仅客户端

我的建议是调用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处理器上。您可能需要找到目标的特定处理器类型,或传入目标处理器类型列表。

Windows.Devices命名空间包含大量有关设备功能的信息。例如,要确定设备是否已启用触摸功能,您可以使用:

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

@Mahantesh:如果是台式电脑和平板电脑(不包括笔记本电脑),那么你可以检查“电池属性”,如交流/电池供电、电池剩余量等。据我所知,这些属性仅适用于使用电池供电的电脑&当然,台式电脑不会这样做


更简单地说,电池通知不适用于我的台式电脑,而适用于我的笔记本电脑。

你为什么关心它是平板电脑?CPU对你重要吗?还是有鼠标/键盘?还是别的?@svick:在桌面上,我们的应用程序的行为类似于客户端和服务器,但在选项卡和移动设备上,它的行为只类似于客户端。当用户将平板电脑放入带有键盘、鼠标和外部显示器的扩展底座时,会发生什么?你能定义“平板电脑”吗?为什么要在平板电脑上阉割你的应用程序?许多Win8平板电脑都将是功能齐全的PC。我将附和其他评论,并说,看看平板电脑和桌面电脑是错误的。您需要了解一下为什么会有这种区别——您是否只希望服务器拥有足够快的CPU?是不是你不想浪费电池寿命?是关于网络连接吗?是关于触摸功能吗?假设所有平板电脑都是ARM是错误的。今天的确如此,但英特尔有意打入这一市场。没错,但在这样的速度下,除了硬件之外,平板电脑还有什么不同于标准PC?我们可以检查一下是否缺少鼠标或键盘,我想也可以检查一下类型。可能是屏幕大小?WPF应用程序通常与不同大小的屏幕配合得很好,因此我想下一个问题是,平板电脑和pc机之间的区别是什么?最初的问题是“如果在台式pc机上运行,则会有更多功能”。由于这些功能没有定义,我无法回答您的问题。@markransem:在桌面上,我们的应用程序的行为类似于客户端和服务器,但在选项卡和移动设备上,它的行为类似于客户端。我不区分台式电脑和标签功能。我正在区分我的应用程序功能。没错。不过,看看沃尔玛、史泰博和许多其他商店出售的HP TouchSmart台式机。它们是带有触摸屏的全桌面PC。您不想仅仅通过测量触摸而意外地认为自己在平板电脑上。@Mahantesh:如果您觉得这很有用,请添加投票…)我没有太多。一台台式电脑可以通过连接电池备份/UPS系统(通常通过usb)来具有“电池属性”。@hometoast:是的,最肯定的是,它可以……但它们的百分比很小/可以忽略不计(我还没有看到1,更不用说使用它了)。我并不是说我们应该忽略它们或其他什么,但例外总是存在的。这只是一个解决办法:)