如何把winform放在桌面最底层,要同时支持xp和win7的。

老鱼趣多多 2012-04-18 12:29:52
像桌面日历那种效果,程序启动就嵌在桌面上,
我找到了一段代码,能支持xp,但不支持win7,

希望同时支持xp和win7的。

如果写个函数给我最好。谢谢
...全文
320 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
老鱼趣多多 2012-05-17
  • 打赏
  • 举报
回复
能否具体点?

[Quote=引用 11 楼 的回复:]

其实还有一种方法。叫窗体穿透可能效率更好些。
[/Quote]
足球中国 2012-04-30
  • 打赏
  • 举报
回复
其实还有一种方法。叫窗体穿透可能效率更好些。
nonocast 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

改代码在win7下调试成功,在xp下不好用。。。


[/Quote]

用SPY++自己试试,XP已经很久没碰了,帮不到你
crystal_lz 2012-04-20
  • 打赏
  • 举报
回复
话说 貌似 大概 记得 我在api手册上看到有这么个函数SetWindowPos
如果第二个参数是HWND_BOTTOM不知道会有啥效果
- -!、、貌似 楼主要的是 镶嵌到桌面 那就 用setParent吧 不过、、
如六楼 去找桌面的listview控件 然后镶嵌进去、、、
老鱼趣多多 2012-04-18
  • 打赏
  • 举报
回复
改代码在win7下调试成功,在xp下不好用。。。

[Quote=引用 5 楼 的回复:]
C# code


IntPtr desktopHwnd = GetDesktopPtr();
IntPtr ownHwnd = new WindowInteropHelper(this).Handle;
IntPtr result = Win32.SetParent(ownHwnd, desktopHwnd);
[/Quote]
老鱼趣多多 2012-04-18
  • 打赏
  • 举报
回复
亲,每次看到你的头像,都有种想捏死你的感觉,哈哈,开玩笑。
[Quote=引用 4 楼 的回复:]
没用过w7,所以给不了了。
你调试一下程序,也就是那几个api。应该可以用的。
[/Quote]
nonocast 2012-04-18
  • 打赏
  • 举报
回复

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;
}

nonocast 2012-04-18
  • 打赏
  • 举报
回复

IntPtr desktopHwnd = GetDesktopPtr();
IntPtr ownHwnd = new WindowInteropHelper(this).Handle;
IntPtr result = Win32.SetParent(ownHwnd, desktopHwnd);
足球中国 2012-04-18
  • 打赏
  • 举报
回复
没用过w7,所以给不了了。
你调试一下程序,也就是那几个api。应该可以用的。
老鱼趣多多 2012-04-18
  • 打赏
  • 举报
回复
改注册表?改注册表干什么?!
vinjent 2012-04-18
  • 打赏
  • 举报
回复
using Microsoft.Win32;
using System.Security.Permissions;


[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, ViewAndModify="HKEY_CURRENT_USER")]
Registry.LocalMachine.CreateSubKey(...).SrtValue(...)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧