# -*- coding:utf-8 -*-
import win32api
import win32gui,win32ui
import time while True :
time.sleep(1)#等待一秒
ci = win32gui.GetCursorInfo() #获取光标信息 print '包含光标类型,句柄,坐标'+str(ci) #包含光标类型,句柄,坐标
print 'GetCursor获取的句柄'+str(win32gui.GetCursor())#win32gui.GetCursor()也为获取光标句柄 但和GetCursorInfo获取的句柄并不相同,不清楚为什么? if(ci [1]==0):#在某些时候光标会被游戏或程序隐藏,因此报错
print "光标消失"
continue #-----------------------------------------------作废
#e=win32gui.SetCursor(ci[1])#更改光标 返回旧光标句柄类型
#print type(e)
#if (e == 0):
#print "光标消失"
#continue
#---------------------------------------------作废
ii=win32gui.GetIconInfo(ci[1])#返回光标的图像信息,注意:参数不可为win32gui.GetCursor()得到的句柄,不然热点读取出错,why?
print '光标参数'+str(ii) #光标类型,热点坐标x,y,黑白位图,彩色位图
#我想用彩色位图导出bmp图片并不成功,在c++将位图放入Cimg.Attach里很轻松就能save搞定
#然后我并不清楚python内是否有可以使用的方法,pil里面是没找到
bm = win32gui.GetObject(ii[3])#返回PyBITMAP类型 可以获得光标尺寸,注意,这里最好放入黑白位图来获取,放入彩色位图可能导致单色光标报错
print '高' + str(bm.bmHeight)
print '宽' + str(bm.bmWidth) gdc=win32gui.GetDC(0)#使指定上下文0中提取出一个句柄,记得释放 0也应该表示整个屏幕
hdc = win32ui.CreateDCFromHandle(gdc)#依据其句柄创造出一个DC对象
hbmp = win32ui.CreateBitmap()#创建一个新位图
hbmp.CreateCompatibleBitmap(hdc,bm.bmWidth, bm.bmHeight)#设置位图 使其与上下文兼容以及图片的大小
hdc = hdc.CreateCompatibleDC()#建立一个与屏幕兼容的DC
# CreateCompatibleDC相当于在内存开辟一块地方,将屏幕或窗口复制进来,再对其操作,待操作完成后
#再复制回屏幕,完成对屏幕的刷新
hdc.SelectObject(hbmp)#将位图放入上下文中,就可以对位图进行编辑了 win32gui.DrawIconEx(hdc.GetHandleOutput(), 0, 0, ci[1], bm.bmWidth, bm.bmHeight, 0, None,2)#图标大小
#DrawIconEx 绘制位图放入到指定的上下文中
#hdc.GetHandleOutput()返回上下文句柄
#参数(需要放入的上下文句柄,x坐标,y坐标,需要放入的光标句柄,光标的高,光标的宽,动画光标取第几帧,背景画笔(可以是空),绘图类型int)
bitmapbits = hbmp.GetBitmapBits(True)#将该图片转换为字符串 print bitmapbits
hbmp.SaveBitmapFile(hdc, 'scre99t.bmp')#将位图保存为图片,注意这里只能放dc #资源释放
win32gui.ReleaseDC(0, gdc)#释放上下文 参数(窗口句柄,上下文句柄)
hdc.DeleteDC()
win32gui.DeleteObject(hbmp.GetHandle())

真累 python还是不适合做c++的活 而且pywin32在网上例子太少,还是去国外翻出个例子,模模糊糊的算是了解了上下文,句柄的关系了

但是这里还有几点疑问

1,win32gui.GetIconInfo包含黑白位图与彩色位图 ,他们为什么在不停地变化?

2,win32gui.GetCursor()和GetCursorInfo()获取的句柄为啥不一样,且GetCursor()的句柄无法显示出热点

3,win32gui.GetIconInfo的位图是否可以直接保存为bmp,在c++中就有方法,可python并没有找到

python光标图片获取的更多相关文章

  1. Python爬虫之简单的图片获取

    简单的静态网页的图片获取: import urllib import re import os url = 'http://www.toutiao.com/a6467889113046450702/' ...

  2. python 对图片做垂直投影

    Python 对图片做垂直投影 本文利用opencv对图片进行垂直投影,做出垂直投影图,大体思路:打开图片,灰度化,二值化,按列进行统计,新建一个大小和原图一样的图片,按列进行填充: cv2.cv.G ...

  3. python智能图片识别系统(图片切割、图片识别、区别标识)

    @ 目录 技术介绍 运行效果 关键代码 写在最后 技术介绍 你好! python flask图片识别系统使用到的技术有:图片背景切割.图片格式转换(pdf转png).图片模板匹配.图片区别标识. 运行 ...

  4. Python批量图片识别并翻译——我用python给女朋友翻译化妆品标签

    Python批量图片识别并翻译--我用python给女朋友翻译化妆品标签 最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签.美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻 ...

  5. [python应用]python简单图片抓取

    前言 emmmm python简单图片抓取 1 import requests 2 import threading 3 import queue 4 from subprocess import P ...

  6. 必应(Bing)每日图片获取API

    必应(Bing)每日图片获取API January 11, 2015 API http://lab.dobyi.com/api/bing.php 介绍 Value Description title ...

  7. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

  8. Python提取图片的ROI

    图像处理经常需要提取图片的ROI,本文使用Python提取图片的ROI. 使用的Module是PIL (Pillow),一个图像处理库,用到的函数为类 Image 中的 crop 方法. 函数原型为: ...

  9. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运 ...

随机推荐

  1. redis集群节点重启后恢复

    服务器重启后,集群报错: [root@SHH-HQ-NHS11S nhsuser]# redis-cli -c -h ip -p 7000ip:7000> set cc dd(error) CL ...

  2. 淘宝小练习#css

    * { margin: 0; padding: 0; } a { text-decoration: none; } .box { background: #f4f4f4; } /* 头部样式STAR ...

  3. chrome中安装Vue调试工具vue-devtools

    一.前言 vue-devtools是一款基于浏览器的插件,用来调试vue应用.本篇文章将要总结的是如何在chrome中安装Vue的调试工具vue-devtools. 首先能想到的第一种方法就是直接在c ...

  4. opencv 6 图像轮廓与图像分割修复 2 使用多边形将轮廓包围

    使用多边形将轮廓包围 返回外部矩阵边界(boundingRect()函数) 寻找最小包围矩形(minAreaRect()函数) 寻找最小包围圆形(minEnclosingCircle函数) 用椭圆拟合 ...

  5. mysql定时任务(event事件)

    1.event事件 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器” 事件和触发器类似,都 ...

  6. python容器类型列表的操作

    列表:使用中括号进行表示元素的集合,元素与元素之间使用逗号隔开:列表中的元素可以存放不同的数据类型,但是通常存放相同的数据类型: 1.列表的声明: # 声明一个列表:变量名 = [元素1,元素2] l ...

  7. 根据json数据中某一个属性 处理数组重组的方法 (二种)

    需求:根据role 的不同分组 渲染页面 进行后期操作 后台返回数据:   因为后台返回的json数据不是我们想要的 所以就得自己来了~  要啥样整啥样 js: 第一种处理方法 使用方法: 1: th ...

  8. [翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构

    原文:Fast growing architectures with serverless and .NET Core 作者:Samuele Resca Serverless 技术为开发人员提供了一种 ...

  9. Java中代理和装饰者模式的区别

    装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案: 代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用: 装饰模式为所装饰的对象增强功能:代理模式对代理的对 ...

  10. 使用python2连接操作db2

    在python2.6下连接db2,步骤: 1.安装python2.6. (注:目前db2的驱动还不支持2.7) 2.安装setuptools,下载地址http://pypi.python.org/py ...