【问题标题】:c# problem with systray icons in windows-serverc# windows-server中系统托盘图标的问题
【发布时间】:2010-07-13 14:22:08
【问题描述】:

我使用 Windows Server 2003(和 2008)和 C#,我的桌面系统托盘有问题。我已经完成了一个用于磁盘管理的应用程序,当应用程序启动时,它会从任务栏中隐藏自己并在其中添加一个图标系统托盘。当我单击此图标(在系统托盘中)时,将显示应用程序的表单。

我在系统调度程序中创建了一个任务以在特定时间自动执行应用程序,如果我在应用程序启动时(从调度程序)登录服务器,则图标出现在桌面的系统托盘中.但是,如果我没有登录服务器并且调度程序午餐我的应用程序,当我登录时,我在系统托盘中看不到图标,但我的应用程序运行正常。

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

我想我必须在加载桌面时将我的申请表通知资源管理器(进程),但我不知道该怎么做。这是正确的方式?我正在等待你的建议。

最好的问候

【问题讨论】:

    标签: c# icons windows-explorer systray


    【解决方案1】:

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

    即使应用程序可以正常工作,但它并没有在稍后登录的用户下运行,因此您看不到图标。它在“后台”作为不同的用户运行。

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

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

    【讨论】:

      【解决方案2】:

      当您的应用程序在您未登录的情况下启动时,没有桌面上下文,因此您在系统托盘上显示图标的代码基本上“失败”了 - 发送到站点图标的消息,但什么也没有在那里听他们说话,当然也没有人在看。

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 2010-10-08
        • 2011-11-11
        • 1970-01-01
        相关资源
        最近更新 更多