zoukankan      html  css  js  c++  java
  • python光标图片获取

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

  • 相关阅读:
    Uploadify v3.2.1 上传图片并预览
    mybatis批量操作
    500 拦截错误输出
    jsnop
    java目录
    设置360调用样式 IE调用样式
    Spring加载resource时classpath*:与classpath:的区别
    context:annotation-config 与context:component-scan
    Andriod调用http请求
    JDK环境变量
  • 原文地址:https://www.cnblogs.com/moshuixiong/p/11543257.html
Copyright © 2011-2022 走看看