Tema destacado: [Overclocking] Récords de overclock del foro
Autor
|
Tema: Ctrl + V en C/C++ (SOLUCIONADO) (Leído 3,349 veces)
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Buenas eh buscado la forma de hacer CTRL + V a una ventana desde el HADLE tengo la ventana seleccionada eh e intentado distintos metodos y buscado en internet pero no logro hacer q funcione como deberia 1ºre intento: PostMessage(ventana,WM_PASTE,0,0); 2ºdo Intento: PostMessage(ventana,WM_KEYDOWN,17,0); PostMessage(ventana,WM_KEYDOWN,86,0); PostMessage(ventana,WM_KEYUP,86,0); PostMessage(ventana,WM_KEYUP,17,0); (Puede que 17 no sea control y 83 no sea "V" pero pork ahora no me acuerdo los numeros, pero probe con los reales) 3ºer intento: ShowWindow(ventana, 1); SetFocus(ventana); SetForegroundWindow(ventana); keybd_event(17,0,0,1); keybd_event(86,0,0,1); keybd_event(86,0,0,1); keybd_event(17,0,0,1); La unica que me funciona medianamente es el 3ºre intento, pero queda la tecla CTRL trabada y no me sirve pork tengo q llamar a la ventana y darle Foco ¿Alguna Idea? Muchas Gracias
|
|
|
|
« Última modificación: 6 Junio 2007, 20:50 por evilgoblin »
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Tambien si por casualidad el que me conteste =$ me gustaria saber si se puede enviar un documento al portapapeles
osea digamos "C:\mi_archivo.crs" al portapapeles para luego usar CTRL+V y pegarlo
Muchas gracias! ^^
|
|
|
|
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
|
|
|
>FedeX<
|
Usa los mensajes WM_SETFOCUS y WM_KILLFOCUS Asi: PostMessage(hwnd,WM_SETFOCUS,1,0); PostMessage(hwnd,WM_PASTE,0,0); PostMessage(hwnd,WM_KILLFOCUS,0,0); O no me acuerdo como te habia dado en el otro post... No se si sirve... pero ... dimelo  Salu2
|
|
|
|
|
En línea
|
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Nop, no rula porlomenos en MSN, voy a probar en una ventana de NOTEPAD. porque no sirve en MSN, pero la unica forma es la que te explique, pero me queda el CTRL trabado ^^
y tengo que llamar a la ventana con SetFocus(ventana);
T_T que maL!!
|
|
|
|
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
|
>FedeX<
|
Nop, no rula porlomenos en MSN, voy a probar en una ventana de NOTEPAD. porque no sirve en MSN, pero la unica forma es la que te explique, pero me queda el CTRL trabado ^^
y tengo que llamar a la ventana con SetFocus(ventana);
T_T que maL!!
Si usas setfocus... Se pondrá el foco... Pero si pones WM_SETFOCUS "Engañas" a la ventana de que lo hicimos... cuando no fue asi HWND msn; BOOL CALLBACK Enuming2(HWND hwnd,LPARAM lParam){ char txt[128]; GetClassNameA(hwnd,txt,128); if(strcmp(txt,"DirectUIHWND") == 0){ msn = hwnd; return 0; } return 1; } BOOL CALLBACK Enuming(HWND hwnd,LPARAM lParam){ char txt[128]; GetClassNameA(hwnd,txt,128); if(strcmp(txt,"IMWindowClass") == 0){ GetWindowTextA(hwnd,txt,128); if(strcmp(txt,"yo@elhacker.net - Conversación") == 0){ EnumChildWindows(hwnd,Enuming2,0); return 0; } } return 1; } msn = 0; EnumWindows(Enuming,0); if(!msn) return 0; PostMessage(msn,WM_SETFOCUS,1,0); PostMessage(msn,WM_KEYDOWN,VK_CONTROL,0); PostMessage(msn,WM_KEYDOWN,86,0); // V PostMessage(msn,WM_KEYUP,86,0); PostMessage(msn,WM_KEYUP,VK_CONTROL,0); PostMessage(msn,WM_KILLFOCUS,0,0);
|
|
|
|
|
En línea
|
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Intentare ese metodo hoy a la noche..
=P y vere si puedo usarlo asi.. o debo usar WM_PASTE o q hacer =P
pero we..
la verdad te agradezco tu ayuda..
|
|
|
|
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
ya me di cuenta pork no funciona WM_PASTE
porque debo dirigirlo al HADLE de algun EDIT
pero como una ventana de MSN no tengo EDIT
sino trabajo sobre el foco no puedo pegarlo
ni poniendo el HADLE de la ventana, ni de DirectUIHWND
y tampoco pasandole NULL.
asi que lo que me queda es poder usar block CONTROL y luego mandar la tecla V. pero cada vez que uso WM_KEYDOWN manda la tecla al igual que WM_KEYUP, y no queda presionada la tecla,
alguna idea? ='( "^V"
|
|
|
|
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
|
>FedeX<
|
Reemplaza el: PostMessage(hwnd,WM_KEYDOWN,VK_CONTROL,0); ... PostMessage(hwnd,WM_KEYUP,VK_CONTROL,0); por PostMessage(hwnd,WM_CHAR,22,0x2F0001); Creo que eso debería funcionar... Ese es un mensaje que se envía cuando presiono Ctrl+V... Y no se envia el WM_PASTE 
|
|
|
|
|
En línea
|
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Acabo de experimentar con WM_CHAR y no funciona como dice =( envia la tecla pero si yo le agrego el DELAY no lo cumple ni tampoco deja presionada la tecla ni respeta el MOD_CONTROL ^^ asi que no funciona =( y ahora pruebo con HOTKEYS <php #define PEGAR -126
BOOL resulta = RegisterHotKey(NULL,PEGAR,MOD_CONTROL,86); if (resulta == 0) { cout << "No se registro HOTKEY"<< endl; }
PostMessage(NULL,WM_HOTKEY,PEGAR,86); ?>
alguien sabe como registrar la HOTKEY? http://winapi.conclase.net/curso/index.php?men=WM_HOTKEY
|
|
|
|
« Última modificación: 6 Junio 2007, 16:59 por evilgoblin »
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
|
>FedeX<
|
Acabo de experimentar con WM_CHAR y no funciona como dice =( envia la tecla pero si yo le agrego el DELAY no lo cumple ni tampoco deja presionada la tecla ni respeta el MOD_CONTROL ^^ asi que no funciona =( y ahora pruebo con HOTKEYS <php #define PEGAR -126
BOOL resulta = RegisterHotKey(NULL,PEGAR,MOD_CONTROL,86); if (resulta == 0) { cout << "No se registro HOTKEY"<< endl; }
PostMessage(NULL,WM_HOTKEY,PEGAR,86); ?>
alguien sabe como registrar la HOTKEY? http://winapi.conclase.net/curso/index.php?men=WM_HOTKEYNo te servirá eso Te dejo los mensajes que se envian cuando se presiona Ctrl + V Mensaje, wParam, lParam WM_KEYDOWN, VK_CONTROL, 0x1D0001 WM_KEYDOWN, 'V', 0x2F0001 WM_CHAR, 22, 0x2F0001 WM_KEYUP, 'V', 0xC02F0001 WM_KEYUP, VK_CONTROL, 0xC01D0001 Intenta esa secuencia de mensajes... Ahora me doy cuenta... Ese script solo funciona cuando tienes la tecla control DOWN... Intenta usar el keybd_event(o como se llame) y hazle un down y luego haz un SendMessage(msn,WM_KEYDOWN,'V',0); SendMessage(msn,WM_KEYUP,'V',0); y luego el keybd_event levantando la tecla Ctrl...
|
|
|
|
« Última modificación: 6 Junio 2007, 17:54 por >FedeX< »
|
En línea
|
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Parece que vamos mejor =P pork ahora envia solo una tecla "V" antes enviaba 2 veces por cada DOWN y UP
=P ..
ahora voy a probar VK_LCONTROL pork sigue sin pegar ='(
|
|
|
|
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
EvilGoblin
Desconectado
Mensajes: 2.320
YO NO LA VOTE!
|
Listo!! =P ahora si solo me falta purgar esto pero quedaria asi PostMessage(ventana2,WM_SETFOCUS,1,0); PostMessage(ventana2,WM_KEYDOWN,VK_LCONTROL,0x1D0001); keybd_event(17,0,0,0); PostMessage(ventana2,WM_KEYDOWN,'V',0x2F0001); PostMessage(ventana2,WM_CHAR,17,0x2F0001); PostMessage(ventana2,WM_KEYUP,'V',0xC02F0001); PostMessage(ventana2,WM_KEYUP,VK_CONTROL,0xC01D0001); keybd_event(17,0,KEYEVENTF_KEYUP,0); PostMessage(ventana2,WM_KEYDOWN,13,0); // Enter PostMessage(ventana2,WM_KEYUP,13,0); // Soltamos enter
Gracias >FedeX<
|
|
|
|
« Última modificación: 6 Junio 2007, 20:47 por evilgoblin »
|
En línea
|
Experimental Serial Lain [Linux User]
|
|
|
|
|