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