Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: jorgelin95 en 16 Septiembre 2010, 02:45 AM

Título: [Ayuda] Timer y..
Publicado por: jorgelin95 en 16 Septiembre 2010, 02:45 AM
Hola a tod@s. En este tema (http://foro.elhacker.net/programacion_visual_basic/ayuda_duda-t305015.0.html) pedí ayuda y BlackZerox genio total me dio el API de como hacerlo lo pude hacer pero lo que hice es que cuando toque la tecla repita el toque de la tecla sin parar, es decir, toca tecla "EJEMPLO" y esta tecla no para nunca lo que yo quiero es que se toque muchas veces cuando toque la tecla y cuando no la toque no, el código es el siguiente:

 
Const KEYEVENTF_KEYUP = &H2
Const KEYEVENTF_EXTENDEDKEY = &H1
 
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)

Sub Pulsar_Tecla(Tecla As Long)
 
    Call keybd_event(Tecla, 0, 0, 0)
 
    Call keybd_event(Tecla, 0, KEYEVENTF_KEYUP, 0)
 
End Sub

Private Sub Timer1_Timer()

Call Pulsar_Tecla(vbKeyTECLA)

End Sub


¿Cómo sería? ¿Me corrijen porfavor? Gracias y saludos.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 03:36 AM
vbKeyTECLA ¿que valor tiene?. esa accion tiene que realizarse solo sobre tu aplicacion o de forma global en cualquier aplicacion?
Título: Re: [Ayuda] Timer y..
Publicado por: jorgelin95 en 16 Septiembre 2010, 04:01 AM
Cita de: ctlon en 16 Septiembre 2010, 03:36 AM
vbKeyTECLA ¿que valor tiene?. esa accion tiene que realizarse solo sobre tu aplicacion o de forma global en cualquier aplicacion?

Función global en cualquier aplicación, el valor de vbKey vendría a ser "V", saludos.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 04:26 AM
http://msdn.microsoft.com/en-us/library/ms646293%28v=VS.85%29.aspx
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 16 Septiembre 2010, 07:45 AM
Cita de: ctlon en 16 Septiembre 2010, 03:36 AM
vbKeyTECLA ¿que valor tiene?. esa accion tiene que realizarse solo sobre tu aplicacion o de forma global en cualquier aplicacion?

Creo que solo desea las constantes... no es para tanto ¬¬"


Aqui tienes algo que te va a servir de mucho!¡.

http://infrangelux.sytes.net/FileX/index.php?dir=/BlackZeroX/Programacion/WINAPI%2032

El archivo que te recomiendo LEer es el que se llama WIN32API.txt (http://infrangelux.sytes.net/FileX/index.php?file=/BlackZeroX/Programacion/WINAPI%2032/WIN32API.TXT&dir=/BlackZeroX/Programacion/WINAPI%2032&) el ejecutable puede leer facilmente dicho archivo!¡.

[OJO SOLO RESALTO MAS NO GRITO]
ESTOS ARCHIVOS ESTAN EN ARCHIVOS DE PROGRAMA  EN LA CARPTA DE VISUAL BASIC COMO PROGRAMA "VISOR DE TEXTO API"
[/OJO SOLO RESALTO MAS NO GRITO]




Código (VB) [Seleccionar]


' Teclas virtuales, juego estándar
Const VK_LBUTTON = &H1
Const VK_RBUTTON = &H2
Const VK_CANCEL = &H3
Const VK_MBUTTON = &H4             '  NO es contiguo a L RBUTTON

Const VK_BACK = &H8
Const VK_TAB = &H9

Const VK_CLEAR = &HC
Const VK_RETURN = &HD

Const VK_SHIFT = &H10
Const VK_CONTROL = &H11
Const VK_MENU = &H12
Const VK_PAUSE = &H13
Const VK_CAPITAL = &H14

Const VK_ESCAPE = &H1B

Const VK_SPACE = &H20
Const VK_PRIOR = &H21
Const VK_NEXT = &H22
Const VK_END = &H23
Const VK_HOME = &H24
Const VK_LEFT = &H25
Const VK_UP = &H26
Const VK_RIGHT = &H27
Const VK_DOWN = &H28
Const VK_SELECT = &H29
Const VK_PRINT = &H2A
Const VK_EXECUTE = &H2B
Const VK_SNAPSHOT = &H2C
Const VK_INSERT = &H2D
Const VK_DELETE = &H2E
Const VK_HELP = &H2F

' VK_A hasta VK_Z son iguales que sus equivalentes ASCII: 'A' hasta 'Z'
' VK_0 hasta VK_9 son iguales que sus equivalentes en ASCII: '0' hasta '9'

Const VK_NUMPAD0 = &H60
Const VK_NUMPAD1 = &H61
Const VK_NUMPAD2 = &H62
Const VK_NUMPAD3 = &H63
Const VK_NUMPAD4 = &H64
Const VK_NUMPAD5 = &H65
Const VK_NUMPAD6 = &H66
Const VK_NUMPAD7 = &H67
Const VK_NUMPAD8 = &H68
Const VK_NUMPAD9 = &H69
Const VK_MULTIPLY = &H6A
Const VK_ADD = &H6B
Const VK_SEPARATOR = &H6C
Const VK_SUBTRACT = &H6D
Const VK_DECIMAL = &H6E
Const VK_DIVIDE = &H6F
Const VK_F1 = &H70
Const VK_F2 = &H71
Const VK_F3 = &H72
Const VK_F4 = &H73
Const VK_F5 = &H74
Const VK_F6 = &H75
Const VK_F7 = &H76
Const VK_F8 = &H77
Const VK_F9 = &H78
Const VK_F10 = &H79
Const VK_F11 = &H7A
Const VK_F12 = &H7B
Const VK_F13 = &H7C
Const VK_F14 = &H7D
Const VK_F15 = &H7E
Const VK_F16 = &H7F
Const VK_F17 = &H80
Const VK_F18 = &H81
Const VK_F19 = &H82
Const VK_F20 = &H83
Const VK_F21 = &H84
Const VK_F22 = &H85
Const VK_F23 = &H86
Const VK_F24 = &H87

Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91

'
'   VK_L VK_R - teclas virtuales ALT, CTRL y MAYÚS izquierda y derecha.
'   Se usan sólo como parámetros para GetAsyncKeyState() y GetKeyState().
'   Ninguna otra API ni mensaje distingue las teclas derecha e izquierda de esta forma.
'  /
Const VK_LSHIFT = &HA0
Const VK_RSHIFT = &HA1
Const VK_LCONTROL = &HA2
Const VK_RCONTROL = &HA3
Const VK_LMENU = &HA4
Const VK_RMENU = &HA5

Const VK_ATTN = &HF6
Const VK_CRSEL = &HF7
Const VK_EXSEL = &HF8
Const VK_EREOF = &HF9
Const VK_PLAY = &HFA
Const VK_ZOOM = &HFB
Const VK_NONAME = &HFC
Const VK_PA1 = &HFD
Const VK_OEM_CLEAR = &HFE




Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 08:10 AM
Si quiere saber de forma global cuando se a pulsado la tecla en cuestion necesitara mas que las constantes, esta es una forma de las mas sencillas y en el mismo enlace tiene las VK definidas.
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 16 Septiembre 2010, 08:50 AM
@jorgelin95

Nesesitas un Hook al TEclado revisa los temas anteriores por hay Dessa puso 3 ligas hacia Hook's sencillos

Entre ellos el de Teclado que es el que nesesitas!¡.

http://foro.elhacker.net/programacion_visual_basic/ayuda_hook_y_apihooking-t304938.0.html

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 12:47 PM
para una sola tecla le sobra con GetAsyncKeyState.
Título: Re: [Ayuda] Timer y..
Publicado por: jorgelin95 en 16 Septiembre 2010, 16:26 PM
Gracias BlackZero ya me puse a leer la página que me has pasado, y me he orientado con el CODE, pero igual creo que no me entendieron muy bien. Yo el otro día descargue un programa lo cual su función era apretar 'space' es decir lo pobre en un juego para saltar (CS) y funciono, entonces yo mantenía apretado 'space' y saltabas varias veces, sin este programa solo salta 1 vez. La cuestión es que yo quería hacer esto pero con otra tecla en mi caso "V", igual gracias.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 19:27 PM
http://msdn.microsoft.com/en-us/library/ms646293%28v=VS.85%29.aspx
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 16 Septiembre 2010, 19:52 PM

@IsCharAlpha
@IsCharAlphaNumeric

Para detectar ê,ñ, ....

@SetWindowsHookEx
@UnhookWindowsHookEx
@CallNextHookEx

@WH_KEYBOARD

Para que no se use un Timer y asi no se escapa nada, ni usa demasiado el procesador

@GetAsyncKeyState
estaria bien lo malo que se tiene que usar un timer a un intervalo muy bajo (como a 100 ms como minimo)

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 20:58 PM
Si es por tema de consumo, la propia documentaicon desaconseja el uso de hooks ya que relentizan quieras o no y por una tecla y para lo que es, no creo que necesite alta precision. de normal nunca sabras si hay 15 o 3  hooks en cola, y son llamados uno despues del otro relentizando quieras o no el sistema.

CitarHooks tend to slow down the system because they increase the amount of processing the system must perform for each message. You should install a hook only when necessary, and remove it as soon as possible.

Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 16 Septiembre 2010, 21:47 PM
@ctlon

Te lo tomas muy personal xP, solo son Octativas, y en lo que yo prefiero mejor que se vea relentisado X casos a tener un Timer que s ele escape algo... si prefiero relentizar y presisionar lo que deseo!¡.

Agregando:

Me referia al % en uso constante del procesador mas no al relentisamiento del Sistema Operativa, ya que si es un timer SIEMPRE va estar checando y un Hook solo saltara en el momento justo, y vamos para un hook al teclado solo saltara cada vez que se oprima una tecla es decir a la velocidad que OPRIME UNA PERSONA  y a la velocidad de 100 ms de un timer, sin contar los intervalos de tiempo entre cada unos... Mejor el Hook.

Asi que por mi punto de vista el Hook es la mejor opcion en estos casos donde tiene que intervenir una persona, o cuestiones de intercepccion en el momento JUSTO y DESEADO, el timer seria como que para otra cosa!¡.

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 22:34 PM
CitarTe lo tomas muy personal

para nada, ¿donde ves lo personal?

CitarMe referia al % en uso constante del procesador mas no al relentisamiento del Sistema Operativa, ya que si es un timer SIEMPRE va estar checando y un Hook solo saltara en el momento justo, y vamos para un hook al teclado solo saltara cada vez que se oprima una tecla es decir a la velocidad que OPRIME UNA PERSONA  y a la velocidad de 100 ms de un timer, sin contar los intervalos de tiempo entre cada unos... Mejor el Hook.

el % constante del procesador se da igual internamente, que tu aplicacion no reccione o no sea la tecla que espera tu aplicacion el sistema notifica del mismo modo a cada hook. hook chain en google y veras que internamente hay consumo y mas cosas.

y mas en el caso concreto que lo quiere para un juego donde estara presionando activamente las teclas, activando continuamente el evento de teclado. en mi opinion repito, para una sola tecla con la funcion anterior sobra. si buscase seriamente rendimiento, descartaria vb y con una simple dll subclasificando la ventana principal del juego obtendria mas rendimiento que de cualquiera de estas 2 formas, pero eso ya tiene que ver el si le interesa o no.
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 16 Septiembre 2010, 23:04 PM
.
xD, bueno al caso yo me quedo con el Hook ya que solo activaria el Proceso X en el mensaje deseado (Incluso si se virtualiza el teclado pero este noe s el caso), y pues el timer estaria constantemente verificando X tiempo con GetAsyncKeyState ...

Modifico:
@jorgelin95

* Ya tienes alternativas, deside cual es la que deseeas y se ajusta a lo que quieres.
* Como ves cada quien tiene sus por que y para que, solo es cuestion del par aque lo quieres-

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 16 Septiembre 2010, 23:40 PM
CitarxD, bueno al caso yo me quedo con el Hook ya que solo activaria el Proceso X en el mensaje deseado

en el mensaje no, notificaria a cada hook por cada tecla pulsada sea cual sea su intervalo y en un juego es frecuente el uso del teclado.

esta claro, cada cual lo ve a su modo pero no hay que llevarse a engaño pensando que el hook solo consume cuando nosotros guardamos la pulsacion.
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 17 Septiembre 2010, 00:22 AM
.
lo que quiero decir es que por ejemplo
Yo lo veo de esta forma... al Hook (Sencillo No hago ningun Hook solo es un ejemplo de mas o menos como vea a un Timer con respecto a un Hook)

Código (vb) [Seleccionar]


Declare Function WaitMessage Lib "user32" () As Long
Sub main()  ' No se nos escapara nada... almenos que el proceso involucrado _
corra en el mismo hilo y sea demasiado tardado... La solucion un nuevo _
Hilo o algun "semaforo" para evitar la duplicidad de un proceso que se repita _
demasiadas veces de las nesesarias O crearlo con un nuevo Hilo (No se recomienda esto en VB6... Inestable).
   Do
       DoEvents
       WaitMessage
   Loop
End Sub



a

Código (vb) [Seleccionar]


Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub main() ' En el transcurso de los 100 Milisegundos se escapan quien _
sabe cuantas cosas... ademas de que traba constantemente y en ocasiones sin razon alguna
   Do
       DoEvents
       Sleep 100
   Loop
End Sub



Cual es mas factible? esperar el mensaje (Waitmessage() simulando a un Hook...) y realizar la accion o usar un Sleep (Simulando un Timer...)...

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 17 Septiembre 2010, 00:34 AM
por cierto donde dijo que era para un juego nunca lo vi (tal vez ni me percate)

a por cierto los dos ejemplos anteriores son solo ejemplo en el Hilo Actual (Sleep) y Waitmessage solo apra los mensajes locales, y solo representan a lo que tengo entenido en una forma facil de comprender mi objetivo primordial del por que elijiria un hook xP

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 17 Septiembre 2010, 00:37 AM
depende el caso, seria mas factible uno que otro. pero sin lugar a dudas, en un sistema que tiene ya en la cola 30 hooks del mismo tipo (por poner un ejemplo)  pues tendria que verse, nunca podria dar el mismo resultado ya que seria variable el numero de hooks existentes dependiendo que aplicaciones este ejecutando. yo no hablo del codigo en concreto dentro de la aplicacion si no el consumo que puede producir el uso inadecuado o excesivo de hooks.

CitarYo el otro día descargue un programa lo cual su función era apretar 'space' es decir lo pobre en un juego para saltar (CS) y funciono, entonces yo mantenía apretado 'space' y saltabas varias veces, sin este programa solo salta 1 vez. La cuestión es que yo quería hacer esto pero con otra tecla en mi caso "V"

si, tu puedes verlo como quieras, pero no te asegura en ningun caso un menor consumo de cpu ya que dependiendo cuanto este de cargado el sistema igual hay un rendimiento menor.


Sencillamente para una tecla tener que hacer que el sistema recorra una lista N elementos a cada pulsacion de teclado tampoco creo que tenga gran diferencia con la otra forma.
Título: Re: [Ayuda] Timer y..
Publicado por: BlackZeroX en 17 Septiembre 2010, 00:49 AM
lo que el pide el algo similar a esto, solo que yo lo habia realizado al Mouse xP

http://infrangelux.sytes.net/filex/?file=MultiClick%20in%20OneClick.rar&dir=/BlackZeroX/Programacion/vb6/Proyectos/Click%20massive%20In%20one%20click

Dulces Lunas!¡.
Título: Re: [Ayuda] Timer y..
Publicado por: bizco en 17 Septiembre 2010, 00:55 AM
si, entiendo perfectamente que quiere. pero no hablo de eso, si hablasemos de un keyloger me callaria, pq seria lo mismo que hablamos pero a la inversa. cada X tiempo del timer tendria que verificar cual tecla es la que esta pulsada con un alto consumo y ahi si podriamos decidir claramente que solucion utilizar. pero yo hablo de que para una tecla no es estrictamente necesario hacer uso de hooks, ni tampoco hace un consumo menor de cpu real (no lo he medido pero en este caso tengo grandes dudas ya que como te digo seria variable). repito, para el caso de hacer una aplicacion orientada segun el a dicho a un juego donde el uso del teclado es muy alto.

es decir, tu crees que esto hace un consumo tan alto de cpu para tener que instalar un hook que seguramente consuma lo mismo o incluso mas de recursos:


If GetAsyncKeyState(VK_F6) And 1 Then
Me.Caption = "Presionada"
Else
Me.Caption = "Libre"
End If


Y siempre remarcando lo anterior, para una sola tecla.