【问题标题】:Develop a program that runs in the background in .NET?开发一个在.NET 中在后台运行的程序?
【发布时间】:2012-06-17 03:06:08
【问题描述】:

我用 C# 编写了一个小程序,我想在后台运行它,它应该只在按下某个组合键时出现。我该怎么做?

【问题讨论】:

标签: c# .net


【解决方案1】:

在我看来,让程序完全不可见是个坏主意。因为用户无法与程序交互。 我建议将它放在 SysTray 中(Windows 中的时钟图标)

    trayIcon      = new NotifyIcon();
    trayIcon.Text = "My application";
    trayIcon.Icon = TheIcon

    // Add menu to the tray icon and show it.
    trayIcon.ContextMenu = trayMenu;
    trayIcon.Visible     = true;

    Visible       = false; // Hide form window.
    ShowInTaskbar = false; // Remove from taskbar.

要监控键盘,您可以使用 LowLevel Keyboard hook (see example) 或附加 hootkey (See example)

【讨论】:

  • 粘滞键怎么样?还是放大镜工具?有一些有趣的可能性..(当然这些实际上并不是“在后台运行”AFAIK)
  • 嗯,它不是商业程序,我只是想学习。该程序第一次运行时会有一个 GUI,之后它会在后台运行,并且只有在按下某个组合键后才会显示。
【解决方案2】:

如果您真的想创建一个真正在后台运行的程序,请尝试创建一个 Windows 服务。 如果你创建一个新项目,它就在那里

【讨论】:

  • 好的,我已经在 Windows 服务上进行了快速网络搜索,维基百科说 Windows 服务不需要用户干预。也许我可以清楚地写出我的要求。程序第一次运行时应该有一个 GUI。之后它只会在按下某个组合键时出现。是否可以使用 Windows 服务制作 GUI?
【解决方案3】:

您可以创建一个 Windows 服务应用程序。它作为后台进程运行。没有用户界面。这也可以在计算机启动时自动启动。您可以在任务管理器中查看其余的后台进程,也可以在命令提示符中输入 services.msc。

这可能会有所帮助。 http://msdn.microsoft.com/en-us/library/9k985bc9%28v=vs.80%29.aspx

【讨论】:

    【解决方案4】:

    至少有三种方法可以做到这一点:

    • 经典 Windows 服务 应用程序。 CodeProject 中的“Creating a Basic Windows Service in C#”文章将为您提供帮助。在这种情况下,您使用 System.ServiceProcess 命名空间。顺便说一句,在这种情况下,您应该阅读 MSDN 中的“System.ServiceProcess Namespace”文章。这是它的简短引述:

      System.ServiceProcess 命名空间提供了允许您实现、安装和控制 Windows 服务应用程序的类。服务是长时间运行的可执行文件,无需用户界面即可运行。

    • 内存驻留程序。但这对于 C# 来说几乎是不可能的。如果您愿意,可以使用 C++ 或更好的 C 来实现此目的。如果您想自己搜索,请使用关键字TSR

    • 最后一个是脏的。只需从任务管理器创建一个无格式 C# 应用程序tryhide

    【讨论】:

    • 一个问题。我可以在 Windows 服务中添加 GUI 吗?
    • 否,但您可以创建单独的 GUI 应用程序来与服务互连
    • 任何关于我该怎么做的指南?
    • 对于这种情况,您应该使用IPC Mechanisms。从一个问题开始herehere,在 SO。
    • “无形应用”这个词为我做到了。如果有人想知道:这有点需要。因为如果需要,您可以轻松生成“监控表单”:) 在我的情况下:监控我的日志引擎。
    【解决方案5】:

    一个快速而肮脏的解决方案(我认为 Window Service Application 模板在 Visual Studio Express 和 Standard 中不可用):

    启动一个新的 Windows 窗体应用程序。 向解决方案添加一个新类并在其中编写您想要的代码。

    返回表单设计器,将 WindowState 属性设置为 Minimized,并将 Load 事件添加到表单。在事件处理程序中隐藏表单并调用您的类:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Hide(); 
        MyNewClass mynewclass=new MyNewClass();
    } 
    

    应用程序不会出现在任务栏中,并且当您按 Alt+Tab 时您看不到它。如果你愿意,你可以添加一个系统托盘图标,就像 magol 写的那样:

    NotifyIcon trayIcon = new NotifyIcon();
    trayIcon.Icon=new Icon(@"C:\iconfilename.ico");
    trayIcon.Visible = true;
    

    【讨论】:

      【解决方案6】:

      创建一个windows窗体应用,删除Form1

      将program.cs Application.Run(new Form1());修改为Application.Run();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 2019-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 2013-09-25
        • 1970-01-01
        相关资源
        最近更新 更多