桌面程序嵌入桌面

在试用某些App时,发现有些App的窗口可以嵌入桌面,这样Win+D键的时候就可以看到
1、在Xp下通过FindWindow("Program manager","progman")找到

2、在win7下这个方法找到的父窗口就不好用了。用spy++看了之后,写了下面一段代码 findDesktopIconWnd(),在xp和win7下都可以找到这个父窗口。子窗口再调用SetParent(child,parent)就可 以在桌面上看到了。

 1 static BOOL enumUserWindowsCB(HWND hwnd, LPARAM lParam)
 2 {
 3     long wflags = GetWindowLong(hwnd, GWL_STYLE);
 4     if (!(wflags & WS_VISIBLE)) return TRUE;
 5 
 6     HWND sndWnd;
 7     if (!(sndWnd = FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL))) return TRUE;
 8 
 9     HWND targetWnd;
10     if (!(targetWnd = FindWindowEx(sndWnd, NULL, L"SysListView32", L"FolderView"))) return TRUE;
11 
12     HWND* resultHwnd = (HWND*)lParam;
13     *resultHwnd = targetWnd;
14 
15     return FALSE;
16 }
17 
18 HWND findDesktopIconWnd()
19 {
20     HWND resultHwnd = NULL;
21     EnumWindows((WNDENUMPROC)enumUserWindowsCB, (LPARAM)&resultHwnd);
22     return resultHwnd;
23 }
24 HWND desktopHwnd = findDesktopIconWnd();
25 
26 if (desktopHwnd)
27 {
28     SetParent(w.winId(), desktopHwnd);
29 }

 

相关文章:桌面上嵌入窗口(桌面日历)原理探索

 demo下载:https://files.cnblogs.com/files/swarmbees/DesktopDock.zip

posted @ 2016-09-22 10:49  朝十晚八  阅读(809)  评论(0)    收藏  举报

返回顶部