En primer lugar: El buscador no funciona bien.
Mi duda es: ¿Cómo podría hacer una aplicación que aunque estuviese un programa activo en ese momento, cuando haga un shortcut, lo reciba la aplicación de VB creada?
No se si se me ha entendido.
Gracias
Cita de: HJZR4 en 14 Enero 2008, 11:07 AM
No se si se me ha entendido.
No quiero ser grotesco, pero yo al menos no te entendí.. ponme un ejemplo anda!
Normal, las pruebas de lengua las tenia bajas... xDD
Mira, estoy haciendo un programa de shortcuts para un juego, que al teclear por ejemplo Ctrl + a, realize el truco. Pero el problema es que al abrir el juego, tecleo el Shortcut y no se ejecuta, porque la aplicacion no esta "activa".
Mejor? ;S
Si, ahora te entendí!
Tienes que hookear el teclado, no es muy complicado pero sería la forma correcta. Si ves que es muy lioso usa entonces la API GetAsyncKeyState (pero con la API no sería la forma más correcta).
Busca e informate sobre Hook's a nivel de teclado (no de kernel, que eso es más avanzado xD)
Saludos!
estuve buscando y siempre me sale desactivar Alt + TAB. Juas.
Voy aver. Gracias :p
a ver mira este code que hize hace un tiempo, presionas una combinacion de teclas (cual sea el programa activo) y hace algo
http://foro.elhacker.net/index.php/topic,164203.msg774955.html#msg774955
Cita de: yovaninu en 14 Enero 2008, 15:35 PM
a ver mira este code que hize hace un tiempo
Este es un ejemplo válido con GetAsyncKeyState, te puede servir pero lo más correcto serían Hook's para evitar el uso de Timers. Cuando llegue a casa te muestro un ejemplo.
Lo he hecho con GetAsyncKeyState. Y funciona. Pero al abrir el juego, deja de funcionar... xD
Con lo demás si funicona. Idea?
Que juego es? Porque si es del tipo MuOnline (que lleva antihack) no podrás usar esa api, tendrás que usar Hooks
Que va, es GTA San Andreas... De vez en cuando, te dan ganas de descargar tu furia en el juego, y estar poniendo continuamente las armas y tal, viene bien unos hotkeys ^^
Ummm, y como mandas las teclas? SendKeys? A lo mejor necesitas sustituir esa función por otra que te permita escoger el PID del proceso al que quieres enviar las teclas, por ejemplo SendMessageA (que alguien me corrija si me equivoco, no estoy del todo seguro)
Si, con SendKeys. Creia que iba a ser mas simple... En fin, voy a darle una vuelta a todo esto. Escribiré cuando tenga respuesta.
Gracias ||MadAntrax|| ! ;)
Bueno, este hilo parece más un chat que un foro, solo hablamos tú y yo, en fin...
CREO que necesitarías ejecutar tu mismo el EXE del GTA con alguna función que te devuelva su PID (CreateProcess creo que lo permite o ShellExecuteA, no lo sé). Una vez con su PID tendrías que buscar la API que te permita mandar pulsaciones de teclado o algo parecido (SendMessageA CREO que lo permite, no se).
Montate una aplicación de prueba con el notepad, que al pulsar CTRL+A te suelte "HOLA QUE TAL" dentro del Bloc de Notas, por ejemplo.
Y cuando tengas esto hecho, reemplaza la función de GetAsyncKeyState por otra de Hook's a nivel de teclado y tendrás lo que se llama: Un programa bien hecho. (y ya si compartes el source te cagas xD)
Saludos!! (a ver si alguien más puede corroborar que las API's que estoy poniendo son las correctas, no me gustaría que buscaras algo que no te sirva)
Saludos!!
Para mi lo mejor seria que esperaras la tecla a pulsar con GetAsyncKeyState luego con keyb_event envias la tecla que corresponda. Debes trabajar con Swith y Case. Suerte..!
Pues manos a la obra :p
Hola gente¡
Este es mi problema:
EStoy desarrollando un sistema de administracion de centros de computo(C.C), el cual sera implementado en una instutucion que maneja cerca de 2100 usuarios diarios.
El sistema es un cliente-servidor, y necesito estarlo actualizando cada 6 meses.
El problema es que el C.C en odas sus Pc's tiene instalado el DeeFreeze 4.20, y como ustedes saben, no puedo enviar las actualizaciones a los clientes, mientras el DeepF este activado. Como solucion estoy implementando el DeepUnFreeze, y activo y desactivo como sigue:
<<<ACTIVANDO EL DEEPFREEZE>>>
If cont = 1 Then
'Paso 1
ReturnValue = Shell("H:\DeepUnfreezer1.6", vbMaximizedFocus) 'AppActivate ReturnValue '
cont = cont + 1
tmrDesactivaDeepFreeze.Interval = 3000
ElseIf cont = 2 Then
'Paso 2
For X = 1 To 2
SendKeys "{DOWN}", True '
Next X
cont = cont + 1
tmrDesactivaDeepFreeze.Interval = 3000
ElseIf cont = 3 Then
'Paso 3
For I = 1 To 2 '
SendKeys "{TAB}", True '
Next I
cont = cont + 1
tmrDesactivaDeepFreeze.Interval = 3000
ElseIf cont = 4 Then
'Paso 4
SendKeys "{ENTER}", True
cont = cont + 1
tmrDesactivaDeepFreeze.Interval = 3000
ElseIf cont = 5 Then
'Paso 5
SendKeys "%{F4}", True
tmrDesactivaDeepFreeze.Enabled = False
Call Reiniciar
End If
<<<DESACTIVADO EL DEEPFREEZE>>>
Paso 1
If cont = 1 Then
ReturnValue = Shell("H:\DeepUnfreezer1.6", vbMaximizedFocus) ' Ejecuta la Calculadora.
AppActivate ReturnValue ' Activa Desfrizador
cont = cont + 1
tmrActivaDeepFreeze.Interval = 3000
'Paso 2
ElseIf cont = 2 Then
SendKeys "{TAB 2}", True 'Nos posicionamos para reactivar el deep freeze.
cont = cont + 1
tmrActivaDeepFreeze.Interval = 3000
'Paso 3
ElseIf cont = 3 Then
SendKeys "{ENTER}", True ' Activamos el DeepFreeze
cont = cont + 1
tmrActivaDeepFreeze.Interval = 3000
'Paso 6
ElseIf cont = 4 Then
SendKeys "%{F4}", True 'Cerramos el DeepF
tmrActivaDeepFreeze.Enabled = False
'Call Reiniciar(True) 'Reiniciamos el equipo
End If
---------------------------------------------------------------------------
Y funciona muy bien, pero eso es hasta la version (5.50) que desactiva el DeepUnfreeze).
Como solucion definitiva pense en lo siguiente:
Conociendo la contraseña de DeepF:
Dim ReturnValue, I
ReturnValue = Shell("FrzState.exe", 1) ' Ejecuta DeepFreeze
AppActivate ReturnValue ' Activa el DeepF.
'Copiamos al clep la contraseña del DeepFreeze
SendKeys "^{V}", True ' y pegamos la contraseña
SendKeys "{ENTER}", True ' hacemos enter
SendKeys "{TAB} 4", True ' posicionarnos el el stado que keremos activar
SendKeys "{TAB} 3", True ' Nos posicionamos en el boton OK
SendKeys "{ENTER}", True ' y finalemente hacemos enter y
Call reiniciamos
pero con el shell no encuentra el exe del Deep, ni aunque le ponga el path completo. Esto me serviria para solucionar mi problema de actualizaciones del sistema, y sin violar las reglas del C.C, ni utilizando programitas antiDeepF.
Gracias por sus aportaciones y estamos en contacto... ;D
Cita de: ►Freeze en 14 Enero 2008, 22:40 PM
Para mi lo mejor seria que esperaras la tecla a pulsar con GetAsyncKeyState luego con keyb_event envias la tecla que corresponda. Debes trabajar con Swith y Case. Suerte..!
asi como dice freeze quisas te sirva... muchos juegos no usan el evente down de la tecla sino up.. y sendkeys envia el down... me di cuenta cuando queria hacer lo mismo para un jeugo.. y viendo el code del juego vi q decia... keyup then.. bla bla... tenes q usar el keyb_event
espero q me hayas entendido
SALUDOS