监视 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 ...
随机推荐
- 移动WEB viewport 相关知识
了解移动web viewport的知识,主要是为了切图时心中有数.本文主要围绕一个问题:切图时怎样设置<meta name="viewport">相关参数?围绕这个问题 ...
- kettle中参数和变量的区别
图一: 图二: 何时使用'?'何事使用${}应当根据情况: 在图二中使用的是${}因为此时没有"作为参数的字段",所以只能用el表达式直接获取其值,在图一中有"作为参数的 ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- ELK日志系统:Filebeat使用及Kibana如何设置登录认证
根据elastic上的说法: Filebeat is a lightweight, open source shipper for log file data. As the next-generat ...
- [LeetCode] Largest Number 最大组合数
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- [LeetCode] Palindrome Partitioning 拆分回文串
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- 在 sublime 中运行 JavaScript 代码
安装 Node 环境,参考 Node.js入门 打开 Sublime,选择 Tools > Build System > New Build System... 会打开一个新的文件,粘贴以 ...
- Euler-Maruyama discretization("欧拉-丸山"数值解法)
欧拉法的来源 在数学和计算机科学中,欧拉方法(Euler method)命名自它的发明者莱昂哈德·欧拉,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解.它是一种解决常微分方程数值积分 ...
- Linux Supervisor 守护进程基本配置
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...
- MSMQ学习
一.理论准备 MSMQ(MicroSoft Message Queue,微软消息队列)官方的解释是:在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布 ...