您的位置:首页 > 其它

Windows 7桌面显示图标窗口类名称

2015-09-16 17:56 555 查看
在windows XP时代,我们获取桌面图标窗口的句柄往往用一下语句:

HWND hwndParent = ::FindWindow( "Progman", "Program Manager" );
HWND hwndSHELLDLL_DefView = ::FindWindowEx( hwndParent, NULL, "SHELLDLL_DefView", NULL );
HWND hwndSysListView32 = ::FindWindowEx( hwndSHELLDLL_DefView, NULL, "SysListView32", "FolderView" );


可是在windows 7时代,上述代码失效了,经过SKY++分析,发现类名为"Progman"的窗口根本就没有子窗口,而桌面图标窗口在一个类名为"WorkerW"的窗口下面。其中:窗口"FloderView"(类名SysListView32)即为桌面图标窗口,因此,老的方法自然无法成功,但是由于类名为"WorkerW"的窗口不止一个,所以必须遍历到含有类名为"SHELLDLL_DefView"子窗口的才是,故:

Windows 7下,我们取桌面图标窗口的句柄使用以下语句:

HWND hParent = NULL;
HWND hDefView = NULL;
HWND hDeskIcon = NULL;

//获得第一个WorkerW类的窗口
hParent = FindWindowEx(0, 0, L"WorkerW", L"");

//接着遍历
while ((!hDefView) && hParent)
{
	hDefView = FindWindowEx(hParent, 0, L"SHELLDLL_DefView", 0);
	hParent = FindWindowEx(0, hParent, L"WorkerW", L"");
}

hDeskIcon = FindWindowEx(hDefView,0,L"SysListView32",L"FolderView");


好了,经过尝试,这段代码确实可以再win7下正常工作,但是肯定不能再winXp下正常工作(我没有尝试),因此,要写出具有通用性的代码,这段代码还需网友改进(其实上面两段代码加以判断叠加即可)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: