elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 21:51  


Tema destacado: [Overclocking] Récords de overclock del foro

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Ctrl + V en C/C++ (SOLUCIONADO)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ctrl + V en C/C++ (SOLUCIONADO)  (Leído 3,349 veces)
EvilGoblin


Desconectado Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Ctrl + V en C/C++ (SOLUCIONADO)
« en: 1 Junio 2007, 14:01 »

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:
Código:
PostMessage(ventana,WM_PASTE,0,0);
2ºdo Intento:
Código:
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:
Código:
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 Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++
« Respuesta #1 en: 1 Junio 2007, 21:55 »

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]
<?BRoWLi?>

Desconectado Desconectado

Mensajes: 108


Kien mira por ti?


Ver Perfil WWW
Re: Ctrl + V en C/C++
« Respuesta #2 en: 1 Junio 2007, 22:08 »

http://www.symbian.com/Developer/techlib/v70sdocs/doc_source/reference/cpp/Clipboard/CClipboardClass.html#%3a%3aCClipboard

Para copiar un archivo en el portapapeles, extrae el codigo fuente en una variable binaria (bytes) y copias su en el portapapeles, luego solo lo eliges donde "pegarla".
En línea

Si TRaTaS D SeR JusTo SoLo Es JuSTo EL CoRaZóN, LoS DeMaS OrGaNoS TRaTaRaN De KiTaRLe La RaZoN - DobleV
Piratas.com.es
>FedeX<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: Ctrl + V en C/C++
« Respuesta #3 en: 1 Junio 2007, 23:31 »

Usa los mensajes WM_SETFOCUS y WM_KILLFOCUS
Asi:
Código:
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 :D
Salu2
En línea
EvilGoblin


Desconectado Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++
« Respuesta #4 en: 2 Junio 2007, 13:31 »

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<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: Ctrl + V en C/C++
« Respuesta #5 en: 2 Junio 2007, 21:44 »

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
Código:
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;
}
Código:
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 Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++
« Respuesta #6 en: 2 Junio 2007, 23:15 »

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 Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++
« Respuesta #7 en: 5 Junio 2007, 14:41 »

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<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: Ctrl + V en C/C++
« Respuesta #8 en: 6 Junio 2007, 01:08 »

Reemplaza el:
Código:
PostMessage(hwnd,WM_KEYDOWN,VK_CONTROL,0);
...
PostMessage(hwnd,WM_KEYUP,VK_CONTROL,0);

por

Código:
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 Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++
« Respuesta #9 en: 6 Junio 2007, 16:51 »

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


Código:
<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<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: Ctrl + V en C/C++
« Respuesta #10 en: 6 Junio 2007, 17:35 »

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


Código:
<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
No 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 Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++
« Respuesta #11 en: 6 Junio 2007, 18:07 »

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 Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: Ctrl + V en C/C++ (SOLUCIONADO)
« Respuesta #12 en: 6 Junio 2007, 20:36 »

Listo!!

=P

ahora si

solo me falta purgar esto

pero quedaria asi


Código:

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]
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines