c# - 系统托盘访问

标签 c# .net

有没有办法(在 C# 中)访问系统托盘? 我不是在谈论制作通知图标。 我想遍历托盘中的项目(我会猜测这些过程,但我不知道如何确定托盘中实际有什么,什么只是一个过程)并且还用我自己的图标表示这些项目用户界面。

最佳答案

您如何看待 Win32 互操作?我找到了 C/Win32 code这可能对你有用。 (实际上,这看起来是一个有趣的问题,所以我可能会尝试自己解决它,但不是现在)。

神奇的是他获得了系统托盘窗口的句柄:

NotifyWnd = FindWindowEx(SysTray, 0, "TrayNotifyWnd", 0);

然后他在它的消息泵上设置了一个钩子(Hook):

hHook=SetWindowsHookEx(WH_CALLWNDPROC,HOOKPROC(MsgProc),
         hInstance,dwExplorerThreadId);

然后在消息泵钩子(Hook)回调期间,他获得了对有关窗口的一些指针数据的引用:

TWDataT* twd=(TWDataT*)GetWindowLong(NotifyWnd,0);

那么谜团就是他的循环:

      pTWIconDataT p=COMCTL32_332(twd->iconsInfo,i);

COMCTL32_332 是用 GetProcAddress 定义的,并指向 Comctl32.dll 的序号 332 - 根据我使用 Dependency Viewer 的检查,这是 DPA_GetPtr ,它从动态指针数组中获取数据。我不熟悉幕后发生的事情,但这似乎并非完全不可能。

我打算自己尝试一下,但希望这是一个让您入门的好地方。 :)

关于c# - 系统托盘访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264281/

相关文章:

c# - 使 WPF 窗口免疫显示桌面(防止隐藏)

c# - 您如何看待我的 IDisposable 模式实现?

c# - 为什么我在 Visual Studio 中的 HTML 按钮在双击时没有创建事件处理程序?

.net - Wix 托管 Bootstrap : Installing Net framework and adding entry in add-remove program even if we cancel product installation

.net - 数据库表复制指南

javascript - ASP.NET 确认对话框第二次不起作用

c# - 尝试向用户添加角色时,Asp.NET 身份角色不起作用

c# - AES 加密 C# 解密 Java?

c# - 犀牛模拟 : How do I return numbers from a sequence

c# - UWP 无法使用自定义 OSK 在 webview 的文本框中输入数据