日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Python實(shí)現(xiàn)設(shè)置顯示屏分辨率_python

作者:蟲無(wú)涯 ? 更新時(shí)間: 2023-03-02 編程語(yǔ)言

工具安裝

主要調(diào)用win32庫(kù)實(shí)現(xiàn)分辨率獲取和讀寫,需要安裝pywin32

示例中是從execl列表中讀取需要設(shè)置的分辨率,需要安裝xlrd

用到的execl分辨率列表如下:

pip install pywin32
pip install xlrd

完整腳本

import win32api,win32con,time,xlrd

"""
Author:NoamaNelson
Date:2019-11-26
Discription:Python sets the resolution of Windows computer graphics card and obtains the resolution
"""

book1 = xlrd.open_workbook('常見(jiàn)分辨率.xlsx') # 打開(kāi)表格
q = book1.sheet_by_index(0) # 使用索引的方式獲取sheet1工作簿
i = 0
while(i<=5):
    print("第%d次設(shè)置"%i)
    mwidth = str(q.cell_value(i+1,0))    # 獲取單元格中的值
    nwidth = mwidth.split(".")[0]    # 獲取的值為float,轉(zhuǎn)換成字符串然后進(jìn)行分割取整
    WidthSet = int(nwidth) # 從表格中獲取的分辨率寬的值
    #print(WidthSet)

    mhigth = str(q.cell_value(i+1,1))    # 獲取單元格中的值
    nhigth = mhigth.split(".")[0]    # 獲取的值為float,轉(zhuǎn)換成字符串然后進(jìn)行分割取整
    HeightSet = int(nhigth)    # 從表格中獲取的分辨率寬的值
    #print(HeightSet)
    
    ResoLutionSet = win32api.EnumDisplaySettings(None, 0) # 調(diào)用win32api接口,獲取顯示設(shè)備信息

    ResoLutionSet.PelsHeight = HeightSet # 設(shè)置分辨率高
    ResoLutionSet.PelsWidth = WidthSet # 設(shè)置分辨率寬
    print("設(shè)置的分辨率寬: %d, 設(shè)置的分辨率高: %d, 即設(shè)置的分辨率為:%d x %d" % (WidthSet, HeightSet, WidthSet, HeightSet))

    ResoLutionSet.BitsPerPel = 32 # 顯示設(shè)備的顏色分辨率
    ResoLutionSet.DisplayFixedOutput = 2 # 設(shè)置分辨率后拉伸畫面,否則切換到小分辨率時(shí),屏幕只在中間一小塊

    if (win32api.ChangeDisplaySettings(ResoLutionSet, 0)) == 0: # DISP_CHANGE_SUCCESSFUL
        win32api.ChangeDisplaySettings(ResoLutionSet, 0) # 設(shè)置生效
    else:
        win32api.ChangeDisplaySettings(None, 0) # 恢復(fù)默認(rèn)

    screenNum = win32api.GetSystemMetrics(win32con.SM_CMONITORS)
    print("顯示設(shè)備的總數(shù)量為: %d" % screenNum)

    aScreenWidth = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
    aScreenHeight = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
    print("當(dāng)前屏幕總的分辨率為:%d × %d " % (aScreenWidth, aScreenHeight))

    WidthGet = win32api.GetSystemMetrics(win32con.SM_CXSCREEN) # 獲得屏幕分辨率X軸
    HeightGet = win32api.GetSystemMetrics(win32con.SM_CYSCREEN) # 獲得屏幕分辨率Y軸
    print ("獲取的分辨率寬: %d, 獲取的分辨率高: %d, 即獲取的分辨率為:%d x %d" % (WidthGet, HeightGet, WidthGet, HeightGet))
    time.sleep(3)
   
    i += 1

輸出的結(jié)果

存在的問(wèn)題

目前使用這種方式,只能設(shè)置顯卡列表支持的分辨率,不支持自定義分辨率。不知道有什么更好的方式,有知道的大牛給指導(dǎo)下。

原文鏈接:https://segmentfault.com/a/1190000043288975

欄目分類
最近更新