WINAPI方式在windows不同缩放比下取得正确的分辨率


作者: 国家电网河南原阳县供电公司 俏狐:86074731

这个问题我在国内外的很多论坛查资料都没有找到,只有自己研究了,希望可以帮到需要的朋友。本文为原创,转 载请注明出处.

#coding:utf-8

import win32api, win32con


#取出用户DPI
#HKEY_CURRENT_USER\Control Panel\Desktop\LogPixels
def DPI():
reg_root = win32con.HKEY_CURRENT_USER
reg_path = r"Control Panel\Desktop"
reg_flags = win32con.WRITE_OWNER|win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS

#读取键值
key = win32api.RegOpenKeyEx(reg_root, reg_path, 0, reg_flags)
value, key_type = win32api.RegQueryValueEx(key, 'LogPixels')
win32api.RegCloseKey(key)
return value/96

#该参数决定是否使用用户DPI
#HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\UseDpiScaling
def user_DPI():
reg_root = win32con.HKEY_CURRENT_USER
reg_path = r"Software\Microsoft\Windows\DWM"
reg_flags = win32con.WRITE_OWNER|win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS

#读取键值
key = win32api.RegOpenKeyEx(reg_root, reg_path, 0, reg_flags)
value, key_type = win32api.RegQueryValueEx(key, 'UseDpiScaling')
win32api.RegCloseKey(key)
return value

 

def screen_xy(sys_dpi=1):
if user_DPI():
x=int(win32api.GetSystemMetrics(win32con.SM_CXSCREEN)*sys_dpi)
y=int(win32api.GetSystemMetrics(win32con.SM_CYSCREEN)*sys_dpi)
else:
x=int(win32api.GetSystemMetrics(win32con.SM_CXSCREEN))
y=int(win32api.GetSystemMetrics(win32con.SM_CYSCREEN))
return (x,y)

scr=screen_xy(DPI())
print("当前用户的DPI比例是:",DPI())
print('屏幕实际的分辨率:',scr)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM