Foro de elhacker.net

Programación => 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:

Código:
  
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
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
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
  1.  
  2. ' Teclas virtuales, juego estándar
  3. Const VK_LBUTTON = &H1
  4. Const VK_RBUTTON = &H2
  5. Const VK_CANCEL = &H3
  6. Const VK_MBUTTON = &H4             '  NO es contiguo a L RBUTTON
  7.  
  8. Const VK_BACK = &H8
  9. Const VK_TAB = &H9
  10.  
  11. Const VK_CLEAR = &HC
  12. Const VK_RETURN = &HD
  13.  
  14. Const VK_SHIFT = &H10
  15. Const VK_CONTROL = &H11
  16. Const VK_MENU = &H12
  17. Const VK_PAUSE = &H13
  18. Const VK_CAPITAL = &H14
  19.  
  20. Const VK_ESCAPE = &H1B
  21.  
  22. Const VK_SPACE = &H20
  23. Const VK_PRIOR = &H21
  24. Const VK_NEXT = &H22
  25. Const VK_END = &H23
  26. Const VK_HOME = &H24
  27. Const VK_LEFT = &H25
  28. Const VK_UP = &H26
  29. Const VK_RIGHT = &H27
  30. Const VK_DOWN = &H28
  31. Const VK_SELECT = &H29
  32. Const VK_PRINT = &H2A
  33. Const VK_EXECUTE = &H2B
  34. Const VK_SNAPSHOT = &H2C
  35. Const VK_INSERT = &H2D
  36. Const VK_DELETE = &H2E
  37. Const VK_HELP = &H2F
  38.  
  39. ' VK_A hasta VK_Z son iguales que sus equivalentes ASCII: 'A' hasta 'Z'
  40. ' VK_0 hasta VK_9 son iguales que sus equivalentes en ASCII: '0' hasta '9'
  41.  
  42. Const VK_NUMPAD0 = &H60
  43. Const VK_NUMPAD1 = &H61
  44. Const VK_NUMPAD2 = &H62
  45. Const VK_NUMPAD3 = &H63
  46. Const VK_NUMPAD4 = &H64
  47. Const VK_NUMPAD5 = &H65
  48. Const VK_NUMPAD6 = &H66
  49. Const VK_NUMPAD7 = &H67
  50. Const VK_NUMPAD8 = &H68
  51. Const VK_NUMPAD9 = &H69
  52. Const VK_MULTIPLY = &H6A
  53. Const VK_ADD = &H6B
  54. Const VK_SEPARATOR = &H6C
  55. Const VK_SUBTRACT = &H6D
  56. Const VK_DECIMAL = &H6E
  57. Const VK_DIVIDE = &H6F
  58. Const VK_F1 = &H70
  59. Const VK_F2 = &H71
  60. Const VK_F3 = &H72
  61. Const VK_F4 = &H73
  62. Const VK_F5 = &H74
  63. Const VK_F6 = &H75
  64. Const VK_F7 = &H76
  65. Const VK_F8 = &H77
  66. Const VK_F9 = &H78
  67. Const VK_F10 = &H79
  68. Const VK_F11 = &H7A
  69. Const VK_F12 = &H7B
  70. Const VK_F13 = &H7C
  71. Const VK_F14 = &H7D
  72. Const VK_F15 = &H7E
  73. Const VK_F16 = &H7F
  74. Const VK_F17 = &H80
  75. Const VK_F18 = &H81
  76. Const VK_F19 = &H82
  77. Const VK_F20 = &H83
  78. Const VK_F21 = &H84
  79. Const VK_F22 = &H85
  80. Const VK_F23 = &H86
  81. Const VK_F24 = &H87
  82.  
  83. Const VK_NUMLOCK = &H90
  84. Const VK_SCROLL = &H91
  85.  
  86. '
  87. '   VK_L VK_R - teclas virtuales ALT, CTRL y MAYÚS izquierda y derecha.
  88. '   Se usan sólo como parámetros para GetAsyncKeyState() y GetKeyState().
  89. '   Ninguna otra API ni mensaje distingue las teclas derecha e izquierda de esta forma.
  90. '  /
  91. Const VK_LSHIFT = &HA0
  92. Const VK_RSHIFT = &HA1
  93. Const VK_LCONTROL = &HA2
  94. Const VK_RCONTROL = &HA3
  95. Const VK_LMENU = &HA4
  96. Const VK_RMENU = &HA5
  97.  
  98. Const VK_ATTN = &HF6
  99. Const VK_CRSEL = &HF7
  100. Const VK_EXSEL = &HF8
  101. Const VK_EREOF = &HF9
  102. Const VK_PLAY = &HFA
  103. Const VK_ZOOM = &HFB
  104. Const VK_NONAME = &HFC
  105. Const VK_PA1 = &HFD
  106. Const VK_OEM_CLEAR = &HFE
  107.  
  108.  


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.

Citar
Hooks 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
Citar
Te lo tomas muy personal

para nada, ¿donde ves lo personal?

Citar
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.

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
Citar
xD, 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
  1.  
  2. Declare Function WaitMessage Lib "user32" () As Long
  3. Sub main()  ' No se nos escapara nada... almenos que el proceso involucrado _
  4. corra en el mismo hilo y sea demasiado tardado... La solucion un nuevo _
  5. Hilo o algun "semaforo" para evitar la duplicidad de un proceso que se repita _
  6. demasiadas veces de las nesesarias O crearlo con un nuevo Hilo (No se recomienda esto en VB6... Inestable).
  7.    Do
  8.        DoEvents
  9.        WaitMessage
  10.    Loop
  11. End Sub
  12.  
  13.  

a

Código
  1.  
  2. Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  3. Sub main() ' En el transcurso de los 100 Milisegundos se escapan quien _
  4. sabe cuantas cosas... ademas de que traba constantemente y en ocasiones sin razon alguna
  5.    Do
  6.        DoEvents
  7.        Sleep 100
  8.    Loop
  9. End Sub
  10.  
  11.  

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.

Citar
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"

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:

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