文档章节

python光标图片获取

o
 osc_isezqdgg
发布于 2019/09/18 16:21
字数 787
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
PyAutoGUI——让所有GUI都自动化

2015-08-17:输入中文bug没有解决,目前的解决方案是Python 2.X环境下安装pyperclip和pyautogui,用复制粘贴来实现。 In [ ]: import pyperclipimport pyautogui PyAutoGUI中文输入需要用粘贴...

osc_1fuqrqut
2019/04/23
6
0
Python的GUI编程(TK)

TK在大多数 Unix平台、Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口。可实现Python的GUI编程。 Tkinter模块("Tk 接口")是python的标准Tk GUI工具包...

osc_zegihifx
2018/11/16
3
0
SQLite - Python

SQLite - Python 安装 SQLite3 可使用 sqlite3 模块与 Python 进行集成。sqlite3 模块是由 Gerhard Haring 编写的。它提供了一个与 PEP 249 描述的 DB-API 2.0 规范兼容的 SQL 接口。您不需要...

杨百盛
2019/08/20
12
0
万能的Python,还能用来制作高大上的进度条?

对于开发或者运维来说,使用Python去完成一些跑批任务,或者做一些监控事件是非常正常的情况。那么如何有效的监控任务的进度,除了在任务中加上log外,还能不能有另一种方式来了解任务进展到...

上海小胖
2019/03/19
176
0
如何将vim改造为python的IDE

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: Jeffrey Wang PS:如有需要Python学习资料的小伙伴可以...

osc_nbqoh20k
2019/11/30
2
0

没有更多内容

加载失败,请刷新页面

加载更多

使用命名管道承载gRPC

最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解...

osc_nq69o22c
48分钟前
16
0
06-敏捷开发框架-apis 脚本库 引用位置无关性设计

动态引入技术的设计,对我们来说非常重要。 同时也说明动态语言的使用对我们来说也是非常重要。 没有动态语言的支撑,有些想法可能不容易实现,或者有替代方案,可能会花更大的代价。 前端开...

osc_5zg9z6t1
50分钟前
21
0
(三)学习了解OrchardCore笔记——灵魂中间件ModularTenantContainerMiddleware的第一行①的模块部分

  了解到了OrchardCore主要由两个中间件(ModularTenantContainerMiddleware和ModularTenantRouterMiddleware)构成,下面开始了解ModularTenantContainerMiddleware中间件第一行代码。   ...

osc_kdarxvx0
52分钟前
15
0
50Mn18Cr4V锻锻环件

电机无磁护环怎么锻性能才能《高高》?50Mn18Cr4V高锰无磁钢在变形温度为900~1 100℃、应变速率为0.1 ~10s-1条件下的热变形行为. 结果,VC第二相的应变诱导析出对50Mn18Cr4V的热变形行为产生...

无磁钢
52分钟前
16
0
【遇见offer】一汽-大众实习生专场来啦!成长+学习+福利,一个也不能少~

在上次一汽-大众的社招直播之后,实习生的专场招聘也终于来啦! 针对2020年暑期,我们提供了非常多的实习岗位给大家选择。 如果你想得到大厂实习的宝贵经验,如果你想得到更快速的成长,如果...

osc_b88oux8w
53分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部