如何使用Python将字符串复制到Windows上的剪贴板?我正在尝试创建一个基本的Windows应用程序,用户输入构建一个字符串,然后将其添加到剪贴板。如何使用Python将字符串复制到剪贴板?
3 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
其实,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贡献1865条经验 获得超7个赞
我没有解决方案,只是一种解决方法。
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贡献2003条经验 获得超2个赞
您还可以使用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
提交
取消