此外,甚至可以在托管代码中正确检测和处理这一切。例如,如果发生这种情况,那么您可以重新初始化 Chromium 并恢复用户会话。...因此,桌面应用程序应具备DPI 感知功能[17],才能在高 DPI 显示器(DPI 比例设置大于 100% 的显示器)上正确运行。...在初始化过程中,它会检查当前进程的 DPI 感知,并为相应的 Chromium 引擎设置匹配的 DPI 感知。因此,无需让您的应用程序显式识别 DPI 以避免在高 DPI 显示上呈现伪影。...无头 DotNetBrowser 和 CefSharp 都可以在没有 UI 的应用程序中使用。...要在没有 UI 的应用程序中使用 DotNetBrowser,您需要像往常一样执行初始化。在这种情况下,没有需要初始化的 BrowserView。
现在,你可以通过在设置中打开一个开关,使得无需注销,只要重新打开应用即可让此应用获取到最新的系统 DPI 的值。...不同 UI 框架对 DPI 的支持情况 UWP UWP 当然支持最新的各种 DPI 感知级别,而且是完全支持。...而 Per-Monitor V1 和 Per-Monitor V2 的支持在操作系统级别是兼容的,所以只需要修改 WPF 中的应用程序清单即可兼容第二代屏幕级 DPI 感知。...Microsoft PowerPoint 的演示页面使用的是屏幕 DPI 感知级别: ▲ 96 DPI 下的演示页面 ▲ 144 DPI 下的演示页面 可以看到,演示页面在多屏 DPI 下是没有产生缩放的模糊...,如果你做到了 System Aware 的要求位图是不会模糊的(Vista 引入 DWM 虚拟化强制拉伸,主要是当时的引用没有做相关支持,在高 DPI 情况下会控件会变得非常小且布局大概率会乱掉)。
此外,甚至可以在托管代码中正确检测和处理这一切。例如,如果发生这种情况,那么您可以重新初始化 Chromium 并恢复用户会话。...因此,桌面应用程序应具备 DPI 感知功能,才能在高 DPI 显示器(DPI 比例设置大于 100% 的显示器)上正确运行。...在初始化过程中,它会检查当前进程的 DPI 感知,并为相应的 Chromium 引擎设置匹配的 DPI 感知。因此,无需让您的应用程序显式识别 DPI 以避免在高 DPI 显示上呈现伪影。...Headless DotNetBrowser 和 CefSharp 都可以在没有 UI 的应用程序中使用。...要在没有 UI 的应用程序中使用 DotNetBrowser,您需要像往常一样执行初始化。在这种情况下,没有需要初始化的 BrowserView。
你的 WPF 窗口是可以拖到屏幕外面去的,所以拉几个元素到屏幕外很正常。你的屏幕可能有多个。你的多个屏幕可能有不同的 DPI。你检测的元素可能带有旋转。...更恐怖的是,WPF 程序声明支持的 DPI 级别不同,计算也会有一些差别。想要写一种支持所有支持级别的代码更加复杂。但本文可以。...Win32 / Windows Forms 方法在来计算屏幕与 UI 元素之间的交叉情况,并且避免在任何时候同时将多个屏幕的坐标进行加减乘除(避免单位不一致的问题)。...关于 DPI 感知设置的问题,可阅读我的其他博客: Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32) - walterlv 支持 Windows...✔️ 多屏有不同 DPI(WPF 感知系统 DPI) ❌ ❌ ✔️ 多屏有不同 DPI(WPF 感知屏幕 DPI) ❌ ❌ ✔️ 多屏有不同 DPI(WPF 感知屏幕 DPI V2) ❌ ❌ ✔️ 纯
高DPI的设备给我们提供了更精细的画质,然而Windows上的大多数应用并没有适配高DPI的显示器,导致应用在这些设备显示模糊,体验非常差。...面板DPI是不变的,OS DPI是可以通过设置改变的,并且应用中获取到的DPI是OS DPI。那么用户就可以通过改变OS DPI来实现缩放系统界面元素和应用界面。...2.5 应用DPI感知级别 前面提到了DWM会使用虚拟化技术来默认处理那些为适配DPI的应用,那么系统怎么判断这个应用有没有适配呢?...声明DPI感知有两种方法,一种方法是通过Manifest进行声明, <asmv3:windowsSettings ......另一种方式是通过SetProcessDPIAware函数进行设置,官方不推荐使用此方式,在两种特殊情况下可以优先考虑这种方式:1.应用本身是一个DLL。2.应用需要按照OS支持不同级别的适配。
image.png ▲ 新建文件的时候选择应用程序清单文件(应用程序配置文件就在旁边) 了解 WPF 清单文件中的 DPI 感知设置 DpiAware 在你打开了 app.manifest 文件后,找到以下代码...在 Windows 8.1 / 10 中,当前进程设置为不感知 DPI(Unaware),就算你调用了 SetProcessDpiAwareness 和 SetProcessDPIAware 也是没有用的...在 Windows 8.1 / 10 中,当前进程设置为不感知 DPI(Unaware),就算你调用了 SetProcessDpiAwareness 和 SetProcessDPIAware 也是没有用的...用这种方式,未来的应用可以指定当前系统不支持的 DPI 感知级别。...第一代和第二代的 Per-Monitor 感知之间的差异,可以参考:Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32) - walterlv
以前可以在 WPF 中使用有限的 UWP 控件,而现在有了 WindowsXamlHost,则可以使用更多 UWP 原生控件了。...因为我们不是原生的 UWP,而是 Host 在 WPF 中的 UWP 控件,所以会没有 Application。这在 UWP 控件初始化内部已经 catch 了,所以你可以忽略。...关于 DPI 适配 为了让 UWP 控件能够在 WPF 窗口中获得正确的 Per-Monitor 的 DPI 适配效果,你需要设置为 PerMonitorV2 的 DPI 感知级别。...在 PerMonitorV2 的 DPI 感知级别下,UWP 控件能够正常获得 DPI 缩放。 在 100% DPI 的屏幕下: ? 在 150% DPI 的屏幕下: ?...关于如何在 WPF 下开启 PerMonitorV2 级别的 DPI 感知可以参见: 支持 Windows 10 最新 PerMonitorV2 特性的 WPF 多屏高 DPI 应用开发 - walterlv
显示/支持 WinForms/WPF需要使使用DPI的桌面应用程序能够在高DPI显示器(DPI Scale设置大于的显示器)上正确运行DPI100%。...注意如果鼠标光标在浏览器中的位置不正确,或者浏览器显示带有渲染/调整大小的黑框/边框,则需要制作您的应用程序DPI Aware。应用程序的其他部分也可能会显得模糊或尺寸不正确。...请确保阅读Windows窗体中的High DPI支持以获取Microsoft的更多详细信息。 使用应用程序清单设置默认感知。...这样可以CEF在需要执行工作时发出通知,在某些情况下,这可能会使您的应用程序响应速度更快。...一种确定何时大致完成渲染的激活成功教程方法是让计时器在每次渲染帧时重置,如果没有其他帧渲染,则计时器将归档(不理想) WinForms 这是在Windows下拍摄屏幕快照的一些示例 使用BitBlt方法捕获当前视图
本身窗体在设计器显示没有问题,但运行时窗口却被缩放失真, 呈现锯齿。...解决方法: 修改项目的配置文件,使项目运行时自动检测屏幕分辨率,在高分辨率屏幕禁用系统缩放,在项目应用程序清单文件里有对禁用高分屏自动缩放的支持 1)右击项目-->添加新建项--->运用程序清单文 2)...-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行 自动缩放。...Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需 选择加入。...将应用程序设为感知长路径。
但是实际上不打包也可以,此时可以和此前的 Win32 应用一样的分发方式进行分发,可以支持到 Win7 系统,当然了在 Win7 系统上可用不了 UWP 的控件,但是至少应用软件自身可以在 Win7 继续运行的...第二个方法是在原有的 WPF 项目中添加应用清单,在应用清单设置可以在 Win10 使用 右击项目添加应用清单 App.manifest 文件,在此文件添加 <supportedOS Id="{8e0f7a12...-- 设计此<em>应用程序</em>与其一起工作且已针对此<em>应用程序</em>进行测试<em>的</em> <em>Windows</em> 版本<em>的</em>列表。取消评论适当<em>的</em>元素, <em>Windows</em> 将自动选择最兼容<em>的</em>环境。...-- 指示该<em>应用程序</em><em>可以</em><em>感知</em> <em>DPI</em> 且 <em>Windows</em> <em>在</em> <em>DPI</em> 较高时将不会对其进行 自动缩放。...<em>Windows</em> Presentation Foundation (WPF)<em>应用程序</em>自动<em>感知</em> <em>DPI</em>,无需 选择加入。
如果你的电脑死掉了,也可以按 Ctrl + Alt + Del 再选择任务管理器打开。 在顶部列表标题上右键,可以选择列,在这里可以打开和关闭各种各样可以查看的进程属性。...关于运行期间改名,可以参见: Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新) - 吕毅。...UAC 虚拟化相关的问题可以阅读 应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果 - 吕毅。 DPI 感知 可以查看进程的 DPI 感知级别。...进程的 DPI 感知级别有以下这些,名字来源于 Windows 系统任务管理器上的显示名称。...Awareness) 关于 DPI 感知级别的更多内容,可以阅读我的其他博客: Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32) - 吕毅
下图可以在 Visual Studio 中的项目上右键属性插件。 新建一个自定义的清单文件 在项目上右键,添加,新建项。可以在新建模板中找到“应用程序清单文件”。确认后即添加了一个新的清单文件。...关于 DPI 感知级别选项,你可以阅读 Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32) - walterlv 和 支持 Windows 10...-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行 自动缩放。...Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需 选择加入。...方法是在属性页中将清单设置为“创建不带清单的应用程序”。
前言:在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试。...,时间上比较慢,通过查看文档发现: 还可以在转换的同时指定图片的大小,对图片指定区域进行截取,这样快很多,一步到位,省去了二次截图的过程,前提是我们必须要知道想要截取哪一块区域并保存。...下面再介绍一种方法pdf2image 2、pdf2image将PDF转换成图片 pdf2image也是个包装器,真正的转换工具是poppler GitHub地址:https://github.com/Belval...pdf_path --> 要转换的PDF文档路径 dpi --> DPI中的图像质量(默认为200),Windows默认为96dpi output_folder --> 将生成的图像写入文件夹(而不是直接写入内存...,暂时还没详细研究其方法,因为已经找到更快的方法解决问题了,对比如下所示: 3、比较PyMuPDF和pdf2image 以下是对一份75页的PDF,输出DPI=96的时间性能对比,pdf2image使用的是默认线程数
前言:在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试。...,时间上比较慢,通过查看文档发现: 还可以在转换的同时指定图片的大小,对图片指定区域进行截取,这样快很多,一步到位,省去了二次截图的过程,前提是我们必须要知道想要截取哪一块区域并保存。...下面再介绍一种方法pdf2image pdf2image 将PDF转换成图片 pdf2image也是个包装器,真正的转换工具是poppler GitHub地址:https://github.com/Belval...文档路径 dpi --> DPI中的图像质量(默认为200),Windows默认为96dpi output_folder --> 将生成的图像写入文件夹(而不是直接写入内存)若是path不做指定的话,...,暂时还没详细研究其方法,因为已经找到更快的方法解决问题了,对比如下所示: 比较PyMuPDF和pdf2image 以下是对一份75页的PDF,输出DPI=96的时间性能对比,pdf2image使用的是默认线程数
这个方法在 WPF 和 控制台都是可以使用。 右击项目,点击添加文件,找到程序清单 ? 在 WPF 使用 UAC 也是一样的方法。... 就可以在程序使用 UAC 权限,文件的名字可以是随意...-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的 Windows 版本的列表。取消评论适当的元素,Windows 将 自动选择最兼容的环境。...-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行 自动缩放。...Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需 选择加入。
,在 targetSdkVersion 大于等于29时,系统加强了对屏幕采集的限制,必须先启动相应的前台 Service,才能正常调用 getMediaProjection 方法,否则会抛异常: java.lang.SecurityException...SurfaceTexture 可以用来捕获视频流中的图像帧,当 SurfaceTexture 中有数据更新时,会触发onFrameAvailable 回调,此时可以调用 updateTexImage 方法从视频流数据中更新当前数据帧...当 SurfaceTexture 中有数据更新时,会触发 onFrameAvailable 回调,我们可以在该回调里对数据进行特定的处理。...鱼和熊掌,往往不可兼得,尤其是在网络、设备性能受限的情况下。...实际上,我们需要感知的是当前屏幕界面横竖屏展示状态而非手机物理上横竖翻转状态。
这个方法在 WPF 和 控制台都是可以使用。 右击项目,点击添加文件,找到程序清单 在 WPF 使用 UAC 也是一样的方法。... 就可以在程序使用 UAC 权限,文件的名字可以是随意...-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的 Windows 版本的列表。取消评论适当的元素,Windows 将 自动选择最兼容的环境。...-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行 自动缩放。...Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需 选择加入。
计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。 ...获取错误信息,参看GetLastError。 备注:客户矩形是指完全包含一个客户区域的最小矩形;窗口矩形是指完全包含一个窗口的最小矩形,该窗口包含客户区与非客户区。 ...有两种方法将窗口设为最顶层窗口:一种是将参数hWndlnsertAfter设置为HWND_TOPMOST并确保没有设置SWP_NOZORDER标志;另一种是设置窗口在Z序中的位置以使其在其他存在的窗口之上...应用程序可以无任何限制地改变被激活窗口在Z序中的位置,或激活一个窗口并将其移到最高级窗口的顶部或非最高级窗口的顶部。 ...如果应用程序不在前台,但应该位于前台,就应调用SetForegroundWindow函数来设置。
此方法特别底层而让调用方法比较复杂,本文告诉大家一些简单的使用方法 本文也属于 WPF 渲染系列博客,更多渲染相关博客请看 渲染相关 在开始之前,我是来劝退的,如果没有特别的需求,还是不推荐使用 DrawGlyphRun...在新的 GlyphRun 的构造里面要求传入 DPI 的值用于清晰化显示,在旧版本的,如 .NET Framework 4.5 版本是不需要的 官方推荐的获取 DPI 的方法是根据当前文本将要渲染出来的控件获取控件的...DPI 的值,通过此方法可以支持多屏幕不同 DPI 的感知。...,不过可以通过以上代码添加自己期望的字体回滚列表,如自己在应用程序里面带了特殊的字体,期望在找不到字体的时候使用自己的字体,就可以使用上面提供的回滚策略代码,使用方法如下 if...{ // 没有可以支持此字符的字体,那就看业务逻辑的处理啦 } 代码 本文所有代码放在 github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码
领取专属 10元无门槛券
手把手带您无忧上云