首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows-server中系统托盘图标的c#问题

windows-server中系统托盘图标的c#问题
EN

Stack Overflow用户
提问于 2010-07-13 22:22:09
回答 2查看 350关注 0票数 0

我使用windows server 2003 (和2008)和C#,我有一个桌面系统托盘的问题。我做了一个磁盘管理的应用程序,当应用程序启动时,它从任务栏中隐藏自己,并在系统托盘中添加一个图标。当我点击这个图标(在系统托盘中)时,应用程序的表单就会显示出来。

我已经在系统调度程序中创建了一个任务,以便在特定时间自动执行应用程序,如果我在应用程序启动时登录到服务器上(从调度程序),图标会出现在桌面的系统托盘中。但是,如果我没有登录服务器和计划程序,当我登录时,我看不到系统托盘中的图标,但我的应用程序工作正常。

我尝试了不同的方法来显示应用程序表单,例如,应用程序读取文件中的标志,当标志为真时,它强制form.Show()但不起作用。

我想我必须在桌面加载时通知资源管理器(进程)我的申请表单,但我不知道如何做到这一点。这是正确的方式吗?我在等你的建议。

诚挚的问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-13 22:37:55

我认为这是因为当没有人登录时,没有桌面会话来运行应用程序。

即使应用程序可能工作正常,但它不是在稍后登录的用户下运行,因此您看不到图标。它在后台以不同的用户身份运行。

这实际上与两个用户使用远程桌面登录时相同。一个用户可以启动一个创建systray图标的应用程序,其他用户将看不到该图标。

一种替代方案是将应用程序的逻辑放入windows服务中。然后,我将创建一个在用户登录时自动运行的客户端,检查服务当前是否处于活动状态,并显示图标和表单。

票数 2
EN

Stack Overflow用户

发布于 2010-07-13 22:47:10

当你的应用程序在你没有登录的情况下启动时,没有桌面上下文,所以你在系统托盘上显示图标的代码本质上是“失败”的--发送到图标的站点的消息被发送了,但是没有任何东西在监听它们,当然也没有人在看它们。

当您随后登录并创建桌面上下文时,您的应用程序已经在运行,并且无法知道(到目前为止)现在有一个可见的桌面来注册图标。它在启动时完成了图标注册,并且就它而言,部分工作已经完成。

因此,你需要一种方法来告诉应用程序,你在那里有一个桌面和一个系统托盘,准备在其中有一个图标,然后应用程序需要重复图标注册过程。如果您不想通过创建服务/客户端排列将核心逻辑与表示层分开,则可以将应用程序放在Startup组中,以便在您登录时运行。

你不想运行两个副本,所以调整应用程序以检查自身的其他实例,如果有一个实例将焦点切换到它并杀死它自己。然后,在焦点处理程序中,禁用然后重新启用图标托盘注册以重新发送这些消息。

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

https://stackoverflow.com/questions/3238119

复制
相关文章

相似问题

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