如何获取全局显示上下文以在任意应用窗口顶层执行BitBlt操作
全局屏幕显示上下文(DC)获取方案
你调用BitBlt直接在屏幕顶层绘制时,不需要传NULL参数,要获取桌面窗口的公开显示上下文即可实现需求,具体操作如下:
- 调用
win32gui.GetDC(0)获取桌面全局DC,参数0对应HWND_DESKTOP的句柄值,代表整个桌面窗口的上下文 - 拿到DC句柄后可直接调用
win32gui.BitBlt执行绘制操作,绘制内容会直接输出到屏幕最顶层 - 绘制完成后必须调用
win32gui.ReleaseDC(0, dc_handle)释放DC资源,否则会导致系统GDI资源泄漏
注意:直接往桌面DC绘制的内容是临时的,只要屏幕有任何刷新动作(比如窗口移动、系统弹窗、壁纸切换等),绘制的内容就会被自动擦除,如果需要持久显示需要自行实现刷新重绘逻辑
示例代码参考:
import win32gui import win32con # 获取全局桌面DC hdc = win32gui.GetDC(0) # 示例:在屏幕(100,100)位置绘制一个100*100的红色矩形 brush = win32gui.CreateSolidBrush(0x0000FF) # win32颜色格式为BGR顺序,此处对应RGB红色 win32gui.SelectObject(hdc, brush) win32gui.Rectangle(hdc, 100, 100, 200, 200) # 释放资源 win32gui.DeleteObject(brush) win32gui.ReleaseDC(0, hdc)
内容的提问来源于stack exchange,提问作者Nikolai Savulkin
相关产品推荐
相关产品推荐

