我想通过比较位图来检查光标图标是否已更改。
到目前为止,我已经尝试了下面的代码段,但是它无法正常运行。
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个位图作为带有枕头的图像进行比较,但是我不知道该怎么做。
答案 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释放。