用python关闭,打开的“文件资源管理器”?

我用python写了一个小程序:每隔3分钟完成一次音频的合成,就会弹出一个文件夹【音频合成地址的窗口,比如:“D:\Code”】我想关闭这个文件夹窗口(文件资源管理器),用python怎么实现?

我有尝试过用,pywinauto、pyautogui 模拟鼠标点击窗口的X(关闭),但是鼠标是移动过去了,就是不点击!找不到原因。
后面尝试模拟键盘用 alt+F4,也不行,没有反应!找不到原因。
后面尝试中间加一个 AHK脚本模拟鼠标,也失败告终。

主要是解决:如何关闭一个windows窗口(文件资源管理器),提点一下就可以了,
还有为什么用pywinauto、pyautogui,操作windows窗口(文件资源管理器),比如alt+f4,选中文件夹中的文件后按f2重命名,这些都没有效果呢?但是在文本框中都是正常的。

讨论数量: 6

我的建议是,使用 os.system 来通过命令行关闭文件资源管理器窗口。 我这里给出一个参考代码,你可以试试看

import os

# 获取你要关闭的文件夹的窗口句柄
folder_path = r"D:\Code"
window_title = os.path.basename(folder_path)

# 使用命令行工具 nircmd 来关闭窗口
os.system(f'nircmd win close title "{window_title}"')

不过要使用这个,你最好在你的电脑上安装 nircmd ,然后把它添加到你的环境变量中。

nircmd 作为一个命令行工具,功能挺强大的,通常用来执行各种窗口操作,自然也包括关闭窗口。

至于 pywinauto 和 pyautogui 的问题,这两个库都是用来自动化 windows GUI 操作的,理论上应该可以用来关闭文件资源管理器窗口,关于这个,我就不太清楚为什么你失败了。

9个月前 评论
rivenven (楼主) 8个月前
rivenven (楼主) 8个月前
rivenven (楼主) 8个月前

这个问题可能是因为在弹出新窗口后,焦点没有正确地转移到新窗口上。你可以尝试使用app.top_window()获取当前的最顶端的窗口,然后对这个窗口执行关闭操作。代码如下:

top_window = app.top_window()
top_window.close()

如果这个方法仍然无效,你可以尝试使用app.window(title="窗口标题")方法,通过窗口的标题来获取指定的窗口,然后执行关闭操作。这个操作会比较麻烦。

new_window = app.window(title="新窗口的标题")
new_window.close()

还有就是,我所提供的参考代码只是关闭新窗口,如果你需要在关闭新窗口后执行其他的操作,需要在new_window.close()之后添加更多的代码。

至于’”D:\Code”这个路径下生成新文件夹’这个问题,可以用监控方案。

import os
import time
from pywinauto.application import Application

app = Application("uia").connect(process=7960) 

def get_dir_count(path):
    # 获取指定路径下的文件夹数量
    return len([name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))])

prev_dir_count = get_dir_count("D:\\Code") # 初始的文件夹数量

while True:
    time.sleep(180) # 每隔3分钟检查一次
    curr_dir_count = get_dir_count("D:\\Code") # 当前的文件夹数量
    if curr_dir_count > prev_dir_count: # 如果文件夹数量增加了
        # 关闭新弹出的窗口
        top_window = app.top_window()
        top_window.close()
        prev_dir_count = curr_dir_count

os模块可以监控”D:\Code”这个路径下的文件夹变化。当检测到新的文件夹被创建时,就使用pywinauto来关闭新弹出的窗口。

8个月前 评论
rivenven (楼主) 8个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!