# -*- 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. nyoj 290 动物统计加强版 (字典树 (Trie) PS:map<TLE>)

    动物统计加强版 时间限制:3000 ms  |  内存限制:150000 KB 难度:4   描述 在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单 ...

  2. nyoj 513-A+B Problem IV (java BigDecimal, stripTrailingZeros, toPlainString)

    513-A+B Problem IV 内存限制:64MB 时间限制:1000ms 特判: No 通过数:1 提交数:2 难度:3 题目描述: acmj最近发现在使用计算器计算高精度的大数加法时很不方便 ...

  3. 【前端知识体系-CSS相关】CSS预处理器

    1.常见的CSS预处理器有哪些? [!NOTE] css预处理器:用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作,可以让你的CS ...

  4. C# 彻底搞懂async/await

    前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...

  5. Pod镜像拉取策略imagePullPolicy

    默认值是IfNotPresent Always 总是拉取: 首先获取仓库镜像信息, 如果仓库中的镜像与本地不同,那么仓库中的镜像会被拉取并覆盖本地. 如果仓库中的镜像与本地一致,那么不会拉取镜像. 如 ...

  6. 【翻译】全球用尽IPv4的一点思考

    作者:Dimple 公众号:奔跑吧攻城狮 简介:专属于Java和Android开发,和你聊聊职场话题,一同展望未来 作为小小号主的我表示很无力啊,这几天,天天都是热点.前有网易员工勇敢发声维护自己的利 ...

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

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

  8. linux alias(命令别名)

    alias:获取定义的所有命令别名 alias NAME='COMMAND':定义别名 unalias NAME:撤销别名

  9. 设计模式之工厂模式(Factory)

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/53348412 本文出自: [HansChen的博客] 设计模式系列文章: 设计模式之 ...

  10. JDK API1.6常用方法

    一.String类 常见用法 : (String类代表字符串,JAVA程序中的所有字符串字面值(如“abc”)都作为此类的实例实现,字符串是常量,他们的值在创建之后不能更改,字符串缓冲区支持可变的字符 ...