当前位置: 移动技术网 > IT编程>脚本编程>Python > python光标图片获取

python光标图片获取

2019年09月18日  | 移动技术网IT编程  | 我要评论

昆莱山刷猴子,个人简历封面素材,将门风云主题曲

# -*- 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并没有找到

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网