2012-06-14 16 views
22

Ho realizzato un piccolo programma in C# che voglio eseguire in background e dovrebbe apparire solo quando viene premuta una determinata combinazione di tasti. Come posso fare questo?Sviluppa un programma che viene eseguito in background in .NET?

+0

Window Application Service - http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx – adatapost

+0

Hai guardato questa risposta: http://stackoverflow.com/questions/2499095/how-to -assign-a-shortcut-key-qualcosa-come-ctrlf-a-un-testo-box-in-windows-fo – Kane

risposta

19

ci sono almeno tre modi per farlo:

  • Classic Windows Service applicazione. L'articolo "Creating a Basic Windows Service in C#" di CodeProject ti aiuterà. In tal caso si utilizza lo spazio dei nomi System.ServiceProcess. A proposito, in tal caso si dovrebbe leggere l'articolo "System.ServiceProcess Namespace" da MSDN. Ecco una breve citazione:

    Lo spazio dei nomi System.ServiceProcess fornisce classi che consentono di implementare, installare e controllare le applicazioni di servizio di Windows. I servizi sono eseguibili di lunga esecuzione che vengono eseguiti senza un'interfaccia utente.

  • residenti in memoria programma. Ma questo è quasi impossibile da fare con C#. Usa C++ o meglio C per questo scopo, se vuoi. Se vuoi cercare da solo, usa la parola chiave TSR.

  • L'ultimo che è uno sporco. È sufficiente creare un'applicazione C# senza forma e try a hide da Task Manager.

+0

una domanda. posso aggiungere una GUI al servizio di Windows? –

+1

No, ma è possibile creare un'applicazione GUI separata per l'interconnessione con un servizio – gahcep

+0

qualsiasi linea guida su come posso farlo? –

9

Per consentire al programma di essere completamente invisibile, penso, una cattiva idea. Quindi l'utente non può integrarsi con il programma. Suggerirei di inserirlo nella SysTray (un'icona accanto all'orologio di 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. 

Per monitorare la tastiera è possibile utilizzare il gancio tastiera a basso livello (see example) o allegare un hootkey (See example)

+0

Che ne dici di Sticky Keys? O lo strumento Magnifier? Ci sono alcune possibilità interessanti .. (concesse queste non in realtà "eseguite sullo sfondo" AFAIK) –

+0

Beh, non è un programma commerciale qualcosa che sto solo cercando di imparare. Il progarm avrebbe una GUI per la prima volta, quindi funzionerà in background e diventerà visibile solo dopo aver premuto una determinata combinazione di tasti. –

0

Se voglio davvero creare un programma che sia realmente in esecuzione in background, prova a creare un servizio di Windows. relativo là, se quando si crea un nuovo progetto

+0

ok ho guardato fatto una rapida ricerca sul web sul servizio di Windows e wikipedia dice che un servizio Windows non richiede l'intervento dell'utente. Forse potrei chiaramente cancellare il mio requisito. Il programma dovrebbe avere una GUI la prima volta che viene eseguito. Successivamente apparirà solo quando viene premuta una determinata combinazione di tasti. È possibile creare una GUI con il servizio di Windows? –

3

È possibile creare un servizio di un'applicazione Windows. Funziona come un processo in background. Nessuna interfaccia utente. Questo può anche avviarsi automaticamente all'avvio del computer. È possibile visualizzare il resto dei processi in background in Task Manager oppure digitare services.msc nel prompt dei comandi.

Questo potrebbe aiutare. http://msdn.microsoft.com/en-us/library/9k985bc9%28v=vs.80%29.aspx

2

Una soluzione rapida e sporca (credo che il modello di finestra di Application Service non è disponibile in Visual Studio Express e Standard):

Nuova Windows Form. Aggiungi una nuova classe alla soluzione e scrivi il codice che desideri all'interno.

Torna finestra di progettazione form, impostare la proprietà WindowState a Minimized, e aggiungere un evento Load al form. Nel gestore eventi nascondere il form e chiamare la classe:

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

L'applicazione non appare nella barra delle applicazioni e non si vede quando si preme Alt + Tab.È possibile aggiungere un'icona systray ad esso se si vuole, proprio come magol ha scritto:

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

creare un'applicazione Windows Form, ed eliminare Form1

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

Problemi correlati