如何将字符串复制到剪贴板?

2024-12-06 08:40:00
admin
原创
136
摘要:问题描述:我正在尝试制作一个基本的 Windows 应用程序,该应用程序根据用户输入构建一个字符串,然后将其添加到剪贴板。如何使用 Python 将字符串复制到剪贴板?解决方案 1:实际上,对于这个简单的任务来说,pywin32这ctypes似乎有点小题大做。tkinter是一个跨平台的 GUI 框架,它默认...

问题描述:

我正在尝试制作一个基本的 Windows 应用程序,该应用程序根据用户输入构建一个字符串,然后将其添加到剪贴板。如何使用 Python 将字符串复制到剪贴板?


解决方案 1:

实际上,对于这个简单的任务来说,pywin32ctypes似乎有点小题大做。tkinter是一个跨平台的 GUI 框架,它默认随 Python 一起提供,并且具有剪贴板访问方法以及其他很酷的东西。

如果您需要的只是将一些文本放入系统剪贴板,可以这样做:

from tkinter import Tk # in Python 2, use "Tkinter" instead 
r = 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 closed
r.destroy()

就这样吧,没必要再费心处理特定于平台的第三方库了。

如果您使用的是 Python 2,请替换tkinterTkinter

解决方案 2:

我没有解决方案,只有权宜之计。

Windows Vista 及更高版本具有一个内置命令,名为clip,可从命令行获取命令的输出并将其放入剪贴板。例如,ipconfig | clip

因此,我使用os模块创建了一个函数,该函数接受一个字符串并使用内置的 Windows 解决方案将其添加到剪贴板。

import os
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

# Example
addToClipBoard('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 的命令提示符直接复制并粘贴到剪贴板中的步骤进行操作即可。

解决方案 3:

最简单的方法是使用pyperclip。适用于python 2和3。

要安装此库,请使用:

pip install pyperclip

使用示例:

import pyperclip

pyperclip.copy("your string")

如果要获取剪贴板的内容:

clipboard_content = pyperclip.paste()

解决方案 4:

您可以使用pyperclip - 跨平台剪贴板模块。或者Xerox - 类似模块,但需要 win32 Python 模块才能在 Windows 上运行。

解决方案 5:

您可以使用优秀的 pandas,它具有内置的剪贴板支持,但您需要传递 DataFrame 并调用to_clipboard

import pandas as pd
df = pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)

解决方案 6:

如果您不介意依赖 Pandas,那么这是我发现的最简单、最可靠的方法。但是,我认为这不是 Pandas API 的正式组成部分,因此它可能会在未来的更新中失效。它从 0.25.3 开始有效

from pandas.io import clipboard
clipboard.copy("test")

解决方案 7:

您还可以使用 ctypes 来利用 Windows API,避免使用庞大的 pywin32 包。这是我使用的(请原谅我的风格不好,但想法是存在的):

import ctypes

# Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
OpenClipboard = ctypes.windll.user32.OpenClipboard    # Basic clipboard functions
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
GetClipboardData = ctypes.windll.user32.GetClipboardData
SetClipboardData = ctypes.windll.user32.SetClipboardData
CloseClipboard = ctypes.windll.user32.CloseClipboard
GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc    # Global memory allocation
GlobalLock = ctypes.windll.kernel32.GlobalLock     # Global memory Locking
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000

def Get():
  OpenClipboard(None) # Open Clip, Default task

  pcontents = GetClipboardData(1) # 1 means CF_TEXT.. too lazy to get the token thingy...

  data = ctypes.c_char_p(pcontents).value

  #GlobalUnlock(pcontents) ?
  CloseClipboard()

  return data

def Paste(data):
  OpenClipboard(None) # Open Clip, Default task

  EmptyClipboard()

  hCd = GlobalAlloc(GMEM_DDESHARE, len(bytes(data,"ascii")) + 1)

  pchData = GlobalLock(hCd)

  strcpy(ctypes.c_char_p(pchData), bytes(data, "ascii"))

  GlobalUnlock(hCd)

  SetClipboardData(1, hCd)

  CloseClipboard()

解决方案 8:

使用pyperclip模块

使用 pip 安装pip install pyperclip

将文本复制"Hello World!"到剪贴板

import pyperclip
pyperclip.copy('Hello World!')

您可以使用Ctrl+V任何地方将其粘贴到某处。

使用python粘贴复制的文本

pyperclip.paste() # This returns the copied text of type <class 'str'>

解决方案 9:

我尝试过各种解决方案,但这是通过我的测试的最简单的解决方案:

#coding=utf-8

import win32clipboard  # http://sourceforge.net/projects/pywin32/

def copy(text):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
def paste():
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
    return data

if __name__ == "__main__":  
    text = "Testing
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用