para hackear comandos comando basicos abrir c# .net windows graphics console

c# - basicos - comandos de cmd para hackear



¿Cómo debo crear una consola/terminal gráfica personalizada en Windows? (7)

Como primer y sencillo enfoque, usaría un TextBox en modo multilínea. Observe los TextChanged o KeyPressed o KeyUp y actúe en consecuencia. Más adelante, puede crear su propio control derivando uno de un control de Panel simple, por ejemplo. La representación se realiza al anular el método OnPaint (WinForms). No se requiere ningún bucle, solo una llamada a Invalidate o Refresh .

Use una matriz de cadenas o una List<string> o una LinkedList<string> como búfer de línea o simplemente use el texto almacenado en el cuadro de texto.

Si crea su propio control con WinForms, System.Windows.Forms.TextRenderer es una buena opción para representar texto. Se utilizará en OnPaint .

Desplazarse es una cosa difícil si crea su propio control. System.Windows.Controls.Panel ya contiene soporte de desplazamiento, sin embargo, todavía tiene que decirle al control cómo colocar y ajustar el tamaño de los botones de la barra de desplazamiento cuando cambia el texto. Por otro lado, ha movido el texto cuando el usuario mueve las barras de desplazamiento y actualiza la pantalla en consecuencia. El rendimiento no debería ser un problema para un control tan simple.

La interfaz de la consola de Windows (piense en la ventana de cmd ) es para el usuario una GUI bastante simple. Sin embargo, el nivel de eficiencia con el que maneja la representación, la entrada del usuario y el desplazamiento es muy alto. Los métodos utilizados para crear esta interfaz son, sin duda, muy diferentes a los de una GUI de escritorio tradicional.

Estoy interesado en crear mi propia consola / terminal personalizada para Windows, preferiblemente utilizando tecnologías basadas en C # y .NET (por ejemplo, GDI + o WPF administrado). Como punto de partida, me interesaría simplemente recrear el shell estándar simple de Windows. Entonces podría expandir cosas y agregar características desde allí.

Estoy buscando orientación general sobre cómo crear una IU de consola, pero algunos puntos específicos incluyen:

  • ¿Qué tipo de modelo de representación debo usar? Un bucle de render? ¿Actualizaciones parciales (como WPF)? ¿El modelo de WinForms (no estoy seguro de cómo funciona)?

  • ¿Qué tipo de almacenamiento en caché se utiliza en el modelo de representación?

  • ¿Cómo se cargan las fuentes y cómo se representan? ¿Son fuentes TrueType estándar, fuentes de mapa de bits o algo más?

  • ¿Cómo se realiza el desplazamiento de manera tan eficiente?

  • ¡Cualquier otra cosa que creas que pueda ser relevante!

De hecho, cualquier explicación de cómo la interfaz de usuario de la consola incorporada de Windows (o incluso la interfaz de usuario superior del terminal de Linux) hace estas cosas, y cómo podría emularlas, sería ideal.

Edit: Para ser claro, realmente quiero hacer esto completamente desde cero. Basado en un marco gráfico como GDI + o WPF, pero no más.


Echa un vistazo al proyecto de código abierto de la Console . Lo hace mucho, y lo hace muy bien. Proporciona una consola unificada para cualquier cosa basada en caracteres. Ejecuto cmd, bash y python cada uno en su propia pestaña.

Sin embargo, está en C ++ y no te proporcionará la diversión de escribirlo tú mismo.


Si desea crear un hermoso reemplazo del símbolo del sistema basado en .NET, sugiero que visite http://poshconsole.codeplex.com/ Utiliza WPF para elementos gráficos e implementa un host de script PowerShell. PowerShell es el reemplazo de Microsoft para el símbolo del sistema venerable. PowerShell se instala de forma predeterminada con Windows 7, pero puede descargarlo para XP y Vista. PowerShell es altamente extensible a través de scripts de uso de objetos .NET directamente. También se puede incrustar en otros programas.

WPF + PowerShell sería un excelente punto de partida para lo que quieres hacer. Si lo desea, puede cambiar PowerShell por su propio motor de comandos / secuencias de comandos. Si fuera realmente ambicioso, podría tomarse la iniciativa de implementar su propio lenguaje de scripting en el DLR para que actúe como su intérprete de comandos.

La mejor de las suertes.


Si la velocidad es primordial, entonces XNA es una forma muy rápida (codificación mínima) para dibujar su texto a alta velocidad. Puede manejar miles de sprites a cientos de FPS. Usando SpriteBatch :: DrawString () y SpriteFont puede obtener una "consola" de alta velocidad con muy poco esfuerzo de codificación. La clase estándar de "Juego" se puede modificar para volver a dibujar solo las subregiones de la pantalla a petición. Las advertencias incluyen un kerning imperfecto que le dará al texto una apariencia borrosa (es posible que pueda solucionar este problema desactivando el suavizado y teniendo cuidado con las proyecciones y la ubicación del sprite). Si esto es un problema, entonces quizás Direct2D ofrezca una mejor solución (o cualquiera de las soluciones ya mencionadas).


Tuve un gran éxito con RichTextBox para la salida. En realidad, hace todo lo que puede desear: personalización del color, procesamiento y desplazamiento efectivos, operaciones del portapapeles, etc. La entrada se organizó mediante la intercepción de los eventos de la ventana de KeyPress.


Una vez implementé una ventana de salida de texto desde cero, quería una que funcione como la ventana de salida en Visual Studio. Resultó ser más complicado de lo que esperaba, y eso fue sin ninguna capacidad de entrada.

Desafortunadamente, el código está en C ++ y pertenece a un antiguo empleador, por lo que no puedo compartirlo con usted. Pero puedo darte una idea de qué esperar.

Necesita una forma de almacenar las líneas de salida que puede indexar rápidamente. Si va a establecer un límite en el número de líneas que se muestran, también será necesario borrar las líneas desde la parte superior. En C ++ un deque<string> fue perfecto, no sé cuál es el equivalente (si existe) en C #.

Necesitará controladores para los siguientes mensajes de Windows, sin ningún orden en particular.

  • WM_LBUTTONDOWN - para iniciar una selección. Use SetCapture para rastrear el mouse mientras el botón está abajo.
  • WM_LBUTTONUP - para finalizar una selección.
  • WM_RBUTTONUP - traducir a WM_CONTEXTMENU.
  • WM_CONTEXTMENU - para mostrar un menú con Copiar / Cortar / Pegar y cualquier otra cosa que desee.
  • WM_KEYDOWN: para responder a las 4 teclas del cursor, Inicio / Fin, RePág / AvPág. Ctrl-A / Ctrl-C / Ctrl-X / Ctrl-V / Ctrl-D.
  • WM_PAINT - para pintar el contenido de la ventana.
  • WM_SIZE: para actualizar las barras de desplazamiento cuando cambia el tamaño de la ventana.
  • WM_VSCROLL: para actualizar la parte visible de la ventana durante el desplazamiento vertical.
  • WM_HSCROLL: para actualizar la parte visible de la ventana durante el desplazamiento horizontal.
  • WM_CREATE - para la inicialización cuando se crea la ventana.
  • WM_SETFOCUS: para crear un símbolo de sistema para mostrar la posición actual en la ventana.
  • WM_KILLFOCUS: para matar el cursor ya que solo la ventana enfocada actualmente debería mostrar un símbolo.
  • WM_MOUSEMOVE: para rastrear los cambios en la selección mientras el botón izquierdo del mouse está presionado.
  • WM_CAPTURECHANGED - para finalizar una selección.
  • WM_TIMER - para desplazarse automáticamente cuando el cursor abandona la ventana durante una selección.
  • WM_GETDLGCODE - para agregar DLGC_WANTARROWS para que las teclas de flecha puedan pasar.
  • WM_MOUSEWHEEL - para responder a la rueda del mouse para el desplazamiento.

A medida que se agregan líneas al búfer de texto, ajuste el rango de las barras de desplazamiento. El rango de la barra de desplazamiento vertical será el número total de líneas, y el rango de la barra de desplazamiento horizontal será el ancho de la línea más ancha.

Es mejor tener una sola fuente que sea monoespaciada, ya que facilita mucho los cálculos. La tecnología de fuente específica no importa tanto. Solo necesitas poder rastrear las posiciones de los personajes.

¿Cómo se realiza el desplazamiento de manera tan eficiente? Realiza un seguimiento de las líneas superior e inferior de la ventana a medida que se desplaza, y cuando llega un mensaje de pintura, solo pinta las líneas que están visibles actualmente. Los otros todavía están en el búfer, pero no son tocados. Es posible borrar el contenido de la ventana a medida que se desplaza y solo pintar las partes que vienen desde la parte superior o inferior, pero con los procesadores de hoy en día es un esfuerzo inútil: la ventana hará un repintado completo tan rápido que no se dará cuenta. .

Edición: Casualmente, me topé con esta guía de Microsoft para desplazar las barras, que debería ser una lectura esencial para esta tarea. http://msdn.microsoft.com/en-us/library/windows/desktop/bb787527.aspx


FastColoredTextBox proyecto FastColoredTextBox en el github tiene un ejemplo de consola . Es:

  • Eficiente y rapido
  • De colores
  • Disponible en WPF y WinForm
  • En C # y fácil de leer.

Creo que leer el código te ayudará mucho.