Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
329 views
in Technique[技术] by (71.8m points)

python - How to use IFileOperation from ctypes

I want to use IFileOperation to copy files from python code -

  • It's fast(er than python)
  • You get a nice dialog
  • Doesn't block Python

On Windows 10, Python 3.8 -

import ctypes

ctypes.windll.shell32.IFileOperation

doesn't seem to exist.

How can I reach IFileOperation (Not the deprecated SHFileOperation API) using ctypes?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Sure, it's located in pythoncom and shell for constants, for example:

from win32com.shell import shell
import pythoncom

# create an instance of IFileOperation
fo = pythoncom.CoCreateInstance(shell.CLSID_FileOperation, None, pythoncom.CLSCTX_ALL, shell.IID_IFileOperation)

# here you can use SetOperationFlags, progress Sinks, etc.

# create an instance of IShellItem for the source item
item1 = shell.SHCreateItemFromParsingName("c:\temp\source.txt", None, shell.IID_IShellItem)

# create an instance of IShellItem for the target folder
folder = shell.SHCreateItemFromParsingName("c:\another", None, shell.IID_IShellItem)

# queue the copy operation
fo.CopyItem(item1, folder, "new name.txt", None)

# commit
fo.PerformOperations()

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...