Bueno lo que yo quiero esque al escribir una palabra me haga una acción por ejemplo "escribo /Speed y que el form me detecte la palabra que salga en el label1 cambie de nombre"
intete
If SendKeys.Send("/Speed") And SendKeys.Send("{enter}") Then
label1.text = "Ejecutado correctamente"
End If
Pero me marca error ayuda!
1) ¿por qué no ponés un textbox que al presionar "enter" realice la acción que quieras?
2) sendleys lee o toma o envía como quieras decirlo cada una de las teclas presionadas de forma individual.
3) por lo tanto por un lado deberías comparar que la cadena "speed" esté escrita y por otro que al presionar "Enter" haga lo que quieras
4)por ejemplo: en la función del textbox Private Sub Text1_KeyPress(KeyAscii As Integer)
si KeyAscii = 13 entonces
si textbox.texto = "speed" entonces
label.texto = "correcto"
final si
final si
final función del textbox
5) lo que me lleva a usar solo Keyascii en lugar de sendkeys
6) por supuesto que puedo estar totalmente errado!
Pero yo quiero escribir la Palabra afuera del form ejemplo si Aqui escribiera "Speed" que me marque la accion en el form
pues en ese caso podrías usar la api GetAsyncKeyState para detectar las teclas pulsadas.
Hola
Podría ser algo así :silbar:
--Se necesita---
-1 control Timer
-1 Label
-1 Textbox
Public Class Form1
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Int32) As Int32
Dim RegistrerKeys As String 'Aquí se registran las teclas pulsadas
Dim Comando As String
Dim cont As Long
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Visible = False
Timer1.Enabled = True
'Ojo con esto, cuanto menor sea el valor'interval' más
'rápido hay que teclear para detectar la palabra pulsada
Timer1.Interval = 70
Comando = "Speed"
End Sub
Public Function IsCommand(ByVal Command As String, ByVal Cadena As String, ByVal objText As TextBox) As Boolean
Dim C As Integer
objText.Text = Cadena
C = InStr(1, Cadena, Command, 1) 'posición en el que se encuentra el elemento buscado
On Error GoTo NoPalabra
objText.SelectionStart = C - 1
objText.SelectionLength = Len(Command)
If Len(Command) > 0 Then IsCommand = True
NoPalabra:
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim msg As Boolean, S As Long, i As Long
S = 0
'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
For i = 65 To 90 '65 a 90 representan letras de la A a Z
S = GetKeyState(i) 'Obtiene un valor negativo si se ha pulsado una tecla entre 65 y 90 (de A a Z)
If S < 0 Then
RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
End If
Next i
'Iscommand comprueba si se ha pulsado "speed"
msg = IsCommand(Comando, RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
If msg = True Then
msg = False
RegistrerKeys = ""
TextBox1.Text = ""
MsgBox("Palabra pulsada: " & Comando)
Label1.Text = Comando
End If
End Sub
End Class
El código no es muy eficiente. Detectará la pulsación de la palabra dependiendo de la velocidad en que pulses. Yo he puesto Timer1.Interval = 70, así que hay que pulsar las teclas muy brevemente. Por ejemplo si mantengo una tecla demasiado tiempo, por ejemplo la "P", el programa detecta "SPPPPEED", y por lo tanto no la da por válida.
Gracias amigos me sirvieron los dos consejos gracias.
Una pregunta quiero agregar otro comando ya pero solo me lee el primer comando los demas no me ejecuta miren como estaPublic Class Form1
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Int32) As Int32
Dim RegistrerKeys As String 'Aquí se registran las teclas pulsadas
Dim Comando As String
Dim Comando2 As String
Dim Comando3 As String
Dim Comando4 As String
Dim cont As Long
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim msg As Boolean, S As Long, i As Long
S = 0
'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
For i = 65 To 90 '65 a 90 representan letras de la A a Z
S = GetKeyState(i) 'Obtiene un valor negativo si se ha pulsado una tecla entre 60 y 90 (de A a Z)
If S < 0 Then
RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
End If
Next i
'Iscommand comprueba si se ha pulsado "speed"
msg = IsCommand(Comando, RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
If msg = True Then
msg = False
RegistrerKeys = False
TextBox1.Text = ""
MsgBox("Comando ejecutado: " & Comando)
Label1.Text = Comando
End If
End Sub
Public Function IsCommand(ByVal Command As String, ByVal Cadena As String, ByVal objText As TextBox) As Boolean
Dim C As Integer
objText.Text = Cadena
C = InStr(1, Cadena, Command, 1) 'posición en el que se encuentra el elemento buscado
On Error GoTo NoPalabra
objText.SelectionStart = C - 1
objText.SelectionLength = Len(Command)
If Len(Command) > 0 Then IsCommand = True
NoPalabra:
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Label1.Text = "speed" Then
Form2.Show()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Visible = False
Timer1.Enabled = True
Timer5.Enabled = True
Timer6.Enabled = True
Timer7.Enabled = True
'Ojo con esto, cuanto menor sea el valor'interval' más
'rápido hay que teclear para detectar la palabra pulsada
Timer1.Interval = 120
Comando = "speed"
Comando2 = "ayuda"
Comando3 = "creador"
Comando4 = "web"
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
ListBox1.Visible = True
End Sub
Private Sub Timer5_Tick(sender As Object, e As EventArgs) Handles Timer5.Tick
Dim msg As Boolean, S As Long, i As Long
S = 0
'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
For i = 65 To 90 '65 a 90 representan letras de la A a Z
S = GetKeyState(i) 'Obtiene un valor negativo si se ha pulsado una tecla entre 60 y 90 (de A a Z)
If S < 0 Then
RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
End If
Next i
'Iscommand comprueba si se ha pulsado "speed"
msg = IsCommand(Comando, RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
If msg = True Then
msg = False
RegistrerKeys = False
TextBox5.Text = ""
MsgBox("Comando ejecutado: " & Comando3)
Label1.Text = Comando
End If
End Sub
Private Sub Timer6_Tick(sender As Object, e As EventArgs) Handles Timer6.Tick
Dim msg As Boolean, S As Long, i As Long
S = 0
'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
For i = 65 To 90 '65 a 90 representan letras de la A a Z
S = GetKeyState(i) 'Obtiene un valor negativo si se ha pulsado una tecla entre 60 y 90 (de A a Z)
If S < 0 Then
RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
End If
Next i
'Iscommand comprueba si se ha pulsado "speed"
msg = IsCommand(Comando, RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
If msg = True Then
msg = False
RegistrerKeys = False
TextBox4.Text = ""
MsgBox("Comando ejecutado: " & Comando2)
Label1.Text = Comando
End If
End Sub
Private Sub Timer7_Tick(sender As Object, e As EventArgs) Handles Timer7.Tick
Dim msg As Boolean, S As Long, i As Long
S = 0
'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
For i = 65 To 90 '65 a 90 representan letras de la A a Z
S = GetKeyState(i) 'Obtiene un valor negativo si se ha pulsado una tecla entre 60 y 90 (de A a Z)
If S < 0 Then
RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
End If
Next i
'Iscommand comprueba si se ha pulsado "speed"
msg = IsCommand(Comando, RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
If msg = True Then
msg = False
RegistrerKeys = False
TextBox6.Text = ""
MsgBox("Comando ejecutado: " & Comando4)
Label1.Text = Comando
End If
Cita de: pablomillon en 18 Marzo 2015, 03:58 AM
Una pregunta quiero agregar otro comando ya pero solo me lee el primer comando los demas no me ejecuta miren como esta
Hola,
Fallo mío. Puse sólo un comando y debí imaginar que querías más de uno. Para ello no hace falta crear un 'Timer' para cada comando. Basta con crear un
Array (matriz) para la variable Comando:
Dim Comando(0 To 3) As String
.....
Comando(0) = "Speed"
Comando(1) = "ayuda"
Comando(2) = "creador"
Comando(3) = "web"
.....
Y luego añadir
For/Next en el control Timer:
For i = 1 To UBound(Comando)
msg = IsCommand(Comando(i), RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
'Iscommand comprueba si se ha pulsado "speed"
If msg = True Then
msg = False
RegistrerKeys = ""
TextBox1.Text = ""
Label1.Text = Comando(i)
End If
Next i
....
Ubound sirve para obtener la dimensión del Array. Por ejemplo, si fuese:
Dim Comando(0 To 10) As String
Entonces
UBound(Comando) daría
10¿Y porqué no poner Comando(1 to 4)? Porque VB.Net no deja hacerlo. El mínimo es 0.
Así quedaría el código, finalmente:
Public Class Form1
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Int32) As Int32
Dim RegistrerKeys As String 'Aquí se registran las teclas pulsadas
Dim Comando(0 To 3) As String
Dim cont As Long
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Visible = False
Timer1.Enabled = True
'Ojo con esto, cuanto menor sea el valor'interval' más
'rápido hay que teclear para detectar la palabra pulsada
Timer1.Interval = 120
Comando(0) = "Speed"
Comando(1) = "ayuda"
Comando(2) = "creador"
Comando(3) = "web"
End Sub
Public Function IsCommand(ByVal Command As String, ByVal Cadena As String, ByVal objText As TextBox) As Boolean
Dim C As Integer
objText.Text = Cadena
C = InStr(1, Cadena, Command, 1) 'posición en el que se encuentra el elemento buscado
On Error GoTo NoPalabra
objText.SelectionStart = C - 1
objText.SelectionLength = Len(Command)
If Len(Command) > 0 Then IsCommand = True
NoPalabra:
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim msg As Boolean, S As Long, i As Long
S = 0
'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
For i = 65 To 90 '65 a 90 representan letras de la A a Z
S = GetKeyState(i) 'Obtiene negativo si se ha pulsado una tecla entre 65 y 90 (de A a Z)
If S < 0 Then
RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
End If
Next i
For i = 0 To UBound(Comando)
msg = IsCommand(Comando(i), RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de teclas pulsadas
'Iscommand comprueba si se ha pulsado "speed"
If msg = True Then
msg = False
RegistrerKeys = ""
TextBox1.Text = ""
Label1.Text = Comando(i)
'///===================================
'///Aquí puedes añadir lo que quieres que ocurra al pulsar el comando
'///por ejemplo Form2.Show
'///===================================
End If
Next i
End Sub
End Class
Lo que no entiendo es porqué no usas Hotkeys, es decir que si el usuario pulsa
Ctrl +Shift +F1 por ejemplo, se ejecute la Ayuda.