为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Python将字符串复制到Windows上的剪贴板上?

如何使用Python将字符串复制到Windows上的剪贴板上?

跃然一笑 2019-06-26 16:13:44
如何使用Python将字符串复制到Windows上的剪贴板上?我正在尝试制作一个基本的Windows应用程序,它从用户输入中构建一个字符串,然后将其添加到剪贴板中。如何使用Python将字符串复制到剪贴板?
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

实际上,pywin32ctypes对这个简单的任务来说似乎太过分了。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.


查看完整回答
反对 回复 2019-06-26
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我没有解决办法,只是一个解决办法。

WindowsVista有一个内置命令,名为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)

如果您正在使用WindowsXP,它将按照以下步骤工作从WindowsXPPro的命令提示符直接复制和粘贴到剪贴板.


查看完整回答
反对 回复 2019-06-26
?
隔江千里

TA贡献1906条经验 获得超10个赞

您还可以使用ctype来访问WindowsAPI,并避免使用庞大的pywin 32包。这就是我所用的(请原谅这种糟糕的风格,但有这样的想法):

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()


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 1632 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信