当前位置:  开发笔记 > 编程语言 > 正文

Systray访问

如何解决《Systray访问》经验,为你挑选了1个好方法。

有没有办法(在C#中)访问系统托盘?我不是在谈论制作通知图标.我想迭代托盘中的项目(我会猜测过程,但我不知道如何确定托盘中的实际内容以及只是一个过程)并且还用我自己的图标表示项目UI.



1> Rob..:

你对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,它从动态指针数组中获取数据.我不熟悉那里幕后发生的事情,但似乎并不是完全不可能的.

我自己会玩这个,但希望这是一个让你入门的好地方.:)

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有