监视 Windows 剪切板
一、先看代码
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 剪切板的更多相关文章
- windows剪切板暂存
其实最初是因为在项目中使用了html网页编辑器,通过ie的com组件和javascript通讯完成一些事情,其中有一个功能是插入表格,我们原本使用的range.pasteHTML(HTMLstr);根 ...
- 读取图片文件MetaFile放入Windows剪切板
前言 前段时间群里有个小伙在工作中遇到一个问题,透明的图片存入剪切板在粘贴到adobe PDF中出现不透明问题但是粘贴到Excel可以,还有就是从excel复制再粘贴到PDF也是可以.小伙在群里发了两 ...
- Delphi的windows剪切板操作函数
1. Clipbrd函数 function Clipboard: TClipboard;:若应用程序从未使用过剪贴板,则调用该函数形成新的剪贴板:若之前使用过剪贴板则返回使用过的剪贴板. 属性: As ...
- 使用python读写windows剪切板
import win32clipboard as w import win32con base_addr = 0x8e00000 buffer_len = 0x123 def getText(): w ...
- 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】
该程序能够监视Windows剪切板的内容(文字和图片) 其思路是 先调用SetClipBoardViewer(Self.Handle),让Windows剪切板内容发生改变之后,通知本程序: 然后截获W ...
- 在Java中调用与系统有关的剪切板Clipboard
java从1.5版开始已经能与系统的剪切板很好的交互了. 如果可以在程序中直接调用系统的剪切板来保存“复制”的对象内容,那可以说的比之前的想法好很多. 下面是一个对java.io.File对象进行co ...
- c#: 剪切板监视实现
CR TubeGet中有用户需要剪切板监视功能,记录代码以做备忘: using System; using System.Runtime.InteropServices; using System.W ...
- 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件
[源码下载] 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件 作者:webabcd 介绍重新想象 Windows 8 Store ...
- 背水一战 Windows 10 (102) - 应用间通信: 剪切板
[源码下载] 背水一战 Windows 10 (102) - 应用间通信: 剪切板 作者:webabcd 介绍背水一战 Windows 10 之 应用间通信 剪切板 - 基础, 复制/粘贴 text ...
随机推荐
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- android SharedPreferences 存储对象
我们知道SharedPreferences只能保存简单类型的数据,例如,String.int等. 如果想用SharedPreferences存取更复杂的数据类型(类.图像等),就需要对这些数据进行编码 ...
- BZOJ 1565: [NOI2009]植物大战僵尸
1565: [NOI2009]植物大战僵尸 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2317 Solved: 1071[Submit][Stat ...
- es-redis
列出一些redis命令: 免得我不是dba,每次用都得翻看文档,很蛋疼.于是写了个连接脚本 [root@elk-redis-test105 ts]# ls conn-redis.sh [root@el ...
- Codevs堆练习
Codevs堆练习 黄金:2830.2879.2995.3110 钻石:1052.1063.1245.1246.2057.2573.3377 大师:1021.1765.2069.2913.3032
- oAuth 2.0 笔记
OAuth 2.0规范于2012年发布,很多大型互联网公司(比如:微信.微博.支付宝)对外提供的SDK中,授权部分基本上都是按这个规范来实现的. OAuth 2.0提供了4种基本的标准授权流程,最为复 ...
- 安装Anaconda
安装Anaconda来安装一切 spyder是python科学计算IDE,类似matlab.这是一个基于Qt的软件,如果使用pip install安装,会出现各种bug.pip install spy ...
- UEFI+GPT安装windows
首先bios开启uefi windows安装选择驱动器界面:F10 进入命令行: list disk select disk 0 clean convert gpt
- RTMP流媒体播放过程
RTMP协议规定:第一步,建立一个网络连接(NetConnection):客户端和服务端的基础连通关系 第二步:建立一个网络流(NetStream)发送多媒体的通道(只能建立一个网络连接,可以建立 ...
- 配置react native遇到的问题
折腾了两天终于解决了问题,一开始用模拟器是报如下图的错 然后用真机的时候又报下图的错 这个错误网上有很多解决方法,说是要降级处理,将build.gradle中的1.3.1改成1.2.3,但是改完之后问 ...