2012-06-14 30 views
22

He hecho un pequeño programa en C# que quiero ejecutar en segundo plano y solo debe aparecer cuando se presiona una cierta combinación de teclas. ¿Cómo puedo hacer esto?¿Desarrolla un programa que se ejecuta en segundo plano en .NET?

+0

aplicación de servicio de ventana - http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx – adatapost

+0

¿Ha mirado esta respuesta: http://stackoverflow.com/questions/2499095/how-to -assign-a-shortcut-key-something-like-ctrlf-to-a-text-box-in-windows-fo – Kane

Respuesta

19

Existen al menos tres maneras de hacer esto:

  • clásico servicio de Windows aplicación. El artículo "Creating a Basic Windows Service in C#" de CodeProject lo ayudará. En ese caso, usa el espacio de nombre System.ServiceProcess. Por cierto, en ese caso, debe leer el artículo "System.ServiceProcess Namespace" de MSDN. Aquí hay una cita breve:

    El espacio de nombres System.ServiceProcess proporciona clases que le permiten implementar, instalar y controlar las aplicaciones de servicio de Windows. Los servicios son ejecutables de larga ejecución que se ejecutan sin una interfaz de usuario.

  • residente en memoria Programa. Pero esto es casi imposible de hacer con C#. Use C++ o una C mejor para este propósito, si lo desea. Si quiere buscar solo, use la palabra clave TSR.

  • La última es una sucia. Simplemente cree una aplicación sin formato C# y try en hide desde el Administrador de tareas.

+0

una pregunta. ¿Puedo agregar una GUI al servicio de Windows? –

+1

No, pero puede crear una aplicación GUI separada para interconectar con un servicio – gahcep

+0

¿Alguna guía sobre cómo puedo hacer eso? –

9

Para permitir que el programa sea completamente invisible, creo, una mala idea. Entonces el usuario no puede integrarse con el programa. recomendaría colocarlo en la bandeja del sistema (un icono junto al reloj de Windows)

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

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

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

Vigilar el teclado se puede usar el gancho de teclado de bajo nivel (see example) o adjunte una hootkey (See example)

+0

¿Qué tal las teclas adhesivas? ¿O la herramienta Lupa? Hay algunas posibilidades interesantes ... (con la condición de que en realidad no se "ejecuten en segundo plano", AFAIK) –

+0

Bueno, no es un programa comercial que estoy tratando de aprender. El progarm tendría una GUI la primera vez que se ejecuta, luego se ejecutaría en segundo plano y solo se volvería visible una vez que se presione una cierta combinación de teclas. –

0

Si Realmente quiero crear un programa que realmente se ejecute en segundo plano, intente crear un servicio de Windows. Está ahí si al crear un nuevo proyecto

+0

ok, he buscado una búsqueda web rápida en el servicio de Windows y la wikipedia dice que un servicio de Windows no requiere la intervención del usuario. Tal vez podría apuntar claramente mi requerimiento. El programa debe tener una GUI la primera vez que se ejecuta. Después, solo aparecerá cuando se presione una cierta combinación de teclas. ¿Es posible hacer una GUI con el servicio de Windows? –

3

Puede crear una aplicación de servicio de Windows. Se ejecuta como un proceso de fondo. Sin interfaz de usuario Esto también puede comenzar automáticamente cuando se inicia la computadora. Puede ver el resto de los procesos en segundo plano en el Administrador de tareas o puede escribir services.msc en Símbolo del sistema.

Esto podría ayudar. http://msdn.microsoft.com/en-us/library/9k985bc9%28v=vs.80%29.aspx

2

Una solución rápida y sucia (creo que la plantilla Aplicación de servicio de la ventana no está disponible en Visual Studio Express y Standard):

iniciar una nueva aplicación de Windows Forms. Agregue una nueva clase a la solución y escriba el código que desea dentro de ella.

Regrese al diseñador de formularios, establezca la propiedad WindowState en Minimized y agregue un evento Load al formulario. En el controlador de eventos ocultar el formulario y llame a su clase:

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

La aplicación no aparece en la barra de tareas y que no lo ven cuando se pulse la tecla Alt + Tab.Puede añadir un icono de la bandeja del sistema para que si lo desea, al igual que magol escribió:

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

Crear una aplicación de Windows Forms, Form1 y eliminar

Program.cs Modificar Application.Run(new Form1()); a Application.Run();

Cuestiones relacionadas