一、先看代码

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. 怎么在GitHub上寻找开源项目呢

    find projects GitHub Explore: Popular and trending projects. GitHub Stars: Projects starred by other ...

  2. [LeetCode] Paint Fence 粉刷篱笆

    There is a fence with n posts, each post can be painted with one of the k colors. You have to paint ...

  3. Linux 中 SVN 重启关闭

    a.启动SVN svnserve -d -r /A/B/svn/ 其中 -d 表示守护进程, -r 表示在后台执行 /A/B/svn/ 为svn的安装目录 b.关闭SVN 这里采取linux杀死进程的 ...

  4. javascript正则表达式(RegExp)简述

    首先我们来思考以下两个个场景 我们使用window操作系统,有时候需要找一个文件,刚刚好这个文件我不知道放哪里去了,这个时候我们该怎么办呢? 我们使用word写论文的时候,不小心将"订价&q ...

  5. 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较

    二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』   二分法的存储要求:要求顺序存储,以便于根据下标随机访问   二分法的时间效率:O(Log(n))   二分 ...

  6. webuploader 谷歌浏览器跨域

    今天在本地调试webuploader 的image-upload demo时遇到跨域问题(本地post数据到同事的机器中) 会出现No 'Access-Control-Allow-Origin' he ...

  7. 360浏览器7.1抓触屏QQ空间包

  8. array

    1.array() //创建数组 2.array_change_key_case($arr,CASE_UPPER); //将键名全部大写,不加参数全变小写--没啥用 3.array_chunk($ar ...

  9. AC自动机 HDU 2222

    t n个字串 1个母串 求出现几个字串 字串可能重复 #include<stdio.h> #include<algorithm> #include<string.h> ...

  10. Atomikos的使用过程中要注意的事

    在使用Atomikos过程中遇到的一些问题,以作记录: MySQL does not support TMJOIN MySQL does not allow for joining an existi ...