如何使用Python將字符串復制到Windows上的剪貼板?我正在嘗試創建一個基本的Windows應用程序,用戶輸入構建一個字符串,然后將其添加到剪貼板。如何使用Python將字符串復制到剪貼板?
3 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
其實,pywin32
并且ctypes
似乎是這個簡單的任務矯枉過正。Tkinter
是一個跨平臺的GUI框架,默認情況下附帶Python,并具有剪貼板訪問方法以及其他很酷的東西。
如果只需要將一些文本放到系統剪貼板中,這樣就可以了:
from Tkinter import Tkr = Tk()r.withdraw()r.clipboard_clear()r.clipboard_append('i can has clipboardz?')r.update() # now it stays on the clipboard after the window is closedr.destroy()
這就是全部,不需要使用特定于平臺的第三方庫。
如果您使用的是Python 3,請替換TKinter
為tkinter
。

四季花海
TA貢獻1811條經驗 獲得超5個贊
我沒有解決方案,只是一種解決方法。
Windows Vista以后有一個內置的命令clip
,它從命令行獲取命令的輸出并將其放入剪貼板。例如,ipconfig | clip
。
所以我使用os
模塊創建了一個函數,該模塊接受一個字符串并使用內置的Windows解決方案將其添加到剪貼板。
import osdef addToClipBoard(text): command = 'echo ' + text.strip() + '| clip' os.system(command)# ExampleaddToClipBoard('penny lane')# Penny Lane is now in your ears, eyes, and clipboard.
然而,正如之前在評論中所指出的,這種方法的一個缺點是該echo
命令會自動在文本末尾添加換行符。要避免這種情況,您可以使用命令的修改版本:
def addToClipBoard(text): command = 'echo | set /p nul=' + text.strip() + '| clip' os.system(command)
如果您使用的是Windows XP,它將按照從Windows XP Pro的命令提示符復制并粘貼到剪貼板中的步驟進行操作。
查看完整回答
反對 回復

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
您還可以使用ctypes進入Windows API并避免使用龐大的pywin32軟件包。這就是我使用的(借口可憐的風格,但想法就在那里):
import ctypes# Get required functions, strcpy..strcpy = ctypes.cdll.msvcrt.strcpy ocb = ctypes.windll.user32.OpenClipboard # Basic clipboard functionsecb = ctypes.windll.user32.EmptyClipboardgcd = ctypes.windll.user32.GetClipboardDatascd = ctypes.windll.user32.SetClipboardDataccb = ctypes.windll.user32.CloseClipboardga = ctypes.windll.kernel32.GlobalAlloc # Global memory allocationgl = ctypes.windll.kernel32.GlobalLock # Global memory Lockinggul = ctypes.windll.kernel32.GlobalUnlockGMEM_DDESHARE = 0x2000def Get(): ocb(None) # Open Clip, Default task pcontents = gcd(1) # 1 means CF_TEXT.. too lazy to get the token thingy... data = ctypes.c_char_p(pcontents).value #gul(pcontents) ? ccb() return datadef Paste(data): ocb(None) # Open Clip, Default task ecb() hCd = ga(GMEM_DDESHARE, len(bytes(data,"ascii")) + 1) pchData = gl(hCd) strcpy(ctypes.c_char_p(pchData), bytes(data, "ascii")) gul(hCd) scd(1, hCd) ccb()
添加回答
舉報
0/150
提交
取消