vsv*_*sya 7 hook desktop windows-xp windows-vista
我写了一个程序,在桌面图标下绘制桌面壁纸上的小部件,一切都很好.但是我揭示了一个奇怪的错误 - 我的程序在其他一些计算机上不起作用 - 它们在启动后显示相同的桌面没有小部件.
那么,任何人都有任何经验,在这方面有一些知识吗?请帮我!:)
(我找不到附近的任何计算机,其中小部件不起作用,在我的计算机上运行良好.我写了很多测试程序,其尝试用相当的方法在桌面上绘制任何东西,但测试在我的朋友计算机中也没有显示任何内容. )
绘图方法:
我写了一个dll,找到桌面窗口(progman-> child-> child))并创建一个钩子并为桌面安装自己的窗口过程.在窗口过程中,我挂钩WM_ERASEBKGND:
case WM_ERASEBKGND:
HDC hdc = (HDC)wparam;
PaintDesktop(hdc);
WidgetPaint(hdc);
return 1;
Run Code Online (Sandbox Code Playgroud)
//我跳过这段代码来获取和设置剪裁区域以便快速绘制.(我尝试了所有剪辑和没有剪裁的组合)
在测试中我也尝试在WM_PAINT消息中绘制具有相同结果的小部件 - 所有这些都已经在我身上工作,但并不适用于所有朋友.
upd:我解决了!:)
我解决了!这很简单,就是 64 位机器)所以我编译了 64 位代码,并且小部件开始工作得很好!
并且 -
PaintDesktop(hdc);
Run Code Online (Sandbox Code Playgroud)
将使用 Aero 在 Windows7(和 Vista)中生成非常明亮的壁纸。(用户的壁纸变亮)。必须是
CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam);
Run Code Online (Sandbox Code Playgroud)
原因 - Aero 将 PaintDesktop() 视为通常的绘画(在虚拟屏幕壁纸上,与桌面上的相同)并进行颜色求和。
问候!:)
| 归档时间: |
|
| 查看次数: |
1546 次 |
| 最近记录: |