2011-11-16 20 views
5

He buscado un poco, pero parece que no puedo entender cómo hacer que aparezca el menú de la consola al hacer clic derecho en la ventana de la consola en mi propia aplicación de consola como la siguiente:Menú de clic derecho en la aplicación de consola

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

¿Cómo hago que el menú aparezca en mi propia aplicación de consola cuando hago clic con el botón derecho en la ventana de la consola?

Y sí, sé que puedo usar el ícono superior izquierdo para que aparezcan las funciones del menú, ¡pero estoy buscando la solución de clic derecho!

(El problema parece surgir cuando ejecuto el archivo .exe directamente en lugar de correr a través de cmd.exe)

+0

¿Está ejecutando en el depurador? http://stackoverflow.com/questions/1060240/what-happened-to-the-context-menu-in-my-console-application –

+0

Es posible que desee leer esto: http://stackoverflow.com/questions/1944481/console-app-mouse-click-xy-coordenada-detección-comparación –

+0

No importa si ejecuta su aplicación en Visual Studio (depuración) o fuera de Visual Studio (aplicación directamente ejecutada) – Birdman

Respuesta

1

fija con la siguiente solución temporal ya que no hay ninguna solución directa a la pregunta/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

Los mensajes de ratón no van a su programa, que van a la ventana de símbolo del sistema. Tu programa no tiene ventanas

Así que, de alguna manera podría secuestrar los mensajes desde el símbolo de ver esto:

c++ get other windows messages

9

Uso SetConsoleMode para borrar el modo ENABLE_QUICK_EDIT_MODE. Es muy amable restablecer la bandera a su configuración anterior cuando se cierra el programa.

+0

¡Gracias! ¿Cómo es la sintaxis? – Birdman

+0

Para acceder a la API para esto, copie el código de [aquí] (http://www.pinvoke.net/default.aspx/kernel32.setconsolemode). Sin embargo, no estoy seguro de cómo obtener el control de la ventana de la consola. – sq33G

Cuestiones relacionadas