Red de conocimiento del abogados - Ley de patentes - C, ¿cómo permitir que el programa simule al usuario ingresando un comando y presione Enter para ejecutar el comando (en lugar de escribir una función de salida solo para mostrar)?

C, ¿cómo permitir que el programa simule al usuario ingresando un comando y presione Enter para ejecutar el comando (en lugar de escribir una función de salida solo para mostrar)?

Se puede implementar usando WinApi y necesita incluir windows.h.

Se requieren dos módulos, uno es un módulo que detecta la tecla Enter y el otro es un módulo que simula comandos de entrada.

Para detectar la tecla Enter, hay dos funciones disponibles: GetKeyState y GetAsyncKeyState. Los parámetros de ambas funciones son códigos de clave virtuales. Los códigos de clave virtual se pueden consultar en el sitio web: Códigos de clave virtual.

Los valores de retorno de las dos funciones son los mismos: se devuelve un número de tipo corto. El tipo corto es un tipo de datos con signo de 16 bits si se presiona la tecla a consultar y el más alto. El bit del valor de retorno se establece en 1, entonces Este número representa un número negativo, por lo que puede juzgarse por <0 o> 0.

La diferencia entre las dos funciones es que GetKeyState no devuelve el estado real del teclado, sino el mensaje del teclado obtenido por el programa. En pocas palabras, si el programa no obtiene el foco, no puede obtener información clave y devuelve un estado sin presionar ninguna tecla. GetAsyncKeyState devuelve el verdadero estado de la clave. Coloque GetAsyncKeyState en un bucle. Cada bucle detecta si se presiona la tecla Enter. Si se presiona, simula el comando de entrada. Después de cada bucle, duerme durante un período de tiempo para ahorrar recursos del sistema.

También hay dos métodos para simular comandos de entrada: enviar información clave a la ventana especificada sendMessage y simular claves

Dado que el software que probé no puede usar el primer método, solo presentaré el segundo método.

Las claves simuladas son como las claves reales. La información clave será recibida por la ventana de destino solo cuando la ventana de destino reciba el foco. Por lo tanto, por un lado, el programa no puede obtener el foco y solo puede usar la función GetAsyncKeyState; por otro lado, debemos dejar que la ventana de destino obtenga el foco;

Deje que la ventana de destino se enfoque. La forma más sencilla es hacerlo manualmente, con un solo clic. Por supuesto, también puede usar la función FindWindow, o iniciar el programa de destino mediante el programa y obtener el identificador, y luego llamar a winapi para que gane foco. Dado que el requisito es presionar la tecla Intro para comenzar a simular las teclas, la operación manual es suficiente, por lo que no entraré en detalles aquí.

Para simular pulsaciones de teclas, generalmente se utiliza la función Keybd_event. La función tiene 4 parámetros. En circunstancias normales, el segundo y cuarto parámetro se pueden configurar en 0. El primer parámetro es el código de tecla virtual del botón. El tercer parámetro es el estado del botón. 0 significa presionado y KEYEVENTF_KEYUP significa levantado. Tenga en cuenta que se recomienda dormir durante unos milisegundos entre presionar y levantar; de lo contrario, es posible que la ventana de destino no pueda obtener la información clave.

Para simular clics del mouse, generalmente se usa mouse_event, generalmente junto con la función SetCursorPos(x, y). Similar a Keybd_event, mouse_event tiene 5 parámetros. El primero es dwFlags, como se muestra a continuación. El segundo y tercer parámetro representan respectivamente la posición relativa del mouse y generalmente se establecen en 0. El cuarto parámetro es dwData, la cantidad de movimiento de la rueda, el valor positivo avanza y el valor negativo retrocede. El quinto parámetro generalmente se establece en 0.

El método de uso es similar a la función Keybd_event. Utilice la función SetCursorPos(x, y) para mover el cursor del mouse a la posición especificada (x desde el lado izquierdo de la pantalla, y desde la parte superior de la pantalla) y use mouse_event para simular un clic del mouse. También puede usar mouse_event para presionar el mouse primero y luego usar SetCursorPos(x, y) para simular el arrastre del mouse. Lo mejor es dormir unos milisegundos entre medias.

Haga clic para ingresar la descripción de la imagen

Enciclopedia GetKeyState_Baidu

Enciclopedia GetAsyncKeyState_Baidu