背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口
作者:webabcd
介绍
背水一战 Windows 10 之 其它
- 通过 Windows.System.Profile 命名空间下的类获取信息
- 查找指定类或接口的所在程序集的所有子类和子接口
示例
1、演示如何通过 Windows.System.Profile 命名空间下的类获取信息
Information/ProfileInfo.xaml
<Page
x:Class="Windows10.Information.ProfileInfo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Information"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" TextWrapping="Wrap" Margin="0 10 10 10" /> </StackPanel>
</Grid>
</Page>
Information/ProfileInfo.xaml.cs
/*
* 演示如何通过 Windows.System.Profile 命名空间下的类获取信息
*
* 主要可获取到设备类型,系统版本号等
*/ using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; using Windows.System.Profile; namespace Windows10.Information
{
public sealed partial class ProfileInfo : Page
{
public ProfileInfo()
{
this.InitializeComponent(); this.Loaded += ProfileInfo_Loaded;
} private void ProfileInfo_Loaded(object sender, RoutedEventArgs e)
{
// 获取设备类型,目前已知的返回字符串有:Windows.Mobile, Windows.Desktop, Windows.Xbox
lblMsg.Text = string.Format("DeviceFamily: {0}", AnalyticsInfo.VersionInfo.DeviceFamily);
lblMsg.Text += Environment.NewLine; // 获取系统版本号,一个长整型值
lblMsg.Text += string.Format("DeviceFamilyVersion: {0}", AnalyticsInfo.VersionInfo.DeviceFamilyVersion);
lblMsg.Text += Environment.NewLine; // 将长整型的系统版本号转换为 major.minor.revision.build 的方式
string versionString = AnalyticsInfo.VersionInfo.DeviceFamilyVersion;
ulong version = ulong.Parse(versionString);
ulong v1 = (version & 0xFFFF000000000000L) >> ;
ulong v2 = (version & 0x0000FFFF00000000L) >> ;
ulong v3 = (version & 0x00000000FFFF0000L) >> ;
ulong v4 = (version & 0x000000000000FFFFL);
string v = $"{v1}.{v2}.{v3}.{v4}"; lblMsg.Text += string.Format("DeviceFamilyVersion(major.minor.revision.build): {0}", v);
lblMsg.Text += Environment.NewLine; // 获取当前的“向 Microsoft 发送你的设备数据”的收集等级。在“设置”->“隐私”->“反馈和诊断”中配置(Security, Basic, Enhanced, Full)
lblMsg.Text += string.Format("PlatformDiagnosticsAndUsageDataSettings.CollectionLevel: {0}", PlatformDiagnosticsAndUsageDataSettings.CollectionLevel);
lblMsg.Text += Environment.NewLine; // 检查当前配置是否允许指定级别的信息收集
lblMsg.Text += string.Format("PlatformDataCollectionLevel.Full: {0}", PlatformDiagnosticsAndUsageDataSettings.CanCollectDiagnostics(PlatformDataCollectionLevel.Full));
lblMsg.Text += Environment.NewLine; // 在“设置”->“隐私”->“反馈和诊断”中配置的“向 Microsoft 发送你的设备数据”发生变化时触发的事件
PlatformDiagnosticsAndUsageDataSettings.CollectionLevelChanged += PlatformDiagnosticsAndUsageDataSettings_CollectionLevelChanged;
} private async void PlatformDiagnosticsAndUsageDataSettings_CollectionLevelChanged(object sender, object e)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
lblMsg.Text += string.Format("PlatformDiagnosticsAndUsageDataSettings.CollectionLevel: {0}", PlatformDiagnosticsAndUsageDataSettings.CollectionLevel);
lblMsg.Text += Environment.NewLine; lblMsg.Text += string.Format("PlatformDataCollectionLevel.Full: {0}", PlatformDiagnosticsAndUsageDataSettings.CanCollectDiagnostics(PlatformDataCollectionLevel.Full));
lblMsg.Text += Environment.NewLine;
});
}
}
}
2、用于查找指定类或接口的所在程序集的所有子类和子接口
Tools/FindSubClass.xaml
<Page
x:Class="Windows10.Tools.FindSubClass"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Tools"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<ScrollViewer Margin="10 0 10 10">
<StackPanel Name="root" Margin="5"> <Button Name="btnFind" Content="查找指定类或接口的所在程序集的所有子类或子接口" Margin="1 5 1 20" Click="btnFind_Click" /> </StackPanel>
</ScrollViewer>
</Grid>
</Page>
Tools/FindSubClass.xaml.cs
/*
* 用于查找指定类或接口的所在程序集的所有子类和子接口
*/ using System;
using System.Reflection;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.Linq; namespace Windows10.Tools
{
public sealed partial class FindSubClass : Page
{
public FindSubClass()
{
this.InitializeComponent();
} private void btnFind_Click(object sender, RoutedEventArgs e)
{
// 这样不行
// Type type = Type.GetType("Windows.UI.Xaml.Controls.Button"); Type type = typeof(Windows.UI.Xaml.UIElement); List<Type> subTypes = GetSubTypes(type);
AddWrapGrid(subTypes);
} private void AddWrapGrid(List<Type> subTypes)
{
VariableSizedWrapGrid wrapGrid = CreateWrapGrid();
root.Children.Add(wrapGrid); foreach (Type type in subTypes)
{
Button button = CreateButton(type);
wrapGrid.Children.Add(button);
}
} private void Button_Click(object sender, RoutedEventArgs e)
{
FrameworkElement button = sender as FrameworkElement;
Type type = button.Tag as Type; int index = ;
// 删除被选中按钮的所属容器,以及此容器之后的所有控件
if (button.Parent.GetType() == typeof(VariableSizedWrapGrid))
index = root.Children.IndexOf(button.Parent as UIElement);
// 删除被选中按钮,以及此按钮之后的所有控件
else
index = root.Children.IndexOf(button);
while (root.Children.Count > index)
{
root.Children.RemoveAt(root.Children.Count - );
} // 将被选中按钮添加到根容器
Button buttonNew = CreateButton(type);
root.Children.Add(buttonNew);
root.Children.Add(new Grid() { Height = }); // 将被选中类的所有子类添加到根容器
List<Type> subTypes = GetSubTypes(type);
AddWrapGrid(subTypes);
} private VariableSizedWrapGrid CreateWrapGrid()
{
VariableSizedWrapGrid wrapGrid = new VariableSizedWrapGrid();
wrapGrid.Orientation = Orientation.Vertical;
wrapGrid.ItemWidth = ;
wrapGrid.HorizontalAlignment = HorizontalAlignment.Stretch; return wrapGrid;
} private Button CreateButton(Type type)
{
Button button = new Button();
button.Content = type.ToString();
button.Margin = new Thickness();
button.Tag = type;
button.Click += Button_Click; return button;
} // 获取儿子类,孙子及以下级别不会返回
private List<Type> GetSubTypes(Type type)
{
List<Type> subTypes = new List<Type>(); Type[] assemblyTypes = type.GetTypeInfo().Assembly.GetTypes(); foreach (Type t in assemblyTypes)
{
if (type.GetTypeInfo().IsInterface)
{
if (t.GetInterfaces().Contains(type))
{
subTypes.Add(t);
}
}
else
{
if (t.GetTypeInfo().BaseType == type)
{
subTypes.Add(t);
}
}
} subTypes = subTypes.OrderBy(p => p.FullName).ToList(); return subTypes;
}
}
}
OK
[源码下载]
背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口的更多相关文章
- 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒
[源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...
- Windows 10 IoT Serials 3 - Windows 10 IoT Core Ardunio Wiring Mode
Maker社区和智能硬件的朋友一定知道Arduino,很多3D打印机都是用它做的.为了迎合这一大块市场,微软在基于Intel Galileo的Windows 8.1 IoT中就是使用这种基于Ardui ...
- Windows 10 IoT Serials 2 - Windows 10 IoT RTM 升级教程
7月29日,微软推出了Windows 10 for PC的正式版,其版本号是Build 10240.近两天官方说已经有4700万的下载安装量,同时这个数字还在不断攀升.另外,除了Windows 10 ...
- 【Windows 10 IoT - 3】Windows 10 RTM安装及新特性(树莓派 Pi2)
在<[Window 10 IoT - 1]Window 10系统安装(树莓派 Pi2)>中,我们介绍了Windows 10 IoT预览版的安装,正式版Windows 10 IOT(OS版本 ...
- Windows 10 安装 Docker for Windows
Docker for Windows是Docker社区版(CE)应用程序. Docker for Windows安装包包括在Windows系统上运行Docker所需的一切. 本主题介绍了预安装注意事项 ...
- windows 10开启bash on windows,配置sshd,部署hadoop
1.安装Bash on Windows 这个参考官网步骤,很容易安装,https://msdn.microsoft.com/en-us/commandline/wsl/install_guide 安装 ...
- 在Windows 10 64-bit上安装Windows SDK 7.1和.NET4
目的: 成功在window10上安装window sdk7.1 和 .NET Framework 4 需求: support some older software written in Visual ...
- Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法
Win + R 键运行 gpedit.msc 找到 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Defender 防病毒程序 右边双击 “关闭Win ...
- System.IO命名空间下常用的类
System.IO System.IO.Directory 目录 System.IO.Path 文件路径(包含目录和文件名) System.IO.FileInfo 提供创建.复制.删除.移动和打开文件 ...
随机推荐
- 类的反射及xml文件的解析
类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...
- linux服务器使用Jenkins+gradle+git打apk包,报错Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
linux服务器使用Jenkins+gradle+git打apk包,遇到的错误Gradle build daemon disappeared unexpectedly (it may have bee ...
- Quartz.Net进阶之七:QuartzNet其他的功能简述
一.介绍 今天是这个系列的最后一篇文章了,主要功能说的差不多了,我们来看看其他相关的内容.话说回来,虽然是这个系列的最后一篇文章,并不代表Quartz的东西就这么点,学习阶段,就这些了,如果以后有了使 ...
- skynet记录6:定时器
稍后填坑 kernel中,每一次时钟中断会trap到kernel code,这个时间间隔称之为jiffies,每秒钟发生的次数为HZ 如果是4核,分配到每个核就是HZ/4 cat /boot/conf ...
- 现代编译原理——第二章:语法分析之LL(K)
转自: http://www.cnblogs.com/BlackWalnut/p/4472122.html LL(K)语法分析技术是建立在预测分析的技术之上的.我们先来了解预测分析技术.考虑以下文法: ...
- linux下修改时间戳
Linux下touch是一个非常有用的命令. touch语法结构如下: touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间&g ...
- [转]JSOUP 抓取HTTPS/HTTP网页,校验问题
针对一般的http请求是不需要的校验的.但是https安全校验过总过不去.最后找到以下方法,终于成功. 让我们的站点信任所有站点,不需要引包,系统自带ssl证书校验,话不多数,贴代码. /** * 信 ...
- MybatisMapper 动态映射(增删改查)
//接口内容以及注意事项 package cn.jy.mybatis.mapper; import java.util.List; import cn.jy.mybatis.pojo.User; pu ...
- 《修炼之道:.NET开发要点精讲》读书笔记(二)
1.简述.NET中CTS.CLS以及CLR的含义与作用. A:CTS指公共类型系统,是.NET平台中各种语言必须遵守的类型规范:CLS指公共语言规范,是.NET平台中各种语言必须遵守的语言规范:CLR ...
- EasyPOI校验实现返回错误信息及行号
IExcelModel 获取错误信息 public class ExcelVerifyEntity implements IExcelModel { private String errorMsg; ...