title author date CreateTime categories
WPF 一个空的 WPF 程序有多少个窗口
lindexi
2018-12-18 21:16:40 +0800
2018-12-18 21:11:26 +0800
WPF

好多小伙伴说 WPF 的程序有五个窗口,但是我尝试使用了 EnumThreadWindows 去获取的时候居然拿到了 10 多个窗口

WPF 内部的5个窗口之 MediaContextNotificationWindow 听说有五个窗口

可以通过 user32 的 EnumThreadWindows 找到一个线程的窗口

        delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

        [DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,
IntPtr lParam);

获取线程的 id 的方法需要先获取进程,在 Loaded 之后尝试获取 WPF 的进程,通过 Process.GetCurrentProcess() 可以拿到当前的进程

通过 process.Threads 可以拿到进程的线程,封装为一个方法

        delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

        [DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,
IntPtr lParam); static IEnumerable<IntPtr> EnumerateProcessWindowHandles(Process process)
{
var handleList = new List<IntPtr>(); foreach (ProcessThread thread in process.Threads)
{
EnumThreadWindows(thread.Id,
(hWnd, lParam) => { handleList.Add(hWnd); return true; }, IntPtr.Zero);
} return handleList;
}

调用 EnumerateProcessWindowHandles 输出进程就可以拿到这个进程内的所有窗口,于是输入当前的 WPF 的进程,获取一下

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var handleList = EnumerateProcessWindowHandles(Process.GetCurrentProcess());
Debug.WriteLine(handleList.Count());
}

返回的是 14 个窗口,但是如果将代码移动到 WPF 的构造函数,会发现只有两个窗口

        public MainWindow()
{
var handleList = EnumerateProcessWindowHandles(Process.GetCurrentProcess());
Debug.WriteLine(handleList.Count()); InitializeComponent(); Loaded += MainWindow_Loaded;
}

WPF 内部的5个窗口之 MediaContextNotificationWindow

2018-12-18-WPF-一个空的-WPF-程序有多少个窗口的更多相关文章

  1. WPF 一个空的 WPF 程序有多少个窗口

    原文:WPF 一个空的 WPF 程序有多少个窗口 好多小伙伴说 WPF 的程序有五个窗口,但是我尝试使用了 EnumThreadWindows 去获取的时候居然拿到了 10 多个窗口 在 WPF 内部 ...

  2. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...

  3. 2018/03/18 每日一个Linux命令 之 split

    spilt 命令用于将一个文件分割成数个 默认情况下 按照每1000 切割成一个小文件 split [-参数] [要切割的文件] [输出文件名] 参数 -[行数] 指定每多少行切成一个小文件 -b 字 ...

  4. 2018.12.18 bzoj5296: [Cqoi2018]破解D-H协议(bsgs)

    传送门 bsgsbsgsbsgs基础题. 考虑到给的是原根,因此没无解的情况. 于是只需要每次把a,ba,ba,b解出来. 然后可以通过预处理节省一部分时间. 代码: #include<bits ...

  5. flask 小知识总结 2018.12.18

    Visual Studio Code 1.自定义python组建,方便某功能和代码的便捷操作 文件--首选项--用户代码片段--python.json--自定义需要的代码和功能 2.自定义快捷键方法 ...

  6. WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?

    原文:WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里? 在 WPF 程序中,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标 ...

  7. 微信小程序 - 接口更新记录以及解决方案(2018/12/26)

    2018/8/17 - 背景音频需要在app.json添加requireBackGroundModes 2018/9/12 - 微信更改获取用户信息接口/获取位置等接口 - button 2018/1 ...

  8. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  9. 使用 WPF 开发一个 Windows 屏幕保护程序

    最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面.我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的. 本文将介绍如何为 Windows ...

随机推荐

  1. https://vjudge.net/contest/321565#problem/C 超时代码

    #include <iostream> #include <cstdio> #include <queue> #include <algorithm> ...

  2. kaptcha 实现验证码

    依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha< ...

  3. Photoshop基本操作

    PS 工具是我们使用频率比较高的软件之一, 我们学习PS目的不是为了设计海报做电商和UI的,而是要求: 会简单的抠图 会简单的修改PSD效果图 熟练的切图 能和网站美工美眉有共同话题..... Pho ...

  4. Perl 标量

    Perl 标量 标量是一个简单的数据单元. 标量可以是一个整数,浮点数,字符,字符串,段落或者一个完整的网页. 以下实例演示了标量的简单应用: 实例 #!/usr/bin/perl $age = 20 ...

  5. csps模拟93序列,二叉搜索树,走路题解

    题面: 模拟93考得并不理想,二维偏序没看出来,然而看出来了也不会打 序列: 对a,b数列求前缀和,那么题意转化为了满足$suma[i]>=suma[j]$且$sumb[i]>=sumb[ ...

  6. web Magic报错 NoSuchMethodError NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter

    webMagic使用selenium的时候遇到报错: java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTime ...

  7. java反射获取和设置实体类的属性值 递归所有父类

    最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...

  8. VS2010-MFC(常用控件:标签控件Tab Control 下)

    转自:http://www.jizhuomi.com/software/207.html 上一节讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabC ...

  9. PAT甲级——A1110 Complete Binary Tree【25】

    Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...

  10. Java 内部类,成员类,局部类,匿名类等

    根据内部类的位置不同,可将内部类分为 :成员内部类与局部内部类. class outer{ class inner{//成员内部类 } public void method() { class loc ...