Todo: 集成多平台 解决因SaiNiu线程抢占资源问题 本地提交测试环境打包 和 正式打包脚本与正式环境打包bat 提交Python32环境包 改进多日志文件生成情况修改打包日志细节
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
Demonstrates how to propagate a folder's view state to all its subfolders
|
||||
The format of the ColInfo stream is apparently undocumented, but
|
||||
it can be read raw from one folder and copied to another's view state.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import pythoncom
|
||||
from win32com.shell import shell, shellcon
|
||||
|
||||
template_folder = os.path.split(sys.executable)[0]
|
||||
print("Template folder:", template_folder)
|
||||
template_pidl = shell.SHILCreateFromPath(template_folder, 0)[0]
|
||||
template_pb = shell.SHGetViewStatePropertyBag(
|
||||
template_pidl,
|
||||
"Shell",
|
||||
shellcon.SHGVSPB_FOLDERNODEFAULTS,
|
||||
pythoncom.IID_IPropertyBag,
|
||||
)
|
||||
|
||||
# Column info has to be read as a stream
|
||||
# This may blow up if folder has never been opened in Explorer and has no ColInfo yet
|
||||
template_iunk = template_pb.Read("ColInfo", pythoncom.VT_UNKNOWN)
|
||||
template_stream = template_iunk.QueryInterface(pythoncom.IID_IStream)
|
||||
streamsize = template_stream.Stat()[2]
|
||||
template_colinfo = template_stream.Read(streamsize)
|
||||
|
||||
|
||||
def update_colinfo(not_used, dir_name, fnames):
|
||||
for fname in fnames:
|
||||
full_fname = os.path.join(dir_name, fname)
|
||||
if os.path.isdir(full_fname):
|
||||
print(full_fname)
|
||||
pidl = shell.SHILCreateFromPath(full_fname, 0)[0]
|
||||
pb = shell.SHGetViewStatePropertyBag(
|
||||
pidl,
|
||||
"Shell",
|
||||
shellcon.SHGVSPB_FOLDERNODEFAULTS,
|
||||
pythoncom.IID_IPropertyBag,
|
||||
)
|
||||
## not all folders already have column info, and we're replacing it anyway
|
||||
pb.Write("ColInfo", template_stream)
|
||||
iunk = pb.Read("ColInfo", pythoncom.VT_UNKNOWN)
|
||||
s = iunk.QueryInterface(pythoncom.IID_IStream)
|
||||
s.Write(template_colinfo)
|
||||
s = None
|
||||
## attribute names read from registry, can't find any way to enumerate IPropertyBag
|
||||
for attr in (
|
||||
"Address",
|
||||
"Buttons",
|
||||
"Col",
|
||||
"Vid",
|
||||
"WFlags",
|
||||
"FFlags",
|
||||
"Sort",
|
||||
"SortDir",
|
||||
"ShowCmd",
|
||||
"FolderType",
|
||||
"Mode",
|
||||
"Rev",
|
||||
):
|
||||
pb.Write(attr, template_pb.Read(attr))
|
||||
pb = None
|
||||
|
||||
|
||||
os.path.walk(template_folder, update_colinfo, None)
|
||||
Reference in New Issue
Block a user