python获取当前最上层活动窗口的路径_version2
2020-02-24 本文已影响0人
book_02
在文章python获取当前最上层活动窗口的路径中说明了如何用python脚本获取最上层活动窗口的路径,但是要求窗口标题栏中必须是窗口的绝对路径。
这个要求使得脚本使用起来非常得不方便,因此对上面那个脚本进行了改进,使得窗口标题栏为非绝对路径下也能使用。
步骤
- 使用模块
win32gui
-
win32gui.GetForegroundWindow()
可以获取最上层活动窗口的句柄 - 判断获取的句柄是否是文件夹
文件夹的类型名字是'CabinetWClass'
。
通过win32gui.GetClassName(window) == 'CabinetWClass'
可以获取的句柄是否是文件夹 - 获取窗口的路径
此时不再通过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)