[源码下载]

背水一战 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 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口的更多相关文章

  1. 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒

    [源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...

  2. Windows 10 IoT Serials 3 - Windows 10 IoT Core Ardunio Wiring Mode

    Maker社区和智能硬件的朋友一定知道Arduino,很多3D打印机都是用它做的.为了迎合这一大块市场,微软在基于Intel Galileo的Windows 8.1 IoT中就是使用这种基于Ardui ...

  3. Windows 10 IoT Serials 2 - Windows 10 IoT RTM 升级教程

    7月29日,微软推出了Windows 10 for PC的正式版,其版本号是Build 10240.近两天官方说已经有4700万的下载安装量,同时这个数字还在不断攀升.另外,除了Windows 10 ...

  4. 【Windows 10 IoT - 3】Windows 10 RTM安装及新特性(树莓派 Pi2)

    在<[Window 10 IoT - 1]Window 10系统安装(树莓派 Pi2)>中,我们介绍了Windows 10 IoT预览版的安装,正式版Windows 10 IOT(OS版本 ...

  5. Windows 10 安装 Docker for Windows

    Docker for Windows是Docker社区版(CE)应用程序. Docker for Windows安装包包括在Windows系统上运行Docker所需的一切. 本主题介绍了预安装注意事项 ...

  6. windows 10开启bash on windows,配置sshd,部署hadoop

    1.安装Bash on Windows 这个参考官网步骤,很容易安装,https://msdn.microsoft.com/en-us/commandline/wsl/install_guide 安装 ...

  7. 在Windows 10 64-bit上安装Windows SDK 7.1和.NET4

    目的: 成功在window10上安装window sdk7.1 和 .NET Framework 4 需求: support some older software written in Visual ...

  8. Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法

    Win + R 键运行 gpedit.msc 找到 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Defender 防病毒程序 右边双击 “关闭Win ...

  9. System.IO命名空间下常用的类

    System.IO System.IO.Directory 目录 System.IO.Path 文件路径(包含目录和文件名) System.IO.FileInfo 提供创建.复制.删除.移动和打开文件 ...

随机推荐

  1. python—列表生成式

    #原始写法 l=[] for i in range(1,11): l.append(str(i).zfill(2)) print(l) #结果:['01', '02', '03', '04', '05 ...

  2. 4-18 class与id的区别

    1. class是设置标签的类, class属性用于指定元素属于何种样式的类. 如样式表可以加入.content1 { color: red; background: #ff80c0 } 使用方法:c ...

  3. SpringCloud微服务负载均衡与网关

    1.使用ribbon实现负载均衡ribbon是一个负载均衡客户端 类似nginx反向代理,可以很好的控制htt和tcp的一些行为.Feign默认集成了ribbon. 启动两个会员服务工程,端口号分别为 ...

  4. 9.Redis高可用-哨兵

    9.Redis高可用-哨兵9.1 基本概念9.1.1 主从复制的问题9.1.2 高可用9.1.3 Redis Sentinel的高可用性9.2 安装和部署9.2.1 部署拓扑结构9.2.2 部署Red ...

  5. Tigase8.0 源代码分析:一、启动篇

    Tigase8.0 引用了IoC(控制反转)和DI(依赖注入) 等技术手段,来对对象的创建和控制.不懂的百度下就知道了,Spring完美的实现IOC ,贴一段解释: 通俗地说:控制反转IoC(Inve ...

  6. 带缓冲I/O 和不带缓冲I/O的区别与联系

    首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用.系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其 ...

  7. Mysql InnoDB下的两种行锁

    今天例举2种常见的Mysql InnoDB下的行锁 现有表dr_test(id pk, name) 数据是 1 zhangsan2 lisi3 wangwu 例子1 事务1 update dr_tes ...

  8. apache启动失败

    1.端口被占用 2.路径及文件夹问题(安装路径的文件夹名称中不能为中文)

  9. Linux学习笔记:安装python

    一般linux自带python2,如果需要python3以上版本,可以不需要卸载自带的python2,二者可以共存.只需要配置相应的环境变量即可. 具体回答可以参考这篇文章 https://stack ...

  10. Java实现多线程生产者消费者模型及优化方案

    生产者-消费者模型是进程间通信的重要内容之一.其原理十分简单,但自己用语言实现往往会出现很多的问题,下面我们用一系列代码来展现在编码中容易出现的问题以及最优解决方案. /* 单生产者.单消费者生产烤鸭 ...