python获取剪切板内容_如何从python中读取(windows)剪贴板中的文本?

本文介绍了多种使用Python在Windows系统中读取剪贴板文本的方法,包括win32clipboard、Tkinter、ctypes、win32all等模块的使用示例,帮助开发者实现对剪贴板内容的便捷操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何从python中读取(windows)剪贴板中的文本?

如何从python中读取(windows)剪贴板中的文本?

Foo42 asked 2019-06-22T21:38:33Z

10个解决方案

77 votes

您可以使用名为win32clipboard的模块,它是pywin32的一部分。

这是一个首先设置剪贴板数据然后获取它的示例:

import win32clipboard

# set clipboard data

win32clipboard.OpenClipboard()

win32clipboard.EmptyClipboard()

win32clipboard.SetClipboardText('testing 123')

win32clipboard.CloseClipboard()

# get clipboard data

win32clipboard.OpenClipboard()

data = win32clipboard.GetClipboardData()

win32clipboard.CloseClipboard()

print data

文档中的一个重要提醒:

窗口检查完毕或更改剪贴板后,   通过调用CloseClipboard关闭剪贴板。 这使其他   用于访问剪贴板的窗口。 不要在上面放置物体   调用CloseClipboard后的剪贴板。

Sakin answered 2019-06-22T21:39:08Z

21 votes

您可以通过内置模块Tkinter轻松完成此操作,该模块基本上是一个GUI库。 此代码创建一个空白小部件以从OS获取剪贴板内容。

#from tkinter import Tk # Python 3

from Tkinter import Tk

Tk().clipboard_get()

kmonsoor answered 2019-06-22T21:39:32Z

19 votes

我已经看到很多使用win32模块的建议,但是Tkinter提供了我见过的最简单,最简单的方法,如下文所示:如何使用Python将字符串复制到Windows上的剪贴板?

另外,Tkinter位于python标准库中。

Buttons840 answered 2019-06-22T21:40:03Z

11 votes

上面最受欢迎的答案是奇怪的,它只是简单地清除剪贴板然后获取内容(然后是空的)。 可以清除剪贴板以确保某些剪贴板内容类型(如“格式化文本”)不会“覆盖”您要保存在剪贴板中的纯文本内容。

下面的代码用空格替换剪贴板中的所有换行符,然后删除所有双空格,最后将内容保存回剪贴板:

import win32clipboard

win32clipboard.OpenClipboard()

c = win32clipboard.GetClipboardData()

win32clipboard.EmptyClipboard()

c = c.replace('\n', ' ')

c = c.replace('\r', ' ')

while c.find(' ') != -1:

c = c.replace(' ', ' ')

win32clipboard.SetClipboardText(c)

win32clipboard.CloseClipboard()

born answered 2019-06-22T21:40:35Z

10 votes

如果您不想安装额外的软件包,ctypes也可以完成工作。

import ctypes

CF_TEXT = 1

kernel32 = ctypes.windll.kernel32

user32 = ctypes.windll.user32

user32.OpenClipboard(0)

if user32.IsClipboardFormatAvailable(CF_TEXT):

data = user32.GetClipboardData(CF_TEXT)

data_locked = kernel32.GlobalLock(data)

text = ctypes.c_char_p(data_locked)

print(text.value)

kernel32.GlobalUnlock(data_locked)

else:

print('no text in clipboard')

user32.CloseClipboard()

kichik answered 2019-06-22T21:40:58Z

3 votes

尝试win32all包中的win32clipboard(如果你使用的是ActiveState Python,可能会安装它)。

请参见此处的示例:[http://code.activestate.com/recipes/474121/]

Eli Bendersky answered 2019-06-22T21:41:29Z

2 votes

对于我的控制台程序,上面使用tkinter的答案对我来说并不适用,因为.destroy()总是给出错误,:

无法调用“event”命令:应用程序在执行时已被销毁...

或者当使用.withdraw()时,控制台窗口没有得到焦点。

要解决这个问题,你还必须在.destroy()之前调用.update()。 例:

# Python 3

import tkinter

r = tkinter.Tk()

text = r.clipboard_get()

r.withdraw()

r.update()

r.destroy()

r.withdraw()阻止帧显示一毫秒,然后它将被销毁,将焦点返回到控制台。

user136036 answered 2019-06-22T21:42:21Z

2 votes

使用Pythons库剪贴板

它的使用方式如下:

import clipboard

clipboard.copy("this text is now in the clipboard")

print clipboard.paste()

Dan answered 2019-06-22T21:42:51Z

2 votes

我发现这是从python访问剪贴板的最简单方法:

1)安装pyperclip:pip install pyperclip

2)用法:

import pyperclip

s = pyperclip.paste()

pyperclip.copy(s)

# the type of s is string

在Win3 64位,Python 3.5上测试。 似乎也适用于非ASCII字符。经测试的字符包括±°©ααγθΔΨΦåäö

np8 answered 2019-06-22T21:43:36Z

1 votes

python标准库做到了......

try:

# Python2

import Tkinter as tk

except ImportError:

# Python3

import tkinter as tk

def getClipboardText():

root = tk.Tk()

# keep the window from showing

root.withdraw()

return root.clipboard_get()

Paul Sumpner answered 2019-06-22T21:44:00Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值