在python中比较光标图标位图

时间:2019-09-06 18:25:26

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

我想通过比较位图来检查光标图标是否已更改。

到目前为止,我已经尝试了下面的代码段,但是它无法正常运行。

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')

此代码仅生成一个黑色矩形位图(在Internet上找到了大多数)。通常,我宁愿不保存位图,而只是将2个位图作为带有枕头的图像进行比较,但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

创建内存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释放。