一、同步方式获取设备的屏幕分辨率

public static class ScreenResolution
{
/// <summary>
/// 获取屏幕高度。
/// </summary>
public static int Height
{
get
{
var rect = PointerDevice.GetPointerDevices().Last().ScreenRect;
var scale = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
return (int)(rect.Height * scale);
}
} /// <summary>
/// 获取屏幕宽度。
/// </summary>
public static int Width
{
get
{
var rect = PointerDevice.GetPointerDevices().Last().ScreenRect;
var scale = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
return (int)(rect.Width * scale);
}
}
}

最初思路来源:http://bbs.wfun.com/thread-860192-1-1.html

测试结果:

Desktop(device Win10 10240)
Correct Value:1920x1080
Test Result:1920x1080

Mobile(emulator W10M 10240 WXGA 4.5 inch)
Correct Value:768x1280
Test Result:768x1280

Mobile(emulator W10M 10240 WVGA 4 inch)
Correct Value:480x800
Test Result:480x854

只有最后一个是不相等的,个人认为是因为虚拟导航栏的原因,因此我觉得该代码理论上是没有问题的,可以投入生产环境。

当然如果不放心的话也可以使用 Win32 API 来获取屏幕分辨率。(已验证此 API 不能在商店应用包中使用,谢谢 @flashcancer 指出)

[DllImport("user32.dll")]
public static extern int GetSystemMetrics(SystemMetric smIndex);
int x = GetSystemMetrics(SystemMetric.SM_CXSCREEN);
int y = GetSystemMetrics(SystemMetric.SM_CYSCREEN);

SystemMetric 是一个枚举类型,定义可以参见:http://pinvoke.net/default.aspx/Enums.SystemMetric

获取出来的结果跟上面 Test Result 是一样的,并且该 API 在 desktop 和 mobile 都可以用。(然而商店不能用,所以然并卵)

商店中允许使用的 Win32 API 一览:https://msdn.microsoft.com/zh-cn/library/windows/apps/jj662956(v=vs.105).aspx(该链接是 WP8 的,但 Win10 应该也差不多)

二、运行时访问 Package.appxmanifest 文件

有些数据是写在 Package.appxmanifest 文件里的,例如磁贴用的图片、启动屏幕用的图片,运行时获取这些信息就只能访问 Package.appxmanifest 文件了。

string manifestPath = Path.Combine(Package.Current.InstalledLocation.Path, "AppxManifest.xml");
XDocument document = XDocument.Load(manifestPath);

编译后,解包我们得知是会变成 AppxManifest.xml 文件,接下来用 XDocument 或者 XmlDocument 解释就可以了。

manifest 的 schema 文档地址:https://msdn.microsoft.com/zh-cn/library/windows/apps/dn934760.aspx

三、获取 GB2312 Encoding

以前 WP8.1 没记错是得到 codeplex 上找这个 Encoding 的,现在不用了。

// 这两句执行一次就可以了,当然重复执行也没坏的。
EncodingProvider provider = CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(provider); Encoding gb2312 = Encoding.GetEncoding("gb2312"); // 抛出 ArgumentException
// Encoding doge = Encoding.GetEncoding("doge");

前两句可以放在 App.cs(当然某些人手贱将入口点改成别的也没大问题)里。执行一次就已经可以了。接下来就可以获取 Encoding 了,当然前提是你机子上有这个 Encoding,没有的话就像上面 doge 那样抛出一个 ArgumentException。

四、获取主题色(AccentColor)

public static Color AccentColor
{
get
{
return new UISettings().GetColorValue(UIColorType.Accent);
}
}

UIColorType 是一个枚举类型,里面还有 Background 的颜色之类的。

当然继续沿用 WP8.1 的方法也可,通过 Resource 来获取,只不过 Win10 里的 ResourceKey 变了。

2015/9/23 更新:

上面该方式仅能在 Desktop 下使用,Mobile 会抛异常。

public static Color AccentColor
{
get
{
return (Color)Application.Current.Resources["SystemAccentColor"];
}
}

所以还是用回 Resource 来获取吧。。。

五、App.cs 里的 Launched 和 Actived 有啥区别

一图流不解释。

之前周末休息整理的,不整理不知道,原来这么乱。话说好久没用 Paint.Net 有点不习惯。

此图乃个人整理,请勿当真,如有错漏,请在评论指出。


最后希望工作的面试能过,顺利拿到 offer,然后早点交接完辞掉现在这份好好休息几天(最近感觉有点累)。

【Win10】一些零碎不好归档的小总结(原谅我这个该死的标题吧)的更多相关文章

  1. win10 下安卓源码同步小技巧

    win10下,通过 清华镜像源 AOSP 可以快速拿到 100G 的 .repo  备份 然后 用 repo sync 就可以得到 安卓源码,爽不爽! 下载到win10 e盘下,用powershell ...

  2. win10 自己DIY的arp绑定小脚本

    @echo off&mode con cols=80 lines=22&title ARP_bind Tools setlocal enabledelayedexpansion rem ...

  3. 初尝微信小程序2-Swiper组件、导航栏标题配置

    swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也 ...

  4. 微信小程序通过JS动态修改页面标题setNavigationBarTitle

    wx.setNavigationBarTitle({title: '当前页面'})

  5. Win10配置ADB工具教程

    1.在该网站下载adb工具 http://pcedu.pconline.com.cn/748/7481463.html 2. Win10怎么配置ADB环境?Win10怎么安装ADB工具?这想必是很多安 ...

  6. Unity萌新日记—开发小技巧与冷知识(脚本篇)

    在学习unity的过程中,总会遇到很多零碎的知识点和小技巧,在此把它们记录下来,方便日后查看. 第一篇是关于脚本的一些你可能不知道的小知识. 还是个正在学习的萌新,如果写的不好,请谅解. Unity版 ...

  7. Win10计算器在哪里?三种可以打开Win10计算器的方法图文介绍

    全新的windows10系统带来了不少新的特性和改变,其中win10的计算器位置就发生了很多的变化,导致很多网友们都以为win10计算器不见了,那么,win10计算器在哪里?如何打开?针对此问题,本文 ...

  8. win10预览版9926升级10049操作步骤

    文章转自:豆豆系统收藏备用 win10预览版系统安装的用户非常多,现在最新版本已经到了10049,但是之前很多装了9926版本或者10041版本的同学在通过系统自动更新的时候,且发现,微软官方提供的速 ...

  9. win10全系列官方MSDN原版系统安装密钥、版本区别、镜像下载地址与激活教程

    微软发布win10正式版已经过去几天了,相信很多同学都心情高涨的装上了期待已久的win10系统,但也有很多同学面对win10系统的众多版本感到一脸茫然,的确,微软在win10系统版本上的划分确实有点多 ...

随机推荐

  1. Python itertools/内置函数

    https://docs.python.org/3.5/library/itertools.html#itertools.starmap // https://docs.python.org/3.5/ ...

  2. where T:new() 是什么意思

    经常看到方法后面加where T:new() ,下面来解释下 比如如下这个方法   protected static T CreateNewInstance<T>() where T :  ...

  3. springmvc el表达式取值顺序问题

    最近遇到一个问题,两次访问同一个controler, 第二次根据判断条件,明明没有设置model的值,在jsp中通过${data}还是能取到值,最后找到原因是 我为了能够加快响应速度,在session ...

  4. 通过阿里OSS文件服务返回的URL获取文件流下载

    我们都知道将文件上传到阿里的OSS文件服务上后,可以通过generatePresignedUrl(bucketName, key, expiration)方法获取该文件的防问路径,但是当我们知道该文件 ...

  5. ECMAScript6新特性之String API

    填充到指定长度,默认使用空格填充. 一 左填充 var arr = []; for(var i=0;i<20;i++){ var str = (i+'').padStart(2,'0'); ar ...

  6. C#.net随机数函数

    (1)Random rnd = new Random(); int rndNum = rnd.Next();           //int 取值范围内的随机数 int rndNum = rnd.Ne ...

  7. 类实现Parcelable接口在Intent中传递

    类实现了Parcelable接口就可以在Intent中传递   只要在类的定义中实现Parcelable接口 代码 package entity; import android.os.Parcel; ...

  8. phpcms中调用外部网站数据

    1.在phpcms后台模块->模块管理->数据源->外部数据源 中 添加外部数据源 2.在phpcms前台模板中,使用get标签获取数据源中数据. {pc:get sql=" ...

  9. WPF之DataGrid控件根据某列的值设置行的前景色(色

    一种方法是 使用 datagrid的LoadingRow事件: private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs ...

  10. python使用wmi模块获取windows下的系统信息监控系统-乾颐堂

    Python用WMI模块获取Windows系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 本文实例讲述了python使用wmi模块获取w ...