【问题标题】:Comparing cursor icon bitmaps in python比较python中的光标图标位图
【发布时间】:2019-09-06 18:25:26
【问题描述】:

我想通过比较位图来检查光标图标是否发生了变化。

到目前为止,我已经尝试了下面的sn-p,但它不能正常工作。

import win32api, win32con, win32gui, win32ui

info = win32gui.GetCursorInfo()
hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap(hdc, 35, 35)
hdc = hdc.CreateCompatibleDC()

hdc.DrawIcon((0,0), info[1])
hbmp.SaveBitmapFile(hdc, 'icon.bmp')

这段代码只生成一个黑色矩形位图(大部分都在互联网上找到)。一般来说,我宁愿不保存位图,而是将 2 个位图作为图像与枕头进行比较,但我不知道该怎么做。

【问题讨论】:

    标签: python python-3.x windows winapi bitmap


    【解决方案1】:

    创建内存DC和内存位图后,SelectObject用于选择内存位图到内存DC中。只有这样,位图才能工作。

    修改代码:

    import win32api, win32con, win32gui, win32ui
    
    info = win32gui.GetCursorInfo()
    hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
    hbmp = win32ui.CreateBitmap()
    hbmp.CreateCompatibleBitmap(hdc, 35, 35)
    hdc = hdc.CreateCompatibleDC()
    hdc.SelectObject(hbmp)
    
    hdc.DrawIcon((0,0), info[1])
    hbmp.SaveBitmapFile(hdc, 'icon.bmp')
    
    win32gui.DestroyIcon(info[1])
    win32gui.DeleteObject(hbmp.GetHandle())
    hdc.DeleteDC()
    

    当不再需要位图时,调用DeleteObject函数将其删除。

    类似的操作适用于游标和内存 DC 释放。

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2012-04-05
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 2020-08-26
      • 2011-09-01
      相关资源
      最近更新 更多