我用 C# 编写了一个小程序,我想在后台运行它,它应该只在按下某个组合键时出现。我怎样才能做到这一点?
6 回答
至少有三种方法可以做到这一点:
经典的Windows 服务应用程序。CodeProject 中的“在 C# 中创建基本 Windows 服务”一文将为您提供帮助。在这种情况下,您使用
System.ServiceProcess
命名空间。顺便说一句,在这种情况下,您应该阅读 MSDN 中的“ System.ServiceProcess 命名空间”文章。这是它的简短引述:System.ServiceProcess 命名空间提供了允许您实现、安装和控制 Windows 服务应用程序的类。服务是长时间运行的可执行文件,无需用户界面即可运行。
内存驻留程序。但这对于 C# 来说几乎是不可能的。如果您愿意,可以使用 C++ 或更好的 C 来实现此目的。如果您想自己搜索,只需使用关键字即可
TSR
。
在我看来,让程序完全不可见是个坏主意。因为用户无法与程序交互。我建议将它放在 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.
创建一个windows窗体应用程序,删除Form1
修改 program.csApplication.Run(new Form1());
为 Application.Run();
您可以创建 Windows 服务应用程序。它作为后台进程运行。没有用户界面。这也可以在计算机启动时自动启动。您可以在任务管理器中查看其余的后台进程,也可以在命令提示符中输入 services.msc。
这可能会有所帮助。http://msdn.microsoft.com/en-us/library/9k985bc9%28v=vs.80%29.aspx
一个快速而肮脏的解决方案(我认为 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;
如果您真的想创建一个真正在后台运行的程序,请尝试创建一个 Windows 服务。如果你创建一个新项目,它就在那里