首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以重新获得丢失的运行应用程序的系统托盘图标吗?

我可以重新获得丢失的运行应用程序的系统托盘图标吗?
EN

Stack Overflow用户
提问于 2009-07-11 23:08:01
回答 3查看 2.5K关注 0票数 5

既然我终于得到了这个问题的答案:Can you send a signal to windows explorer to make it refresh the systray icons,它问的是如何删除失效的systray图标,我想问的是相反的问题。

有没有办法“轻推”一个应用程序,在它丢失的情况下重新显示它的systray图标?

自从我安装了Avira AV后,它就发生在我的Apache Monitor上。

好吧,诚然,这可能只是一个副作用,但让正在运行的应用程序终止并重新启动它,只是因为它没有正确显示systray图标,这是相当恼人的。

提前谢谢你,

古斯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-22 02:41:56

我已经编写了一个向系统中所有顶级窗口发送TaskbarCreated消息的项目。如果他们注册了一个托盘图标,这应该会导致他们在资源管理器崩溃后恢复图标。

我在麻省理工学院的许可下发布了the source,并在自述文件中提供了the compiled console application的链接(与Lazarus一起)。

当然,还有一些改进可以做,比如如果知道图标已经在任务栏中,就不发送消息,但现在这款应用程序会让我知道在Explorer崩溃时丢失的图标重新出现。

票数 4
EN

Stack Overflow用户

发布于 2009-07-11 23:17:48

恢复任务栏图标是由应用程序本身(而不是资源管理器)实现的。有一个名为"TaskbarCreated“的窗口消息(它的值可以通过RegisterWindowMessage("TaskbarCreated")获得),应用程序需要响应它,以便在必要时恢复任务栏图标。

例如,应用程序可以执行以下操作:

代码语言:javascript
运行
复制
const int uTaskbarCreatedMsg = RegisterWindowMessage("TaskbarCreated");

然后在它的WndProc函数中:

代码语言:javascript
运行
复制
LRESULT CALLBACK WndProc(HWND w, UINT msg, WPARAM wparam, LPARAM lparam)
{
    // ... handle other messages
    if (msg == uTaskbarCreatedMsg) {
        NOTIFYICONDATA nid;
        // fill in details to create icon
        Shell_NotifyIcon(NIM_ADD, &nid);
        return 0;
    }
    // ... default message handling
}

因此,为了强制应用程序恢复其任务栏图标,您需要将相同的TaskbarCreated消息发送到应用程序中的相应窗口。获得窗口的HWND的一种方法是使用FindMessage (因为Apache Monitor是开源的,所以很容易发现要查找哪个窗口)。

票数 10
EN

Stack Overflow用户

发布于 2012-03-03 12:54:57

这适用于我(Windows 7- 64位)

  1. Launch taskmanager
  2. Kill apachemonitor process
  3. 从Start menu

启动apachemonitor

您现在应该在系统托盘中看到该图标。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1114887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档