最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何根據(jù)windows窗口名稱、進程pid打開窗口(pygetwindow)

 更新時間:2026年02月25日 16:22:49   作者:像風(fēng)一樣的男人@  
pygetwindow是一個Python庫,用于獲取、操作和管理當(dāng)前打開的窗口,提供窗口句柄、位置和大小獲取、移動、調(diào)整大小、最小化、最大化、還原窗口、模擬輸入和焦點控制等功能

pygetwindow詳解

簡介

pygetwindow是一個Python庫,用于獲取、操作和管理當(dāng)前打開的窗口。

它提供了一些常用的窗口操作方法,包括獲取窗口句柄,獲取窗口位置和大小,移動和調(diào)整窗口大小,最小化、最大化和還原窗口,以及模擬輸入和焦點控制等。

安裝

pip install pygetwindow==0.0.9

詳解

獲取當(dāng)前所有窗口

import pygetwindow as gw

# 獲取當(dāng)前所有窗口
windows = gw.getAllWindows()
for window in windows:
print(window)

獲取指定標題的窗口

import pygetwindow as gw

# 獲取指定標題的窗口
title = "計算器"
window = gw.getWindowsWithTitle(title)[0]
print(window)

獲取窗口位置和大小

import pygetwindow as gw

# 獲取窗口位置和大小
title = "計算器"
window = gw.getWindowsWithTitle(title)[0]
print(window.left, window.top, window.width, window.height)

移動和調(diào)整窗口大小

import pygetwindow as gw

# 移動和調(diào)整窗口大小
title = "計算器"
window = gw.getWindowsWithTitle(title)[0]
window.moveTo(0, 0)
window.resizeTo(800, 600)

最小化、最大化和還原窗口

import pygetwindow as gw

# 最小化、最大化和還原窗口
title = "計算器"
window = gw.getWindowsWithTitle(title)[0]
# 最小化窗口
window.minimize()
# 最大化窗口
window.maximize()
# 還原窗口
window.restore()

模擬鍵盤輸入和鼠標點擊

import pygetwindow as gw
import time

# 模擬鍵盤輸入和鼠標點擊
title = "計算器"
window = gw.getWindowsWithTitle(title)[0]
window.activate() # 激活窗口,使得鍵盤輸入和鼠標操作生效
window.type("123+456=") # 模擬鍵盤輸入
time.sleep(1) # 等待1秒
window.mouseClick(button="left", x=50, y=50) # 模擬鼠標左鍵單擊

查找窗口

可以使用findTopWindow()方法根據(jù)類名或者窗口標題查找頂層窗口,也可以使用getWindows()方法獲取所有窗口并遍歷查找特定窗口。

import pygetwindow as gw

根據(jù)窗口標題查找頂層窗口

window = gw.findTopWindow(title='My Window')

遍歷所有窗口查找特定窗口

for window in gw.getWindows():
	if 'My Window' in window.title:
		print(window.title)

發(fā)送鍵盤、鼠標事件

可以使用keydown()keyup()方法發(fā)送按鍵事件,使用click()方法發(fā)送鼠標單擊事件,使用dragTo()方法發(fā)送鼠標拖動事件。

# 根據(jù)窗口標題獲取窗口對象
window = gw.getWindowsWithTitle('My Window')[0]

# 發(fā)送按鍵事件
window.keyDown('ctrl')
window.keyDown('alt')
window.keyUp('ctrl')
window.keyUp('alt')

# 發(fā)送鼠標單擊事件
window.click()

# 發(fā)送鼠標拖動事件
window.dragTo(500, 500)

窗口置頂

import win32con
import win32gui
import pygetwindow as gw

window = gw.getWindowsWithTitle('image')[0]
hwnd = window._hWnd
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)

根據(jù)程序名查pid

import psutil

def get_pid_by_name(process_name):
    for proc in psutil.process_iter(['pid', 'name']):
        print(proc.info)
        if proc.info['name'] == process_name:
            return proc.info['pid']
    return None

# 示例使用
process_name = 'python.exe'  # 要查找的程序名字
pid = get_pid_by_name(process_name)
if pid:
    print(f"進程 '{process_name}' 的PID是: {pid}")
else:
    print(f"找不到進程 '{process_name}'")

根據(jù)窗口名結(jié)束程序

class Monitor(object):
    '''監(jiān)控錄屏程序'''
    @classmethod
    def kill_process_by_pid(cls, pid, title):
        '''根據(jù)pid結(jié)束進程'''
        try:
            process = psutil.Process(pid)
            process.terminate()
            logger.error(f"進程 {pid};窗口名:【{title}】 已成功終止。")
        except psutil.NoSuchProcess:
            logger.info(f"找不到PID為 {pid};窗口名:【{title}】 的進程。")

    @classmethod
    def get_all_window_titles_with_pid(cls):
        '''獲取正在運行的窗口'''
        def callback(hwnd, window_titles_with_pid):
            if win32gui.IsWindowVisible(hwnd):
                window_title = win32gui.GetWindowText(hwnd)
                if window_title != '':
                    tid, pid = win32process.GetWindowThreadProcessId(hwnd)
                    window_titles_with_pid.append((window_title, pid))
            return True

        window_titles_with_pid = []
        win32gui.EnumWindows(callback, window_titles_with_pid)
        return window_titles_with_pid

    @classmethod
    def _start(cls):
        pr_name = ['OBS', '格式工廠', '錄屏', '剪輯', ]
        for title, pid in cls.get_all_window_titles_with_pid():
            logger.debug(f"窗口標題: {title}; PID: {pid}")
            for n in pr_name:
                if n in title:
                    cls.kill_process_by_pid(pid, title)

根據(jù)窗口名稱打開窗口

import win32con
import win32gui
import win32print


def get_real_resolution():
    """獲取真實的分辨率"""
    hdc = win32gui.GetDC(0)
    return win32print.GetDeviceCaps(hdc, win32con.DESKTOPHORZRES), \
           win32print.GetDeviceCaps(hdc, win32con.DESKTOPVERTRES)


window_hwnd: list = []
win32gui.EnumWindows(lambda _hwd, param: param.append(_hwd), window_hwnd)
status = False
for hwd in window_hwnd:
    if win32gui.GetWindowText(hwd) == 'MAX BOX 3.1.5':
        import pygetwindow
        width, height = get_real_resolution()
        print(f'激活窗口:{width};{height}')

        window = pygetwindow.getWindowsWithTitle(f"MAX BOX 3.1.5")[0]
        window.activate()

        # win32gui.ShowWindow(hwd, win32con.SW_MAXIMIZE)
        # win32gui.MoveWindow(hwd, (width - 1750) // 2, (height - 850) // 2, 1750, 850, True)
        # status = True
        break

根據(jù)進程pid打開窗口

方法一

import win32gui
import win32process

pid = 1234 # 替換成你要打開的進程的PID

# 獲取指定進程的主窗口句柄
hwnd = win32gui.FindWindow(None, f"PID:{pid}")

# 獲取該進程的線程ID和進程ID
tid, procid = win32process.GetWindowThreadProcessId(hwnd)

# 將該窗口設(shè)為前臺窗口(激活窗口)
win32gui.SetForegroundWindow(hwnd)

需要注意的是,此方法僅適用于Windows系統(tǒng),同樣需要使用管理員權(quán)限運行程序。另外,如果該進程擁有多個窗口,則可能需要在FindWindow()方法中指定更準確的窗口標題或類名等參數(shù),以確保找到正確的窗口。

方法二

import pygetwindow

pid = 1234 # 替換成你要打開的進程的PID

# 找到指定PID的窗口
window = pygetwindow.getWindowsWithTitle(f"PID: {pid}")[0]

# 激活窗口
window.activate()

其中getWindowsWithTitle()方法的參數(shù)可以是窗口的標題、進程ID等。

上述示例中,我們通過"PID: {pid}"來找到指定進程的窗口。如果找到了多個符合條件的窗口,可以通過下標來選擇需要操作的窗口。

需要注意的是,這種方法只能在Windows系統(tǒng)下使用,并且需要使用管理員權(quán)限運行程序。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中uuid模塊實例淺析

    python中uuid模塊實例淺析

    在本篇文章里小編給大家整理了一篇關(guān)于python中uuid模塊實例淺析內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python字符串str超詳細詳解(適合新手!)

    Python字符串str超詳細詳解(適合新手!)

    str函數(shù)是Python的內(nèi)置函數(shù),它將參數(shù)轉(zhuǎn)換成字符串類型,即人適合閱讀的形式,下面這篇文章主要給大家介紹了關(guān)于Python字符串str超詳細詳解的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Python中的類的定義和對象的創(chuàng)建方法

    Python中的類的定義和對象的創(chuàng)建方法

    object?是?Python?為所有對象提供的?基類,提供有一些內(nèi)置的屬性和方法,可以使用?dir?函數(shù)查看,這篇文章主要介紹了Python中的類的定義和對象的創(chuàng)建,需要的朋友可以參考下
    2022-11-11
  • python中的try except與R語言中的tryCatch異常解決

    python中的try except與R語言中的tryCatch異常解決

    這篇文章主要為大家介紹了python中的try except與R語言中的tryCatch異常解決的方式及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 深度學(xué)習(xí)入門之Pytorch 數(shù)據(jù)增強的實現(xiàn)

    深度學(xué)習(xí)入門之Pytorch 數(shù)據(jù)增強的實現(xiàn)

    這篇文章主要介紹了深度學(xué)習(xí)入門之Pytorch 數(shù)據(jù)增強的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Pycharm+Python工程,引用子模塊的實現(xiàn)

    Pycharm+Python工程,引用子模塊的實現(xiàn)

    這篇文章主要介紹了Pycharm+Python工程,引用子模塊的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python中with語句結(jié)合上下文管理器操作詳解

    python中with語句結(jié)合上下文管理器操作詳解

    這篇文章主要給大家介紹了關(guān)于python中with語句結(jié)合上下文管理器操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python判斷完全平方數(shù)的方法

    python判斷完全平方數(shù)的方法

    今天小編就為大家分享一篇python判斷完全平方數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python環(huán)境搭建Makefile簡單使用步驟

    python環(huán)境搭建Makefile簡單使用步驟

    Makefile是一種自動化構(gòu)建工具,通過定義規(guī)則、依賴關(guān)系和執(zhí)行命令,替代手動重復(fù)敲編譯、運行和清理等指令,提升開發(fā)效率,本文給大家介紹python環(huán)境搭建Makefile簡單使用方法,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實現(xiàn)

    Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實現(xiàn)

    本文主要介紹了Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

类乌齐县| 永安市| 彰化市| 绥宁县| 德江县| 武城县| 佛冈县| 鹤壁市| 永仁县| 吉木乃县| 郯城县| 丹棱县| 梁河县| 五台县| 宜兰市| 项城市| 铜川市| 资中县| 哈密市| 射阳县| 重庆市| 施秉县| 景宁| 邵阳县| 新营市| 天水市| 昌平区| 南投县| 西华县| 措勤县| 科尔| 太和县| 德令哈市| 库尔勒市| 墨江| 乌拉特后旗| 外汇| 佛坪县| 奈曼旗| 古丈县| 正蓝旗|