【问题标题】:How do I prevent GetSystemMetrics() in Python using a Windows PC from returning different/wrong values?如何使用 Windows PC 防止 Python 中的 GetSystemMetrics() 返回不同/错误的值?
【发布时间】:2015-05-20 09:36:07
【问题描述】:

我正在使用这段代码从使用 Python 2.7 的 Surface Pro 第一代 Win 8.1 PC 打印出显示器分辨率:

   import ctypes
   from ctypes import windll
   user32 = ctypes.windll.user32
   screensize = (user32.GetSystemMetrics(0), user32.GetSystemMetrics(1))
   print "Screensize:", screensize

但问题是,我通过命令提示符运行它与通过 Python shell 运行脚本得到不同的结果。

仅运行脚本我得到 1280x720,但通过 IDLE Shell 我得到 1920x1080。

现在,由于我在 Surface Pro 上运行它,我几乎可以肯定这与 DPI 缩放有关(有人提出了类似的问题 here)。如果是这种情况,那一定是因为 Python IDLE 已禁用 DPI 缩放。

那么,我如何防止这种情况发生,以便在运行此代码时获得一致且准确的结果,而不管它是如何运行的、运行它的机器类型是什么,或者是否禁用了 DPI 缩放?也许是 CEF Python?

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 您确实遇到了DPI virtualization 的问题,为了让应用程序 DPI 知道它们必须包含正确的清单文件或在任何会触发虚拟化的 Win API 调用之前调用 SetProcessDpiAwareness 函数。我不知道如何对 Python 脚本执行此操作...
  • 顺便说一句,当您从 Python IDLE 运行脚本并更正数字时,您会得到错误的(虚拟化)数字,因为 Python IDLE 是 Dpi 感知,因此您的脚本会通过它启动也是。
  • 看看这个answer

标签: python-2.7 screen-resolution dpi getsystemmetrics


【解决方案1】:

如需监控信息,请致电GetMonitorInfo

【讨论】:

  • 请原谅我的无知,但是你能举个例子来说明如何调用它吗?
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多