python光标图片获取

系统 1534 0
            
              #
            
            
               -*- 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并没有找到


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论