2014-05-21 102 views
0

我試圖使用我的代碼將圖像文件複製到Windows剪貼板並將其手動粘貼到Windows資源管理器中的任何文件夾中。我正在使用Windows 8 64位筆記本電腦,運行Python 2.7pywin32-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位工作正常。我能夠將我的文件粘貼到寫字板和資源管理器窗口中。

+0

如果你已經知道圖像文件名,爲什麼不把'CopyFile'複製到正確的文件夾呢? – user1793036

+0

感謝您的想法。但我的意圖是將文件粘貼到任何首選文件夾中,就像默認粘貼操作 – user3652967

回答

0

問題可能是您傳遞到剪貼板的內存必須通過使用GlobalAlloc進行檢索,必須鎖定,寫入,解鎖並傳遞。

看看這個鏈接的代碼:

http://www.c-plusplus.de/forum/251309-full

我不完全知道如何將這種成Python或即使這是內部已經完成

+0

非常感謝您的回覆。在我的情況下使用'GlobalAlloc'沒有效果。 Windows 8資源管理器仍然不顯示粘貼菜單 – user3652967

相關問題