Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: HJZR4 en 14 Enero 2008, 11:07 am



Título: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 14 Enero 2008, 11:07 am
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


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Mad Antrax en 14 Enero 2008, 11:57 am
No se si se me ha entendido.

No quiero ser grotesco, pero yo al menos no te entendí.. ponme un ejemplo anda!


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 14 Enero 2008, 12:11 pm
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


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Mad Antrax en 14 Enero 2008, 13:02 pm
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!


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 14 Enero 2008, 13:10 pm
estuve buscando y siempre me sale desactivar Alt + TAB. Juas.

Voy aver. Gracias :p


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: yovaninu en 14 Enero 2008, 15:35 pm
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



Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Mad Antrax en 14 Enero 2008, 16:08 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.


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 14 Enero 2008, 17:16 pm
Lo he hecho con GetAsyncKeyState. Y funciona. Pero al abrir el juego, deja de funcionar... xD

Con lo demás si funicona. Idea?


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Mad Antrax en 14 Enero 2008, 18:17 pm
Que juego es? Porque si es del tipo MuOnline (que lleva antihack) no podrás usar esa api, tendrás que usar Hooks


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 14 Enero 2008, 21:00 pm
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 ^^


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Mad Antrax en 14 Enero 2008, 21:16 pm
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)


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 14 Enero 2008, 22:30 pm
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|| ! ;)


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Mad Antrax en 14 Enero 2008, 22:35 pm
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!!


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: 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..!


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: HJZR4 en 15 Enero 2008, 10:56 am
Pues manos a la obra :p


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: Vampersy en 15 Enero 2008, 22:04 pm
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


Título: Re: [DUDA] Aplicación siempre activa
Publicado por: vivachapas en 15 Enero 2008, 22:17 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