31

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

4

6 回答 6

27

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

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

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

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

  • 最后一张是脏的。只需创建一个无形的 C# 应用程序尝试将其从任务管理器中隐藏。

于 2012-06-14T05:39:08.697 回答
12

在我看来,让程序完全不可见是个坏主意。因为用户无法与程序交互。我建议将它放在 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 挂钩(参见示例)或附加快捷键(参见示例

于 2012-06-14T05:21:01.730 回答
8

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

修改 program.csApplication.Run(new Form1());Application.Run();

于 2015-01-22T03:48:19.073 回答
3

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

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

于 2012-06-14T05:30:07.827 回答
3

一个快速而肮脏的解决方案(我认为 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;
于 2013-11-22T02:23:42.177 回答
0

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

于 2012-06-14T05:22:19.433 回答