确定Metro应用程序正在Windows 8选项卡或台式PC中运行

Mah*_*esh 13 c# microsoft-metro windows-8 windows-runtime

我正在使用Windows 8 metro风格开发应用程序.如果它在平板电脑上运行,与平板电脑相比,此应用程序还有一些功能.但我的问题是如何检测app在PC或Tab中运行.我不想单独为PC和TAB发布2版本.

请帮我.更新:Wheter是否可以使用GetSystemMatrics进行更新?在桌面上,我们的应用程序的行为类似于客户端和服务器,但在选项卡和移动设备中,它的行为类似于客户端

小智 7

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

var hasTouch = Windows.Devices.Input
                  .PointerDevice.GetPointerDevices()
                  .Any(p => p.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch);
Run Code Online (Sandbox Code Playgroud)

  • 真正.但是,请查看在沃尔玛和斯台普斯以及许多其他商店出售的HP TouchSmart台式机.它们是完整的台式电脑,带有触摸屏.你不想只是通过测量Touch来意外地认为你在平板电脑上. (4认同)

Vir*_*ain 5

@Mahantesh:如果它专门用于台式电脑和平板电脑(不包括笔记本电脑),那么你可以查看"电池属性",例如交流/电池供电,电池剩余等等,据我所知,这些只适用于电池供电的电脑电源&当然桌面不这样做.

简单来说,电池通知不适用于我的台式电脑,而它适用于我的笔记本电脑.


小智 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;
    }
Run Code Online (Sandbox Code Playgroud)

如果您从平板电脑获取此信息,它应该返回处理器类型 2577,因为我相信它在 ARM 处理器上运行。您可能需要查找您要定位的特定处理器类型或传入目标处理器类型列表。

  • 假设所有平板电脑都是 ARM 是错误的。今天确实如此,但英特尔有意打入该市场。 (4认同)