- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序恰好是使用 Python 编写的,它使用包装 SDL 的 pygame,但我想这可能是与 Windows API 相关的更普遍的问题。
在我的一些 Python 应用程序中,即使在高分辨率下,我也希望在 Windows 10 下进行逐像素控制。例如,我希望能够确保如果我的 Surface Pro 3 具有 2160x1440 的原始分辨率,那么我可以进入具有这些尺寸的全屏模式并呈现完全具有这些尺寸的全屏图像。
这样做的障碍是“DPI 缩放”。默认情况下,在 Windows 的设置 -> 显示下,“更改文本、应用程序和其他项目的大小”的值为“150%(推荐)”,结果是我只能看到我的图像的 2/3。我发现了如何解决这种行为......
python.exe
和 pythonw.exe
,通过转到这些可执行文件的“属性”对话框、“兼容性”选项卡,然后单击“在高 DPI 设置上禁用显示缩放”。我可以为我一个人或为所有用户执行此操作。我还可以通过以编程方式在注册表中设置适当的键来自动执行此过程。或通过 .exe.manifest
文件(这似乎也需要更改全局设置,以更喜欢外部 list ,可能会对其他应用程序产生副作用)。 winapi
调用(或在 SDL 中失败,由 pygame 包装的东西)可以实现这一点,但到目前为止,我的研究是一片空白。
最佳答案
这是我正在寻找的答案,基于 IInspectable 和 andlabs 的评论(非常感谢):
import ctypes
# Query DPI Awareness (Windows 10 and 8)
awareness = ctypes.c_int()
errorCode = ctypes.windll.shcore.GetProcessDpiAwareness(0, ctypes.byref(awareness))
print(awareness.value)
# Set DPI Awareness (Windows 10 and 8)
errorCode = ctypes.windll.shcore.SetProcessDpiAwareness(2)
# the argument is the awareness level, which can be 0, 1 or 2:
# for 1-to-1 pixel control I seem to need it to be non-zero (I'm using level 2)
# Set DPI Awareness (Windows 7 and Vista)
success = ctypes.windll.user32.SetProcessDPIAware()
# behaviour on later OSes is undefined, although when I run it on my Windows 10 machine, it seems to work with effects identical to SetProcessDpiAwareness(1)
typedef enum _PROCESS_DPI_AWARENESS {
PROCESS_DPI_UNAWARE = 0,
/* DPI unaware. This app does not scale for DPI changes and is
always assumed to have a scale factor of 100% (96 DPI). It
will be automatically scaled by the system on any other DPI
setting. */
PROCESS_SYSTEM_DPI_AWARE = 1,
/* System DPI aware. This app does not scale for DPI changes.
It will query for the DPI once and use that value for the
lifetime of the app. If the DPI changes, the app will not
adjust to the new DPI value. It will be automatically scaled
up or down by the system when the DPI changes from the system
value. */
PROCESS_PER_MONITOR_DPI_AWARE = 2
/* Per monitor DPI aware. This app checks for the DPI when it is
created and adjusts the scale factor whenever the DPI changes.
These applications are not automatically scaled by the system. */
} PROCESS_DPI_AWARENESS;
SetProcessDpiAwareness
将失败并显示
errorCode = -2147024891 = 0x80070005 = E_ACCESSDENIED
如果之前已经为当前进程调用过它(包括在进程启动时由系统调用,由于注册表项或
.manifest
文件)
关于winapi - 可以在每个 session 的基础上以编程方式启用/禁用 DPI 缩放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398075/
一个非常简单的问题,如果我创建一个 HANDLE在 app1.exe 中,它得到值 0x01这个值是全局唯一的吗? 或者当其他一些进程创建一个 HANDLE 时是否有可能?也有值(value) 0x0
我正在使用winapi-rs crate并尝试获取cpu的使用率,但是我什至无法做到这一点。 PdhCollectQueryData转换为十六进制时将返回“-2147481643”,然后错误代码为“0
有人可以告诉我,在 winapi 中将进度条作为 TreeView 控件的一部分是否现实?我使用 GTK 制作了一个 GUI,并且使用进度条作为单元格元素效果很好,如下图所示。 我没有开发自定义控件的
有 getaddrinfo() 用于阻止主机解析,但是否有非阻塞方法? 最佳答案 我不认为有这样的事情,但你总是可以将它包装在一个线程中并使用信号量来表示完成。 关于winapi - 在 WINAPI
如果我知道 Hwnd,如何获取正在运行的应用程序的图标? 最佳答案 如果你有窗口的句柄,你可以使用 GetClassLong : HICON icon = (HICON)GetClassLong(wi
我正在尝试阅读 IMAGE_DOS_HEADER使用 definition of that structure 的模块来自 winapi箱。 这是我的工作代码: let mut IDH: IMAGE_
我目前正在阅读MSDN的文档,以将流渲染到音频渲染器。 换句话说,就是从麦克风播放我捕获的数据。 http://msdn.microsoft.com/en-us/library/dd316756%28
我有一个问题,希望你能帮我解决。已经没有我的研究运气了...尝试过 stackoverflow、google,甚至 yahoo... 如何在不使用鼠标的情况下强制显示工具提示? 我目前正在实现一些窗口
在 D 中,每次启动应用程序时,我的垃圾收集器都会崩溃。 Windows 模块: pragma(lib, "user32.lib"); import std.string; extern(Window
我正在学习 WinAPI C++ 的绘图形状 我试图在 WM_PAINT 上用一些代码绘制 2 个椭圆: PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps)
我使用 PostMessage 模拟鼠标事件并在记事本应用程序上进行了测试。 我不想通过发送鼠标事件来获得记事本应用程序的焦点。 仅当我在 PostMessage 参数中使用记事本的 ChildWin
如何使用 Win32 WinAPI 创建一个 EditBox,使其看起来像在 Visual C# 或 VB 中的 VS 设计器中放置一个编辑框(具有漂亮的顶部边框等)?这是一张图片,展示了它的外观以及
有CopyRect WinAPI function ,它只是复制一个 RECT到另一个。 自从我挖掘它以来,我一直对这个函数存在的原因很感兴趣。 是赋值运算符 ( = ) 还是 CopyMemory功
只是想知道是否有一种方法可以将数字打印到控制台通过调用。它可以是 10 进制,也可以是十六进制,我不介意。 我想看看一些函数返回的格式。 我宁愿不使用 WriteConsole 和大量 asm 来做这
这似乎部分有效,但我无法获取要打印的字符串值 pub fn test() { let mut buf: Vec = vec![0; 64]; let mut sz: DWORD = 0
在 Excel 中使用 Visual Basic,我可以使用 DECLARE 关键字声明 WinAPI 函数 - 例如 Declare Function SetLocaleInfo Lib "kern
..嗨,我有这个代码: #[cfg(windows)] extern crate winapi; use winapi::um::winuser::{FindWindowW, GetClientRec
我有一个 WH_CALLWNDPROC Hook 代码,它处理 WM_INITDIALOG 消息以获取有关消息框的信息。我可以获得“消息”、“标题”、“按钮”,但无法获得“图标”信息。我正在尝试使用如
这是我的源代码: extern crate user32; extern crate kernel32; use std::io::prelude::*; use std::net::TcpStrea
WinAPI OpenFile 函数返回 HFILE,例如 GetFileTime 需要 HANDLE。当我用 (HANDLE)some_hFile 喂它时,它似乎工作正常。这种类型有什么不同吗,或者
我是一名优秀的程序员,十分优秀!