python资源管理器选择文件_Python:在资源管理器中获取选定文件的列表(windows7)...

我知道现在在这里发布答案有点晚了,但我几个月前尝试过Olav的解决方案,但它没有完全起作用:工作目录是脚本的工作目录,所以我不得不删除if条件才能使其工作,但它选择了所有Windows资源管理器窗口中的所有文件(我也希望这样做,所以这部分对我有效)。但现在我回来继续我的项目(一个助理),我发现我真的需要这个工作,所以我考虑这个想法(这不是很难想到,但我花了几个月的时间…)。我不知道这个答案是否对其他人有用,但对我来说,它并不完全有效,所以我想我可以改进它,并在这里发布我的解决方案。这段代码是这个答案的混合体(我在同一个脚本中也使用过,但从未想过让它们一起工作):https://stackoverflow.com/a/43892579/8228163(至少在Windows7下可以工作)和Olav的答案以及对我有用的结果——脚本只在当前的Windows资源管理器窗口中检测文件。我想从Vista(也许,我不知道它的年龄超过7岁)到10岁,但我不完全确定。另一个答案是使用XP。当我在Windows10上启动这个脚本时,我认为它是有效的,但是我已经没有10个了,所以我不能确定(我又用了7,所以对于7来说这是有效的)。在import win32gui, time

from win32con import PAGE_READWRITE, MEM_COMMIT, MEM_RESERVE, MEM_RELEASE, PROCESS_ALL_ACCESS, WM_GETTEXTLENGTH, WM_GETTEXT

from commctrl import LVS_OWNERDATA, LVM_GETITEMCOUNT, LVM_GETNEXTITEM, LVNI_SELECTED

import os

import struct

import ctypes

import win32api

import datetime

import win32com.client as win32

import win32ui

import psutil

import subprocess

import time

import urllib.parse

clsid = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}' #Valid for IE as well!

def getEditText(hwnd):

# api returns 16 bit characters so buffer needs 1 more char for null and twice the num of chars

buf_size = (win32gui.SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0) +1 ) * 2

target_buff = ctypes.create_string_buffer(buf_size)

win32gui.SendMessage(hwnd, WM_GETTEXT, buf_size, ctypes.addressof(target_buff))

return target_buff.raw.decode('utf16')[:-1]# remove the null char on the end

def _normaliseText(controlText):

'''Remove '&' characters, and lower case.

Useful for matching control text.'''

return controlText.lower().replace('&', '')

def _windowEnumerationHandler(hwnd, resultList):

'''Pass to win32gui.EnumWindows() to generate list of window handle,

window text, window class tuples.'''

resultList.append((hwnd, win32gui.GetWindowText(hwnd), win32gui.GetClassName(hwnd)))

def searchChildWindows(currentHwnd,

wantedText=None,

wantedClass=None,

selectionFunction=None):

results = []

childWindows = []

try:

win32gui.EnumChildWindows(currentHwnd,

_windowEnumerationHandler,

childWindows)

except win32gui.error:

# This seems to mean that the control *cannot* have child windows,

# i.e. not a container.

return

for childHwnd, windowText, windowClass in childWindows:

descendentMatchingHwnds = searchChildWindows(childHwnd)

if descendentMatchingHwnds:

results += descendentMatchingHwnds

if wantedText and \

not _normaliseText(wantedText) in _normaliseText(windowText):

continue

if wantedClass and \

not windowClass == wantedClass:

continue

if selectionFunction and \

not selectionFunction(childHwnd):

continue

results.append(childHwnd)

return results

def explorer_fileselection():

global clsid

address_1=""

files = []

shellwindows = win32.Dispatch(clsid)

w=win32gui

window = w.GetForegroundWindow()

#print("window: %s" % window)

if (window != 0):

if (w.GetClassName(window) == 'CabinetWClass'): # the main explorer window

#print("class: %s" % w.GetClassName(window))

#print("text: %s " %w.GetWindowText(window))

children = list(set(searchChildWindows(window)))

addr_edit = None

file_view = None

for child in children:

if (w.GetClassName(child) == 'WorkerW'): # the address bar

addr_children = list(set(searchChildWindows(child)))

for addr_child in addr_children:

if (w.GetClassName(addr_child) == 'ReBarWindow32'):

addr_edit = addr_child

addr_children = list(set(searchChildWindows(child)))

for addr_child in addr_children:

if (w.GetClassName(addr_child) == 'Address Band Root'):

addr_edit = addr_child

addr_children = list(set(searchChildWindows(child)))

for addr_child in addr_children:

if (w.GetClassName(addr_child) == 'msctls_progress32'):

addr_edit = addr_child

addr_children = list(set(searchChildWindows(child)))

for addr_child in addr_children:

if (w.GetClassName(addr_child) == 'Breadcrumb Parent'):

addr_edit = addr_child

addr_children = list(set(searchChildWindows(child)))

for addr_child in addr_children:

if (w.GetClassName(addr_child) == 'ToolbarWindow32'):

text=getEditText(addr_child)

if "\\" in text:

address_1=getEditText(addr_child)[text.index(" ")+1:]

print("Address --> "+address_1)

for window in range(shellwindows.Count):

window_URL = urllib.parse.unquote(shellwindows[window].LocationURL,encoding='ISO 8859-1')

window_dir = window_URL.split("///")[1].replace("/", "\\")

print("Directory --> "+window_dir)

if window_dir==address_1:

selected_files = shellwindows[window].Document.SelectedItems()

for file in range(selected_files.Count):

files.append(selected_files.Item(file).Path)

print("Files --> "+str(files))

while True:

explorer_fileselection()

time.sleep(1)

这将查找活动的Windows资源管理器窗口,获取该窗口的地址,然后将该地址用于Olav的答案,以检查该地址是否等于在Windows资源管理器中打开的地址之一,从而从活动窗口获取文件。顺便说一句,因为这个脚本是两个答案的修改副本,所以它有来自这些答案的限制。所以,就像Olav的回答“编辑:还不起作用,至少在使用上下文菜单时是这样的”,那么这可能也不起作用,因为它是相同的代码-只是工作目录不同(虽然,我不知道他说的是什么意思,但就我测试的结果来看,它起作用了)。就像jameskent的答案一样,这不适用于桌面,只适用于使用windows资源管理器打开的窗口。

编码=“ISO 8859-1”是因为我是葡萄牙语,但可以更改,只需确保两个目录都相等而不必使用%?否则就没用了!在

因为这个问题只有近5年的时间,OP可能不再需要它了,但我需要它,却没有它在任何地方,所以我想我可以把这个贴在这里,也许可以帮助其他想这样做的人。脚本中的代码可用于了解当前Windows资源管理器窗口上的文件,并在XP以上的Windows上获取当前的Windows资源管理器窗口路径(对Vista不确定)。对于XP,请参阅原始答案(https://stackoverflow.com/a/43892579/8228163),要从所有Windows资源管理器窗口获取文件,只需从Olav的答案中删除if条件。在

感谢Olav和James Kent给出的答案,因为我会花更多的时间来尝试如何做到这一点(我是一个Python/任何语言begginner—只需编写一年代码,所以需要花费大量时间,也许我必须将其与另一个语言混合使用)。再次感谢你们,感谢你们的行动,感谢你们在正确的时间问了问题,让合适的人来回答!(因为Olav在链接上引用的源不再存在)。在

希望这有帮助!干杯!在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 --- 数据链路层CSMA/CA协议

CSMA/CA全称 载波监听多点接入/碰撞避免CSMA/CA(carrier sense multiple access with collision avoidence) CSMA/CA协议与CSMA/CD协议的主要区别在应用场景不同。 为什么要有CSMA/CA协议 CSMA/CA协议主要应用于无线局域网,CSMA/CD协议主…

class会不会回收?用不到的class怎么回收_牛X的java程序员必备的GC基础知识, 面试肯定用的到...

1. GC回收哪些内存区域呢?堆内存对象数组方法区该类所有的额实例都已经被回收, 也就是java堆中不存在该类的任何实例加载该类的ClassLoader已经被回收该类对应的java.lang.Class对象在任何地方没有被引用, 也无法通过反射访问该类方法。垃圾回…

c++读取utf8文件_Node.js 进阶之 fs 文件模块学习

前言文件操作是开发过程中并不可少的一部分。Node.js 中的 fs 模块是文件操作的封装,它提供了文件读取、写入、更名、删除、遍历目录、链接等 POSIX 文件系统操作。与其它模块不同的是,fs 模块中所有的操作都提供了异步和同步的两个版本,具有 sync 后缀的…

计算机网络 --- 数据链路层中局域网和广域网

局域网 简称LAN(Local Area Network):是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。 局域网的特点 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。使用专…

python pathname_Python模块的定义,模块的导入,__name__用法实例分析

模块导入:import 模块名pythonimport 模块名import mathprint(math.sqrt(9))from…import 语句:从模块中导入一个指定的部分,如类、方法,其中from…import * 代表导入全部内容python#from 模块名 import 类名、方法名from collections import Iterablepr…

python制作中文词云_Python如何生成词云(详解)

前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图: 效果图一:效果图二:根据效果图分析的还是比较准确的,小说中的主人公就是“程理”,所以出现次数最多。…

计算机网络 --- 局域网中的以太网

以太网概述 以太网是应用最广泛的局域网,包括标准以太网(10Mbps),快速以太网(1000Mbps),千兆以太网(1000Mbps)和10G以太网,他们都符合IEEE802.3系列标准规范…

高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树

01知识框架02知识点详解1B树①定义与性质B树也叫B-树。B树是一种平衡的多分树,通常我们说m阶的B树,是二叉排序树的一种扩展,它必须满足如下条件:01每个结点最多只有m-1个关键字。02根结点最少可以只有1个关键字。03非根结点至少有…

计算机网络 --- 数据交换方式

电路交换 电话网络就是一种电路交换 电路交换的阶段 建立连接(呼叫/电路建立)通信释放连接 电路交换的优点 通信时延小有序传输没有冲突实时性强 电路交换的缺点 建立连接时间长线路独占,使用效率低灵活性差无差错控制能力 报文交换 报…

科沃斯机器人拆解_科沃斯扫地机器人拆解/

5、扫地机器人十大排名品牌第五名:(科沃斯中国)科沃斯扫地机器人科沃斯机器人科技(苏州)有限公司,扫地机器人十大品牌,国家火炬计...扫地机器人尘盒大多都是放置在机体内部的,因此在拆卸扫地机器人尘盒的时候,应该先查…

python json模块详解_深入解析Python编程中JSON模块的使用

JSON编码支持的基本数据类型为 None , bool , int , float 和 str , 以及包含这些类型数据的lists,tuples和dictionaries。 对于dictionaries,keys需要是字符串类型(字典中任何非字符串类型的key在编码时会…

计算机网络 --- 网络层路由算法与路由协议

路由表: 最佳路由: “最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。 路由算法的分类 静态路由算法(非自适应路由算法) 管理员手工配置路由信息。简便,可靠,在负荷稳定,拓扑…

同比 数据模型 环比_历史数据模型解决方案-历史数据模型解决方案

方案介绍针对上面介绍常规实现方案的弊端,本文从数据结构设计入手提出了“历史数据模型”解决方案。在物理表设计阶段针对这类报表问题进行特殊处理,物理表数据结构设计如下:字段描述IdIDProject项目Amount本月投资额TotalAmount累计投资额(截…

cplex安装_Excel软件规划求解工具的安装与功能介绍

引言规划求解工具是Excel软件中自带的一个功能非常强大的加载项/工具。它能够完成包括线性规划、整数线性规划等一般规模的数学优化问题的问题求解。更重要的是,无论是在Windows操作系统下,还是苹果电脑Mac平台下,这个工具都是免费的。下面就…

python二进制文件 删除尾部数据_在Python中读取和切片二进制数据文件的最快方法...

我有一个处理脚本,用于提取“uint16”类型的二进制数据文件,并一次以6400块的形式进行各种处理.该代码最初是用Matlab编写的,但由于分析代码是用 Python编写的,我们希望通过在Python中完成所有工作来简化流程.问题是我注意到我的Python代码比Matlab的fread函数慢得多.简单地说,…

计算机网络 --- 网络层IP数据报

IP数据报格式 首部 版本:IPv4/IPv6首部长度:单位是4B,最小为5。也就是说如果首部长度的四个bit的出来的数是8,那么首部长度就是8 * 4B 32B也就是32字节区分服务:指示期望获得哪种类型的服务总长度:首部数据…

线程管理(学习)

线程管理 在日常生活中,我们要完成一个大任务,一般会将它分解成多个简单、容易解决的小问题,小问题逐个被解决,大问题也就随之解决了。 在多线程操作系统中,也同样需要开发人员把一个复杂的应用分解成多个小的、可调…

imread函数_MATLAB图像处理:27:使用imtranslate函数平移图像

本示例说明如何使用imtranslate函数对图像执行平移操作。平移操作将图像在x或y方向或两者上移动指定数量的像素。将图像读入工作区。I imread(cameraman.tif);显示图像。图像的大小为256 x 256像素。默认情况下,imshow显示图像的左上角坐标为(0,0&#…

ads design environment_ADS应用技巧3 — 画一个巴伦有多少种方法?

为什么ADS的Schematic不允许多任务仿真(即如果一个Schematic的仿真任务没完成,就不允许任何Schematic启动新的仿真);而Layout却允许同时运行一大堆EM仿真。按理说,Schematic仿真相比于EM仿真占用更少的CPU和RAM等计算机资源,更应该…

计算机网络 --- 网络层IP地址

全世界唯一的32位/4字节标识符&#xff0c;标识路由器主机的接口。 IP地址&#xff1a;&#xff1a; {<网络号><主机号>} IP编址的历史阶段 分类的IP地址子网的划分构成超网&#xff08;无分类编址方法&#xff09; 分类的IP地址 特殊IP地址 私有IP地址 网络地址…