日期:2014-05-19  浏览次数:21023 次

桌面图标窗口句柄的获取
刚找了段文章:

GetDestopWindow取到的是桌面窗口的句柄,但不是我们所看到的那个包含图标的

窗口。包含图标的窗口实际上是DesktopWindow的一个字窗口。确切地讲,

Desktop       Window包含一个无标题的、类名为“SHELLDLL_DefView”的子窗口,

这个字窗口又包含一个无标题的、类名为“SysListView32”的子窗口——这才是

那个真正包含桌面图标的窗口。


C#里是不是这样写?
[DllImport( "user32 ")]
static   extern   IntPtr   GetDesktopWindow();

[DllImport( "user32 ")]
static   extern   IntPtr   FindWindowEx(IntPtr   hwndParent,IntPtr   hwndChildAfter,string   lpszClass,string   lpszWindow);

IntPtr   HWND=FindWindowEx(GetDesktopWindow(),(IntPtr)null,   "SHELLDLL_DefView ",   null);
IntPtr   HWND2=FindWindowEx(HWND,(IntPtr)null,   "SysListView32 ",   null)

HWND2是不是就是桌面图标窗口的句柄?

------解决方案--------------------
你少了一层 "Program ",下边这样一来就不为空了:

IntPtr HWND3 = FindWindowEx(GetDesktopWindow(), (IntPtr)null, "Progman ", null);
System.Diagnostics.Trace.WriteLine( "HWND3 = " + HWND3.ToString());

IntPtr HWND = FindWindowEx(HWND3, (IntPtr)null, "SHELLDLL_DefView ", null);
System.Diagnostics.Trace.WriteLine( "HWND = " + HWND.ToString());
IntPtr HWND2 = FindWindowEx(HWND, (IntPtr)null, "SysListView32 ", null);
System.Diagnostics.Trace.WriteLine( "HWND2 = " + HWND2.ToString());

------解决方案--------------------
怎么spy++里的句柄没一个和EnumWindows列出来的一样的,郁闷
-----------------------

spy++里的句柄 是十六进制
EnumWindows里的句柄 是十进制