有没有办法(在C#中)访问系统托盘?我不是在谈论制作通知图标.我想迭代托盘中的项目(我会猜测过程,但我不知道如何确定托盘中的实际内容以及只是一个过程)并且还用我自己的图标表示项目UI.
你对Win32互操作有什么看法?我找到了可能适合你的C/Win32代码.(实际上,它看起来像一个有趣的问题所以我可能会尝试自己解决它,而不是现在).
神奇似乎是他获得了系统托盘窗口的句柄:
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,它从动态指针数组中获取数据.我不熟悉那里幕后发生的事情,但似乎并不是完全不可能的.
我自己会玩这个,但希望这是一个让你入门的好地方.:)