我做了一个程序..可以改变壁纸...但是需要刷新桌面 ...怎么弄呢???
帮帮忙

解决方案 »

  1.   

    使用Win32API, 具体查一下Windows API手册吧.
      

  2.   

    [DllImport("user32.dll")]
    public static extern bool InvalidateRect(IntPtr hwnd,IntPtr lpRect,bool bErase);
    private void button1_Click(object sender, System.EventArgs e)
    {
      InvalidateRect(IntPtr.Zero ,IntPtr.Zero ,true);
    }
      

  3.   

    用这个再试试:[DllImport("shell32.dll")]
    public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
    SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero);
      

  4.   


    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetDesktopWindow();
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern bool RedrawWindow(IntPtr hwnd, RECT rcUpdate, IntPtr hrgnUpdate, int flags);RedrawWindow(GetDesktopWindow(), null, IntPtr.Zero, 0x85);
      

  5.   

    或使用
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern bool UpdateWindow(IntPtr hWnd);
      

  6.   

    测试:SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero); //可以。
    RedrawWindow(GetDesktopWindow(), null, IntPtr.Zero, 0x85);//不行
    UpdateWindow(GetDesktopWindow());//不行 
    //OS: vista 64bit. vs2008.
      

  7.   

    经测试, 注意 hwnd 这个参数的获取方式SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero); //可以,但是刷新时会闪屏,效果不好RedrawWindow(GetWindowDc(GetDesktopWindow()), null, IntPtr.Zero, 0x85);//可以刷新,也会闪屏 ,但是最后个参数错误。这个函数我没多作了解UpdateWindow(GetWindowDc(GetDesktopWindow()));//可以,楼主的参数错误,导致不能画图,这种方法的刷新效果比 SHChangeNotify 好很多。另外 PaintDesktop(GetWindowDc(GetDesktopWindow()));  也能够刷新桌面,用法跟 UpdateWindow 一样。基本上就是这样的情况了