Estoy tratando de usar SendInput()
para enviar una frase a otra aplicación (Bloc de notas) y luego enviarla al Escriba Tecla.SendInput() Letras del teclado C/C++
¿Algún fragmento de código? O ayuda
Estoy tratando de usar SendInput()
para enviar una frase a otra aplicación (Bloc de notas) y luego enviarla al Escriba Tecla.SendInput() Letras del teclado C/C++
¿Algún fragmento de código? O ayuda
La función SendInput acepta una matriz de estructuras de ENTRADA. Las estructuras de ENTRADA pueden ser un evento de mouse o teclado. El keyboard event structure tiene un miembro llamado wVk que puede ser cualquier tecla en el teclado. El archivo de encabezado Winuser.h proporciona definiciones de macro (VK_ *) para cada clave.
Hay una sencilla muestra de C++ aquí http://nibuthomas.wordpress.com/2009/08/04/how-to-use-sendinput/
Y una muestra de VB más completa aquí http://vb.mvps.org/samples/SendInput/
INPUT input;
WORD vkey = VK_F12; // see link below
input.type = INPUT_KEYBOARD;
input.ki.wScan = MapVirtualKey(vkey, MAPVK_VK_TO_VSC);
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
input.ki.wVk = vkey;
input.ki.dwFlags = 0; // there is no KEYEVENTF_KEYDOWN
SendInput(1, &input, sizeof(INPUT));
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
me hizo una modificación después de leer el código de Nathan @ , this reference y combinado con la sugerencia de @ jave.web. Este código se puede usar para ingresar caracteres (mayúsculas y minúsculas).
#define WINVER 0x0500
#include<windows.h>
void pressKeyB(char mK)
{
HKL kbl = GetKeyboardLayout(0);
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwFlags = KEYEVENTF_UNICODE;
if ((int)mK<65 && (int)mK>90) //for lowercase
{
ip.ki.wScan = 0;
ip.ki.wVk = VkKeyScanEx(mK, kbl);
}
else //for uppercase
{
ip.ki.wScan = mK;
ip.ki.wVk = 0;
}
ip.ki.dwExtraInfo = 0;
SendInput(1, &ip, sizeof(INPUT));
}
A continuación se muestra la función de pulsar la tecla de retorno:
void pressEnter()
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwFlags = KEYEVENTF_UNICODE;
ip.ki.wScan = VK_RETURN; //VK_RETURN is the code of Return key
ip.ki.wVk = 0;
ip.ki.dwExtraInfo = 0;
SendInput(1, &ip, sizeof(INPUT));
}
Use 'VkKeyScanEx (char, KeyboardLayout)' 'para poner su chars' "común" en este ejemplo :) ... 'input.ki.wVk = VkKeyScanEx ('a', kbl);' en cuanto a KeyboardLayout, la forma más sencilla es cargar el teclado de la ventana actual Layout: 'HKL kbl = GetKeyboardLayout (0);' –
Gracias y @ jave.web por la respuesta. Inventé mi código para ingresar el carácter en la respuesta a continuación (lo siento, no puedo encontrar cómo insertar código en la sección de comentarios). –