大屏與監(jiān)控屏使用pywinauto自動(dòng)打開VNC和Chrome并擺放到設(shè)定位置

一、需求

有大屏需要按照配置文件顯示多個(gè)VNC环疼,Chrome琐凭;主要依賴第三方庫如下

configparser#解析ini配置文件
pywinauto#Python自動(dòng)化桌面辦公第三方庫
schedule#Python定時(shí)任務(wù)框架
pyinstaller#用來將Python文件打包成exe

二、前置條件

VNC介紹

  1. VNC可通過CMD如下命令打開之前保存的遠(yuǎn)程地址:
start C:\Program" "Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc
  1. Chrome可通過如下命令打開對(duì)應(yīng)的界面办素,并設(shè)置位置;Chrome參數(shù)介紹
start C:\Program" "Files\Google\Chrome\Application\chrome.exe www.baidu.com --window-position=100,100 --window-size=300,200 --user-data-dir="C:/temp/Chrome/1"

三、主要類介紹

  1. autoIt.ini自定義的配置文件祸穷,定義需要打開VNC,還是瀏覽器勺三;
  2. Props.py與配置文件配套使用的模型類雷滚;
  3. main.py讀取autoIt.ini配置文件,按照配置文件中的appType打開vnc,還是Chrome吗坚;
  4. VNC.py打開對(duì)應(yīng)VNC祈远,按照appName(vnc主機(jī)名)設(shè)置位置呆万、大小
  5. Browser.py打開chrome ,并通過C:/temp/Chrome/1設(shè)置每個(gè)網(wǎng)址打開不通的Chrome车份,設(shè)置位置大小

四谋减、具體代碼

  1. autoIt.ini自定義的配置文件,定義需要打開VNC扫沼,還是瀏覽器出爹;
[section1]
;新的監(jiān)控屏幕叫section1,不可重復(fù)
appCmd =C:\Program Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc
appName =ZS-TEST-98
;appName代表VNC主機(jī)名
appX=100
appY=200
appW=300
appH=200
appTpe=vnc
;appType的取值范圍browser|vnc
[section2]
;新的監(jiān)控屏幕叫section1缎除,不可重復(fù)
appCmd =C:\Program Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc
appName =ZS-TEST-98
appX=400
appY=200
appW=300
appH=200
appTpe=vnc
;appType的取值范圍browser|vnc
[section3]
;新的監(jiān)控屏幕叫section1严就,不可重復(fù)
appCmd =C:\Program Files\Google\Chrome\Application\chrome.exe www.baidu.com
appName =ZS-TEST-99
;瀏覽器appName未使用,可隨意命名
appX=400
appY=400
appW=300
appH=600
appTpe=browser
;appType的取值范圍browser|vnc
[section4]
;新的監(jiān)控屏幕叫section1器罐,不可重復(fù)
appCmd =C:\Program Files\Google\Chrome\Application\chrome.exe www.baidu.com
appName =ZS-TEST-99
appX=700
appY=400
appW=300
appH=600
appTpe=browser
;appType的取值范圍browser|vnc
  1. Props.py與配置文件配套使用的模型類梢为;
# -*- coding: utf-8 -*-
class Props:
    appCmd = "";
    appName = "";
    appX = 0;
    appY = 0;
    appW = 0;
    appH = 0;
    appType = "";#browser|vnc
    def __init__(self,appCmd,appName,appX,appY,appW,appH,appType):
        self.appCmd = appCmd;
        self.appName = appName;
        self.appX = appX;
        self.appY = appY;
        self.appW = appW;
        self.appH = appH;
        self.appType = appType;

    def __str__(self) -> str:
        return  'Props (%s, %s, %d,%d,%d,%d,%s)' % (self.appCmd, self.appName,self.appX ,self.appY ,self.appW ,self.appH,self.appType )
  1. main.py讀取autoIt.ini配置文件,按照配置文件中的appType打開vnc,還是Chrome轰坊;
# -*- coding: utf-8 -*-
import configparser
import schedule
from Browser import Browser
from Props import Props
from VNC import VNC


def readConf():
    config = configparser.ConfigParser()  # 類實(shí)例化
    config.read(r"D:\data\autoIt.ini",encoding="utf8")
    sections = config.sections()
    props = []
    for section in sections:
        appCmd = config.get(section, 'appCmd')
        appName = config.get(section, 'appName')
        appX = int(config.get(section, 'appX'))
        appY = int(config.get(section, 'appY'))
        appW = int(config.get(section, 'appW'))
        appH = int(config.get(section, 'appH'))
        appTpe = config.get(section, 'appTpe')
        prop = Props(appCmd,appName,appX,appY,appW,appH,appTpe)
        props.append(prop)
    return props
def Bloom():
    props = readConf()
    browser = Browser()
    app = VNC()
    browser.close()
    app.close()
    i = 0;
    for prop in props:
        i = i + 1
        if (prop.appType == "browser"):
            browser.run(prop.appCmd, prop.appX, prop.appY, prop.appW, prop.appH, i)
        else:
            app.start(prop.appCmd, prop.appName, prop.appX, prop.appY, prop.appW, prop.appH)
if __name__ ==  "__main__":
    Bloom()
    schedule.every(1).hours.do(Bloom)
    while True:
        schedule.run_pending()
  1. VNC.py打開對(duì)應(yīng)VNC铸董,按照appName(vnc主機(jī)名)設(shè)置位置、大小
# -*- coding: utf-8 -*-
import os

from pywinauto import application
import time


class VNC(object):
    """
    pywin framwork main class
    tool_name : 程序名稱肴沫,支持帶路徑
    windows_name : 窗口名字
    """
    SLEEP_TIME = 1

    def __init__(self):
        """
        初始化方法粟害,初始化一個(gè)app
        """
        self.app = application.Application()


    def run(self, tool_name):
        """
        啟動(dòng)應(yīng)用程序
        """
        self.app.start(tool_name)
        time.sleep(1)
    def max_window(self, window_name):
        """
        最大化窗口
        """
        self.app[window_name].Maximize()
        time.sleep(1)
    def move_window(self,window_name,x = None, y = None, width = None, height = None):
        self.app[window_name].move_window(x,y,width,height)
        time.sleep(1)

    def close(self):
        os.system(f"taskkill /t /f /im vncviewer.exe")
        time.sleep(1)
    def start(self,appCmd,appName,appX,appY,appW,appH):
        self.run(appCmd)
        self.move_window(appName,appX,appY,appW,appH)
if __name__ ==  "__main__":
    app = VNC()
    # 啟動(dòng)程序
    app.run(r"C:\Program Files\RealVNC\VNC4\vncviewer.exe -config D:\data\vnc\10.31.15.98.vnc")
    app.move_window("ZS-TEST-98",100,200,300,400)
    app.close()

  1. Browser.py打開chrome ,并通過C:/temp/Chrome/1設(shè)置每個(gè)網(wǎng)址打開不通的Chrome樊零,設(shè)置位置大小
# -*- coding: utf-8 -*-
import os
import time
from pywinauto import application
class Browser(object):
    """
       pywin framwork main class
       tool_name : 程序名稱我磁,支持帶路徑
       windows_name : 窗口名字
       """
    SLEEP_TIME = 1

    def __init__(self):
        """
        初始化方法,初始化一個(gè)app
        """
        self.app = application.Application()

    def run(self, tool_name):
        """
        啟動(dòng)應(yīng)用程序
        """
        self.app.start(tool_name)
        time.sleep(1)
    def run(self,appCmd,appX,appY,appW,appH,dir):
        position = " --window-position="+str(appX)+","+str(appY)
        size = " --window-size=" + str(appW) + "," + str(appH)
        tmpDir = "C:/temp/Chrome/"+str(dir)
        userDir = " --user-data-dir="+tmpDir
        self.app.start(appCmd+position+size+userDir)
    def close(self):
        os.system(f"taskkill /t /f /im chrome.exe")
        time.sleep(1)
if __name__ ==  "__main__":
    browser = Browser()

    browser.run(r"C:\Program Files\Google\Chrome\Application\chrome.exe www.baidu.com",100,200,300,400,3)

五驻襟、優(yōu)化需求

使用pyinstaller將代碼打包成exe夺艰,實(shí)現(xiàn)點(diǎn)擊exe自動(dòng)運(yùn)行;

  1. 使用Python虛擬環(huán)境沉衣,好處是可按需安裝依賴庫郁副,避免一些庫無法被打包導(dǎo)致打包失敗豌习;
    首先存谎,我們安裝一下pipenv這個(gè)包,方便我們創(chuàng)建虛擬環(huán)境:
pip install pipenv
  1. 然后執(zhí)行如下命令建立虛擬環(huán)境:
pipenv install
  1. 接著執(zhí)行如下命令進(jìn)入虛擬環(huán)境:
pipenv shell
  1. 安裝需要的包
pip install configparser#解析ini配置文件
pip install pywinauto#Python自動(dòng)化桌面辦公第三方庫
pip install schedule#Python定時(shí)任務(wù)框架
pip install pyinstaller#用來將Python文件打包成exe
  1. 運(yùn)行打包命令
pyinstaller -F main.py 
  1. 打包結(jié)果
    在python工程目錄文件夾下生成如下兩個(gè)文件夾肥隆,生成的exe位于dist文件夾下


    企業(yè)微信截圖_16414528311025.png
  2. 將exe加入Windows開啟啟動(dòng)項(xiàng)
    按下win+r打開Windows運(yùn)行框輸入shell:startup打開Windows啟動(dòng)項(xiàng)文件夾
    企業(yè)微信截圖_16414529054082.png
  3. 將第6步生成的exe右鍵既荚,生成快捷方式,將該快捷方式放入第7步打開的文件夾內(nèi)栋艳,即可實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)


    企業(yè)微信截圖_1641453203369.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恰聘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晴叨,老刑警劉巖凿宾,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異兼蕊,居然都是意外死亡初厚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門孙技,熙熙樓的掌柜王于貴愁眉苦臉地迎上來产禾,“玉大人,你說我怎么就攤上這事绪杏∠掠” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵蕾久,是天一觀的道長势似。 經(jīng)常有香客問我,道長僧著,這世上最難降的妖魔是什么履因? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮盹愚,結(jié)果婚禮上栅迄,老公的妹妹穿的比我還像新娘。我一直安慰自己皆怕,他們只是感情好毅舆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愈腾,像睡著了一般憋活。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虱黄,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天悦即,我揣著相機(jī)與錄音,去河邊找鬼橱乱。 笑死辜梳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泳叠。 我是一名探鬼主播作瞄,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼危纫!你這毒婦竟也來了宗挥?” 一聲冷哼從身側(cè)響起节预,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎属韧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤吓,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宵喂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了会傲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅棕。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淌山,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤焦匈,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布岔帽,位于F島的核電站,受9級(jí)特大地震影響退渗,放射性物質(zhì)發(fā)生泄漏移稳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一会油、第九天 我趴在偏房一處隱蔽的房頂上張望个粱。 院中可真熱鬧,春花似錦翻翩、人聲如沸都许。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胶征。三九已至,卻和暖如春絮吵,著一層夾襖步出監(jiān)牢的瞬間弧烤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蹬敲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暇昂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓伴嗡,卻偏偏與公主長得像急波,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘪校,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容