在桌面上的图标下绘图

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:我解决了!:)

vsv*_*sya 4

我解决了!这很简单,就是 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() 视为通常的绘画(在虚拟屏幕壁纸上,与桌面上的相同)并进行颜色求和。

问候!:)