python获取当前最上层活动窗口的路径_version2

2020-02-24  本文已影响0人  book_02

在文章python获取当前最上层活动窗口的路径中说明了如何用python脚本获取最上层活动窗口的路径,但是要求窗口标题栏中必须是窗口的绝对路径。

这个要求使得脚本使用起来非常得不方便,因此对上面那个脚本进行了改进,使得窗口标题栏为非绝对路径下也能使用。

步骤

  1. 使用模块win32gui
  2. win32gui.GetForegroundWindow()可以获取最上层活动窗口的句柄
  3. 判断获取的句柄是否是文件夹
    文件夹的类型名字是'CabinetWClass'
    通过win32gui.GetClassName(window) == 'CabinetWClass'可以获取的句柄是否是文件夹
  4. 获取窗口的路径
    此时不再通过win32gui.GetWindowText(window)获取窗口的标题作为窗口的路径,因为这个路径可能是非绝对路径。

可以通过获取地址栏里的文本(文件夹的绝对路径),如下图所示:


python脚本

#!/usr/bin/python
# -*- coding: utf-8 -*- 

import win32gui
import os
import os.path
import shutil

SW_HIDE = 0
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
file_name = '_ReadMe.txt'
template_file = 'D:\\91_tools\\_ReadMe_template.txt'


def enumerationCallaback(hwnd, results):
    className = win32gui.GetClassName(hwnd)
    text = win32gui.GetWindowText(hwnd)
    # 找出地址栏
    if(className == 'ToolbarWindow32'):
        # change pattern if in no-chinese system
        pattern = '地址: '.decode('utf-8').encode('gb2312') 
        if(text.find(pattern) >= 0):
            results.append(text[6:])


def get_path(path):
    for i in range(500):
    # while True:
        window = win32gui.GetForegroundWindow()
        if (window != 0):                
            if (win32gui.GetClassName(window) == 'CabinetWClass'):
                win32gui.EnumChildWindows(window, enumerationCallaback, path)
                break
            else:
                # 使用python.exe执行python脚本的时候,会弹出控制台窗口,如下代码能把控制台置入后台
                if (win32gui.GetClassName(window) == 'ConsoleWindowClass'):
                    win32gui.ShowWindow(window, SW_MINIMIZE)
上一篇下一篇

猜你喜欢

热点阅读