您对 Win32 互操作有何看法?我发现C/Win32 代码 http://skyscraper.fortunecity.com/gigo/311/winprog/shellico.txt这可能对你有用。 (实际上,这看起来是一个有趣的问题,所以我可能会尝试自己解决它,但不是现在)。
神奇的是他获得了系统托盘窗口的句柄:
NotifyWnd = FindWindowEx(SysTray, 0, "TrayNotifyWnd", 0);
然后他在消息泵上设置了一个钩子:
hHook=SetWindowsHookEx(WH_CALLWNDPROC,HOOKPROC(MsgProc),
hInstance,dwExplorerThreadId);
然后在消息泵钩子回调期间,他获得对有关窗口的一些指针数据的引用:
TWDataT* twd=(TWDataT*)GetWindowLong(NotifyWnd,0);
谜团就在于他的循环:
pTWIconDataT p=COMCTL32_332(twd->iconsInfo,i);
COMCTL32_332 是用 GetProcAddress 定义的,并指向 Comctl32.dll 的序数 332 - 根据我使用 Dependency Viewer 的检查,那就是DPA_GetPtr http://msdn.microsoft.com/en-us/library/bb775617.aspx,它从动态指针数组中获取数据。我不熟悉幕后发生的事情,但这似乎并非完全不可能。
我自己会尝试一下,但希望这是一个让您开始的好地方。 :)