一、先看代码

import win32con,win32gui
import win32clipboard as cb class MyWindow():
def __init__(self):
#注册一个窗口类
wc = win32gui.WNDCLASS()
wc.lpszClassName = 'MyWindow'
wc.hbrBackground = win32con.COLOR_BTNFACE+1
wc.lpfnWndProc = self.wndProc
class_atom=win32gui.RegisterClass(wc)
#创建窗口
self.hwnd = win32gui.CreateWindow(
class_atom, u'窗口标题', win32con.WS_OVERLAPPEDWINDOW,
win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
0,0, 0, None)
#显示窗口
#win32gui.ShowWindow(self.hwnd, win32con.SW_SHOWNORMAL) #消息处理
def wndProc(self, hwnd, msg, wParam, lParam):
if msg == win32con.WM_DESTROY:win32gui.PostQuitMessage(0)
if msg == win32con.WM_DRAWCLIPBOARD: #当剪切板更新的时候收到这个消息
cb.OpenClipboard()
txt = cb.GetClipboardData(cb.CF_UNICODETEXT)
cb.CloseClipboard()
print txt
return win32gui.DefWindowProc(hwnd, msg, wParam, lParam) mw = MyWindow()
cb.SetClipboardViewer(mw.hwnd) #注册为剪切板监听窗口
win32gui.PumpMessages()

分三步实现

1、实现一个windows窗口。这里有详细说明

2、SetClipboardViewer 将这个窗口注册为剪切板监听窗口。MSDN官方说明

3、在剪切板有更新的时候上述窗口将收到 WM_DRAWCLIPBOARD 消息,此时就可以处理剪切板内容了

二、一些改进

        if msg == win32con.WM_DRAWCLIPBOARD: #当剪切板更新的时候收到这个消息
utxt = None
btxt = None
try:
cb.OpenClipboard() #有时候打不开会出异常
if cb.IsClipboardFormatAvailable(cb.CF_UNICODETEXT): #判断是否有指定的内容
utxt = cb.GetClipboardData(cb.CF_UNICODETEXT)
if cb.IsClipboardFormatAvailable(cb.CF_TEXT):
btxt = cb.GetClipboardData(cb.CF_TEXT)
cb.CloseClipboard()
except:pass ok = False #依次尝试打印Unicode和字节码,ok是打印成功标志位
if utxt:
try:
print utxt
ok = True
except:
print u'UNICODE打印失败' if btxt and not ok:
try:
print btxt.decode('gbk')
except:
print u'GBK打印失败'

1、cb.OpenClipboard()打开失败

特别是和Office一起使用的情况下,还不知道什么原因。总之,try一下就好。

2 、cb.GetClipboardData(cb.CF_UNICODETEXT) 发生异常

很多时候剪切板的内容不一定可以作为UNICODE读取,比如当剪切了一个文件或者图片。这就先用cb.IsClipboardFormatAvailable(cb.CF_UNICODETEXT)判断一下。

3、print 出现解码异常

有时候用 cb.GetClipboardData(cb.CF_UNICODETEXT) 获得的内容无法正确的print出来,目前还不知道什么原因,也有可能是这个函数的bug。此时可以换 cb.GetClipboardData(cb.CF_TEXT) 试一试,先取得字节码,再解码为UNICODE。

监视 Windows 剪切板的更多相关文章

  1. windows剪切板暂存

    其实最初是因为在项目中使用了html网页编辑器,通过ie的com组件和javascript通讯完成一些事情,其中有一个功能是插入表格,我们原本使用的range.pasteHTML(HTMLstr);根 ...

  2. 读取图片文件MetaFile放入Windows剪切板

    前言 前段时间群里有个小伙在工作中遇到一个问题,透明的图片存入剪切板在粘贴到adobe PDF中出现不透明问题但是粘贴到Excel可以,还有就是从excel复制再粘贴到PDF也是可以.小伙在群里发了两 ...

  3. Delphi的windows剪切板操作函数

    1. Clipbrd函数 function Clipboard: TClipboard;:若应用程序从未使用过剪贴板,则调用该函数形成新的剪贴板:若之前使用过剪贴板则返回使用过的剪贴板. 属性: As ...

  4. 使用python读写windows剪切板

    import win32clipboard as w import win32con base_addr = 0x8e00000 buffer_len = 0x123 def getText(): w ...

  5. 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】

    该程序能够监视Windows剪切板的内容(文字和图片) 其思路是 先调用SetClipBoardViewer(Self.Handle),让Windows剪切板内容发生改变之后,通知本程序: 然后截获W ...

  6. 在Java中调用与系统有关的剪切板Clipboard

    java从1.5版开始已经能与系统的剪切板很好的交互了. 如果可以在程序中直接调用系统的剪切板来保存“复制”的对象内容,那可以说的比之前的想法好很多. 下面是一个对java.io.File对象进行co ...

  7. c#: 剪切板监视实现

    CR TubeGet中有用户需要剪切板监视功能,记录代码以做备忘: using System; using System.Runtime.InteropServices; using System.W ...

  8. 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件

    [源码下载] 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件 作者:webabcd 介绍重新想象 Windows 8 Store ...

  9. 背水一战 Windows 10 (102) - 应用间通信: 剪切板

    [源码下载] 背水一战 Windows 10 (102) - 应用间通信: 剪切板 作者:webabcd 介绍背水一战 Windows 10 之 应用间通信 剪切板 - 基础, 复制/粘贴 text ...

随机推荐

  1. 使用gulp-uncss清理多余无用css

    cnpm 也可以使用npm cnpm install gulp-uncss --save-dev gulpfile.js var gulp = require('gulp'), uncss = req ...

  2. UI内侧错题

    此题考察的是JQuery UI下的menu插件的使用,ui-menu表示菜单的外层容器,如果菜单包含图标,该元素会另外带一个 ui-menu-icons class.故A B选项错误.ui-menu- ...

  3. xcode8权限以及相关设置

    我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃. 具体如下图: QQ20160914-0.png 注意,添加的时候,末尾不要有空格麦克风权限:Privacy ...

  4. kettle中全局变量的设置

    设置全局变量. 找到.properties文件: 在文件中设置值: 在kettle中新建一个job(不用做任何设置): 转换中获取便元的设置: 重启kettle的执行结果:

  5. [No00009D]使用visual studio 2015 update3打包程序安装包的简单方法(不需要InstallShield)

    注意: 该方法只适用于小型软件的打包发布: 该打包向导可以预先检查需要的运行库支持: 由于visual studio自2012后取消掉了自带的打包程序,如果有需要打包安装,需要使用一个叫用Instal ...

  6. [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  7. [LeetCode] Permutations II 全排列之二

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  8. 关于EventSource的精华

    他是keep-alive的连接,服务端持续向这个请求的Reponse发送数据,以"data: "+您的消息+"\n\n"的格式发送,浏览器端会收到您发送的消息. ...

  9. C语言中函数的传入值与传出值

    看到一个函数的原型后,怎么样一眼看出来哪个参数做输入哪个做输出? 函数传参如果传的是普通变量(不是指针)那肯定是输入型参数: 如果传指针就有 2 种可能性了,为了区别,经常的做法是: 如果这个参数是做 ...

  10. SQL Server-5种常见的约束

    引自:http://www.cnblogs.com/dekevin/p/4772235.html SQLServer 中有五种约束, Primary Key 约束. Foreign Key 约束. U ...