美文网首页
python 操作剪切板

python 操作剪切板

作者: jiang | 来源:发表于2018-01-21 04:41 被阅读2121次

有时候写脚本的时候会有操作系统剪切板的需求,就是

  • 获取剪切板中的字符串
  • 清空剪切板
  • 向剪切板中写入字符串

方法包括使用 tkinter , ctypes 这两个 python 标准库, 或者安装 Qt 等第三方库来操作剪切板。


ctypes 操作剪切板

先写 windows 系统下 ctypes 库如何操作剪切板吧。ctypes 这个库主要用于调用动态链接函数或共享库,使用起来比较难。

于是我在 gist 上找了一段代码,是面向对象的写法,还有一两处不兼容 python3 。略作修改后放在简书上,也许能方便有需求的人。虽然我看不太懂这段代码,但好在调用起来还挺简单的,后面会有简单的调用示例。

'''
操作剪切板:读取剪切板的字符串;清空剪切板;向剪切板中写入字符串(只能写入 ascii 字符)。
win10, python3, 
'''
from ctypes import *


user32 = windll.user32
kernel32 = windll.kernel32
def get_clipboard():
    user32.OpenClipboard(c_int(0))
    contents = c_char_p(user32.GetClipboardData(c_int(1))).value
    user32.CloseClipboard()
    return contents
def empty_clipboard():
    user32.OpenClipboard(c_int(0))
    user32.EmptyClipboard()
    user32.CloseClipboard()

def set_clipboard(data):
    user32.OpenClipboard(c_int(0))
    user32.EmptyClipboard()
    alloc = kernel32.GlobalAlloc(0x2000, len(bytes(data, encoding='utf_8'))+1)
    # alloc = kernel32.GlobalAlloc(0x2000, len(data)+1)
    lock = kernel32.GlobalLock(alloc)
    cdll.msvcrt.strcpy(c_char_p(lock),bytes(data, encoding='utf_8'))
    # cdll.msvcrt.strcpy(c_char_p(lock), data)
    kernel32.GlobalUnlock(alloc)
    user32.SetClipboardData(c_int(1),alloc)
    user32.CloseClipboard()
调用 get_clipboard() 获取剪切板数据

if __name__ == '__main__':
    # 获取剪切板内字符串
    text_raw = get_clipboard()
    print('{0} {1}'.format(text_raw, type(text_raw)))
    
    try:
        text_str = text_raw.decode('utf_8')
        print('{0} {1}'.format(text_str, type(text_str)))
    except:
        print('剪切板为空。') 



剪切板为空时,输出结果为:
None <class 'NoneType'>
剪切板为空。

复制一个字符串后运行上面的测试代码(在这里我复制了 python ),输出结果为:
b'Python' <class 'bytes'>
Python <class 'str'>

剪切板中无数据时,get_clipboard() 返回 None。
当剪切板中有数据时,get_clipboard() 将其以 bytes 格式返回;

使用 text_str = text_raw.decode('utf_8')将 bytes 转化为 str。

调用 empty_clipboard() 清空剪切板
if __name__ == '__main__':
    # 清空剪切板
    empty_clipboard()
    text = get_clipboard()
    print(text)

复制一个字符串后运行代码,输出结果为:
None
调用 set_clipboard() 写入剪切板
if __name__ == '__main__':
    # 向剪切板内写入 ascii 字符串
    set_clipboard('py!')
    text = get_clipboard()
    print(text)

输出结果为:
b'py!'

相关

完整代码在 github 上。
如果这篇文章有任何错误或不适当的地方,请在评论里指出。或者你有更好的方法,也请写在评论里,感谢!

相关文章

  • 3.5 UiPath剪贴板操作的介绍和使用

    剪切板操作的介绍模拟用户使用剪切板操作的一种行为:例如使用设置剪切板(SettoClipboard),从剪切板获取...

  • python 操作剪切板

    有时候写脚本的时候会有操作系统剪切板的需求,就是 获取剪切板中的字符串 清空剪切板 向剪切板中写入字符串 方法包括...

  • python 实用的小功能整理

    python 常用代码 剪切板 保存剪切板图片到本地文件参考链接# 保存剪切板图片到本地文件# 安装所需包# pi...

  • iOS oc-剪切板

    一、自带剪切板操作的原生UI控件 在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField、U...

  • Linux 终端快捷键

    剪切板操作 光标操作 文本处理操作 任务处理操作 标签页处理操作 窗口操作 历史命令操作 其他操作

  • 2019-06-10

    接的shareSDKQQ分享,无论成功与否 他会对剪切板操作俩次所以剪切板的changeCount会+2 微信分享...

  • 终端快捷键

    Linux终端快捷键 剪切板操作 Ctrl+Shi ft+C 复制Ctrl+Shift+V 粘贴 光标操作 ...

  • 岁寒输入法剪切板的使用方法

    河图4.7.4/洛书1.10.1开始,岁寒输入法对剪切板功能进行了增强,除了已有的清空剪切板操作外,还增加了锁定和...

  • 一些零散的python模块笔记

    1.pyperclip 第三方库安装:python -m pip install pyperclip作用:向剪切板...

  • android剪切板操作

    前言 在Android开发过程中偶尔会涉及到剪切板相关操作。今天,就让我们来学习下剪切板实现的一些功能吧。我把剪切...

网友评论

      本文标题:python 操作剪切板

      本文链接:https://www.haomeiwen.com/subject/rwaxaxtx.html