在桌面上的图标下绘图

时间:2009-09-11 15:43:42

标签: windows-vista windows-xp desktop hook

我写了一个程序,在桌面图标下绘制桌面壁纸上的小部件,一切都很好。 但我揭示了一个奇怪的错误 - 我的程序在其他一些计算机上无效 - 它们显示出来 启动后没有小部件的同一个桌面。

那么,任何人都有这方面的知识吗?请帮我! :)

(在我的电脑中,我找不到附近的任何电脑,小部件不起作用,一切正常。 我写了很多测试程序,尝试用相当的方法在桌面上绘制任何东西, 但测试在我的朋友计算机上也没有显示任何内容。)

绘图方法:

我写了一个dll,找到了桌面窗口(progman-> child-> child)) 并创建一个钩子并为桌面安装自己的窗口过程。 在窗口过程中,我挂钩了WM_ERASEBKGND:

case WM_ERASEBKGND:
  HDC hdc = (HDC)wparam;
  PaintDesktop(hdc);
  WidgetPaint(hdc);
  return 1;

//我跳过这段代码来获取和设置剪裁区域以便快速绘制。 (我尝试了所有剪辑和剪辑的组合)

在测试中,我也尝试在WM_PAINT消息中绘制具有相同结果的小部件 - 所有这些都已经对我有用,但并不适用于所有朋友。

upd:我解决了! :)

1 个答案:

答案 0 :(得分:4)

我解决了! 这很简单就是一台64位机器) 所以我编译我的64位代码和小部件启动工作相当不错!

而且, -

PaintDesktop(hdc);

将使用Aero在Windows7(和Vista)中生成非常明亮的壁纸。 (用户的壁纸变得明亮)。 必须是

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam);

原因 - Aero将PaintDesktop()视为通常的颜色(通过虚拟屏幕壁纸,与桌面上相同)并使用颜色求和。

问候! :)