美文网首页
python获取当前最上层活动窗口的路径_version2

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

作者: book_02 | 来源:发表于2020-02-24 18:57 被阅读0次

    在文章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)
    

    相关文章

      网友评论

          本文标题:python获取当前最上层活动窗口的路径_version2

          本文链接:https://www.haomeiwen.com/subject/jlriqhtx.html