我試圖使用我的代碼將圖像文件複製到Windows剪貼板並將其手動粘貼到Windows資源管理器中的任何文件夾中。我正在使用Windows 8 64位筆記本電腦,運行Python 2.7和pywin32-218 for win32 APIs。無法在Windows資源管理器中將文件粘貼到SetClipboardData後
我設法將我的文件粘貼到寫字板應用程序中。但是,我不能粘貼到Windows資源管理器中。粘貼菜單被禁用。任何幫助/建議將不勝感激。
from win32api import *
from win32clipboard import *
import time
import pythoncom
import struct
from pywin32_testutil import str2bytes
import ctypes
msvcrt = ctypes.cdll.msvcrt
kernel32 = ctypes.windll.kernel32
ret_stg=None
GMEM_MOVEABLE = 0x0002
def set_clipboard(content):
ret_stg = pythoncom.STGMEDIUM()
fname_buf=str2bytes(content)
fname_ba=bytearray(fname_buf)
fname_ba.append('\0')
fname_ba.append('\0')
fmt="lllll%ss" %len(fname_ba)
df=struct.pack(fmt, 20, 0, 0, 0, 0, str(fname_ba))
ret_stg.set(pythoncom.TYMED_HGLOBAL, df)
try:
OpenClipboard()
except:
print "open failed, exception=%s"%FormatMessage(GetLastError())
else:
try:
SetClipboardData(CF_HDROP, ret_stg.data)
except:
print "set failed, exception = %s"%FormatMessage(GetLastError())
finally:
CloseClipboard()
def get_clipboard():
try:
OpenClipboard()
except:
print "open failed, exception=%s"%FormatMessage(GetLastError())
else:
if(IsClipboardFormatAvailable(CF_HDROP)):
handle = GetClipboardDataHandle(CF_HDROP)
file_cnt = DragQueryFile(handle)
print "file count = %ld"%file_cnt
for i in range(0,file_cnt):
file_path = DragQueryFile(handle, i)
print "file name = %s"%file_path
elif(IsClipboardFormatAvailable(CF_UNICODETEXT)):
print "CF_UNICODETEXT content"
clip_data = GetClipboardData(CF_UNICODETEXT)
print "*** content = %s ***"%clip_data
else:
print "unsupported clipboard format"
finally:
CloseClipboard()
if __name__ == '__main__':
file1 = "E:\\pics\\ferrari.jpg"
set_clipboard(file1)
time.sleep(1)
get_clipboard()
更新:由於一些奇怪的原因,上面的代碼在Windows 7 64位工作正常。我能夠將我的文件粘貼到寫字板和資源管理器窗口中。
如果你已經知道圖像文件名,爲什麼不把'CopyFile'複製到正確的文件夾呢? – user1793036
感謝您的想法。但我的意圖是將文件粘貼到任何首選文件夾中,就像默認粘貼操作 – user3652967