2011-11-16 20 views
5

Ho cercato un po ', ma non riesco a capire come far apparire il menu della console quando si fa clic destro nella finestra della console nella mia app della console come la seguente:Menu di scelta rapida nell'app Console

http://i44.tinypic.com/2jbl82w.png

Come faccio a visualizzare il menu nella mia app della console quando si fa clic con il tasto destro sulla finestra della console?

E sì, so che posso usare l'icona in alto a sinistra per far apparire le funzioni del menu, ma sto cercando la soluzione per il clic destro!

(Il problema sembra apparire quando eseguo il file exe direttamente invece di correre attraverso cmd.exe)

+0

sono in esecuzione nel debugger? http://stackoverflow.com/questions/1060240/what-happened-to-the-context-menu-in-my-console-application –

+0

Puoi leggere questo: http://stackoverflow.com/questions/1944481/console-app-mouse-click-xy-coordinate-rilevamento-confronto –

+0

Non importa se si esegue l'applicazione in Visual Studio (Debug) o all'esterno di Visual Studio (Applicazione eseguita direttamente) – Birdman

risposta

1

fisso con le seguenti work-around poiché non c'è alcuna soluzione diretta alla domanda/problema:

string filelocation = Assembly.GetExecutingAssembly().Location; 

string filename = Process.GetCurrentProcess().MainModule.ModuleName; 
filename = filename.Replace(".exe", ""); 

Process[] processArray = Process.GetProcesses(); 

int processesExists = 0; 


for (int i2 = 0; i2 < (processArray.Length - 1); i2++) 
{ 
    if (processArray[i2].ProcessName.Contains(filename)) 
    { 
     processesExists++; 
    } 
} 

if (processesExists == 1 && !Console.Title.Contains("cmd")) 
{ 
    Process.Start("cmd.exe", "/C " + "\"" + filelocation + "\""); 
} 

if (!Console.Title.Contains("cmd")) 
{ 
    Process.GetCurrentProcess().Kill(); 
} 
2

i messaggi del mouse non stanno andando per il vostro programma, stanno andando verso la finestra del prompt dei comandi. Il tuo programma non ha finestre.

Quindi, si potrebbe in qualche modo dirottare i messaggi dal prompt dei comandi vedere questo:

c++ get other windows messages

9

Usa SetConsoleMode per cancellare la modalità ENABLE_QUICK_EDIT_MODE. È solo educato ripristinare la bandiera alle impostazioni precedenti al termine dell'esecuzione del programma.

+0

Grazie! Come si presenta la sintassi? – Birdman

+0

Per accedere all'API, copiare il codice da [here] (http://www.pinvoke.net/default.aspx/kernel32.setconsolemode). Non sei sicuro di come ottenere l'handle della finestra della console, però. – sq33G

Problemi correlati