日期:2014-05-18  浏览次数:20997 次

如何把winform放在桌面最底层,要同时支持xp和win7的。
像桌面日历那种效果,程序启动就嵌在桌面上,
我找到了一段代码,能支持xp,但不支持win7,

希望同时支持xp和win7的。

如果写个函数给我最好。谢谢

------解决方案--------------------
没用过w7,所以给不了了。
你调试一下程序,也就是那几个api。应该可以用的。
------解决方案--------------------
C# code

private IntPtr GetDesktopPtr() {
    //http://blog.csdn.net/mkdym/article/details/7018318
    // 情况一
    IntPtr hwndWorkerW = IntPtr.Zero;
    IntPtr hShellDefView = IntPtr.Zero;
    IntPtr hwndDesktop = IntPtr.Zero;
    IntPtr hProgMan = Win32.FindWindow("ProgMan", null);
    if (hProgMan != IntPtr.Zero) {
        hShellDefView = Win32.FindWindowEx(hProgMan, IntPtr.Zero, "SHELLDLL_DefView", null);
        if (hShellDefView != IntPtr.Zero) {
            hwndDesktop = Win32.FindWindowEx(hShellDefView, IntPtr.Zero, "SysListView32", null);
        }
    }
    if (hwndDesktop != IntPtr.Zero) return hwndDesktop;

    // 情况二
    while (hwndDesktop == IntPtr.Zero) {//必须存在桌面窗口层次  
        hwndWorkerW = Win32.FindWindowEx(IntPtr.Zero, hwndWorkerW, "WorkerW", null);//获得WorkerW类的窗口  
        if (hwndWorkerW == IntPtr.Zero) break;//未知错误
        hShellDefView = Win32.FindWindowEx(hwndWorkerW, IntPtr.Zero, "SysListView32", null);
        if (hShellDefView == IntPtr.Zero) continue;
        hwndDesktop = Win32.FindWindowEx(hShellDefView, IntPtr.Zero, "SysListView32", null);
    }
    return hwndDesktop;
}