Ayuda código anti flood para visual basic 2010-2013

Iniciado por lGalazArayal1, 10 Marzo 2015, 22:00 PM

0 Miembros y 1 Visitante están viendo este tema.

lGalazArayal1

Hola bueno necesito un código para congelar el teclado por segundos. si escribo más de 6 mensajes seguidos sin esperar 3 segundos que el teclado se me congele y no pueda escribir y para que se descongele esperar 6 segundos espero que me ayuden gracias :D

okik

#1
hola

Con VB6 usando SetWindowsHookEx no hay problema, funciona a la perfección. Pero en VB.Net no funciona. Cuando se llama a SetWindowsHookEx se obtiene un ID, que es un número largo. Ese numero cambia cada vez que se llama a SetWindowsHookEx de modo que una vez bloqueado para desbloquear el teclado, es necesario usar el mismo ID con que se bloqueó con UnhookWindowsHookEx.

https://www.daniweb.com/software-development/vbnet/threads/427872/disable-windows-key-on-keyboard-when-application-is-running


El caso es que encontré la forma de obtener el Id con SetWindowsHookEx en VB.Net, sin embargo NO BLOQUEA EL TECLADO, pero con VB6 sí. No se porqué.

Para VB.Net se necesita el triple de código, y como se puede ver en VB6 el código es muy reducido.

Código (vb) [Seleccionar]
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Const WH_KEYBOARD = 2
Private X() As Long
Dim Dm As Long

Private Sub Command1_Click()
'Bloquear teclado
ReDim X(Dm)
X(Dm) = SetWindowsHookEx(WH_KEYBOARD, AddressOf WinProcKeyBoard, App.hInstance, App.ThreadID)
Dm = Dm + 1
'Nota: La tecla windows y Ctrl+Alt+Supr seguirán activos
End Sub
Private Sub Command2_Click()
'Desbloquear teclado
UnhookWindowsHookEx X(0)
End Sub

Private Sub Form_Load()
Command1.Caption = "Bloquear teclado"
Command2.Caption = "Desbloquear teclado"
End Sub

'===========================================
'///////////////////////////////////////////
'A TENER EN CUENTA ANTES DE USAR
'Al pulsar Command1 SetWindowsHookEx se
'obtiene un ID que es introducido en X.
'Este hilo es un número tal como 1442617; 2229059;...; etc
'El primer valor X, supongamos por ejemplo 1442617,
'es el ÚNICO VALOR QUE PUEDE DESBLOQUEAR EL TECLADO
'mediante UnhookWindowsHookEx (al pulsar en Command2)
'de modo que si se sigue pulsando command1, X irá adquiriendo
'nuevos valores que YA NO SERVIRÁN PARA DESBLOQUEAR,
'X perderá su valor original (1442617 en este caso ejemplo)
'y habrá que cerrar sesión o reiniciar windows para
'volver a disponer del teclado.

'Para evitar eso, he creado un array en X
'De modo que el primer valor queda fijado en X(0)
'Los siguientes valores (si se sigue pulsando Command1)
'se irán introduciendo en X(1),X(2),..,X(n)
'///////////////////////////////////////////
'===========================================




79137913

HOLA!!!

La manera para bloquear el teclado es la que te dijo okik pero eso bloqueara el teclado en toda la pc  :o , en cambio podrias hacer un codigo para que cuando se modifique o se envien los datos del control en el cual los recibis se anule la peticion si hay "flood" como vos lo llamas.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*