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