Buenas, estoy intentando hacer un programa para enviar una combinación de teclas (Ctrl+Alt+F12) a un programa en segundo plano, para ello estoy usando la función PostMessage de la API de windows, el caso es que si envío solo F12 o Ctrl funciona (el ALT no) pero si intento usar una combinación de ambas no, el código que estoy usando es este:
Por otro lado he intentado con keybd_event y envía bien las teclas, pero si tengo la ventana en primer plano (y no es lo que quiero)
Se que en el foro habéis hablado ya de estas funciones, pero no logro encontrar el problema de mi código, y simplemente agradeceros vuestra ayuda.
EDITO: Lo he conseguido solucionar, la manera correcta es la siguiente:
El problema eran los Lparams.
NOTA: La pulsación de la tecla ALT se realiza por medio del Lparam de WM_SYSKEYDOWN.
Código [Seleccionar]
HWND windowHandle = FindWindowA("Qt5QWindowIcon", NULL); //Can't find a proccess
//Send a key
if( windowHandle ) //This one fails
{
PostMessage(windowHandle, WM_SYSKEYDOWN, VK_CONTROL, 0);
PostMessage(windowHandle, WM_SYSKEYDOWN, VK_MENU, 0);
PostMessage(windowHandle, WM_KEYDOWN, VK_F12, 0);
Sleep(1000);
PostMessage(windowHandle, WM_KEYUP, VK_F12, 0);
PostMessage(windowHandle, WM_SYSKEYUP, VK_MENU, 0);
PostMessage(windowHandle, WM_SYSKEYUP, VK_CONTROL, 0);
}else{
cout << "No se ha encontrado la ventana!!" << endl;
}
Por otro lado he intentado con keybd_event y envía bien las teclas, pero si tengo la ventana en primer plano (y no es lo que quiero)
Código [Seleccionar]
keybd_event(VK_CONTROL, 0x9d, 0, 0);
keybd_event(VK_MENU, 0xb8, 0, 0);
keybd_event(VK_F12, 0xd8, 0, 0);
Sleep(1000);
keybd_event(VK_F12, 0xd8, KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, 0xb8, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x9d, KEYEVENTF_KEYUP, 0);
Se que en el foro habéis hablado ya de estas funciones, pero no logro encontrar el problema de mi código, y simplemente agradeceros vuestra ayuda.
EDITO: Lo he conseguido solucionar, la manera correcta es la siguiente:
Código [Seleccionar]
if( windowHandle ) //This one fails
{
PostMessage(windowHandle, WM_SYSKEYDOWN, VK_CONTROL, 0x209d0000);
PostMessage(windowHandle, WM_KEYDOWN, VK_F12, 0x00d80000);
Sleep(1000);
PostMessage(windowHandle, WM_KEYUP, VK_F12, 0xc0d80000);
PostMessage(windowHandle, WM_SYSKEYUP, VK_CONTROL, 0xe09d0000);
}else{
cout << "No se ha encontrado la ventana!!" << endl;
}
El problema eran los Lparams.
NOTA: La pulsación de la tecla ALT se realiza por medio del Lparam de WM_SYSKEYDOWN.