Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: pablomillon en 16 Marzo 2015, 21:29 pm



Título: Ayuda para ejecute un tipo comando
Publicado por: pablomillon en 16 Marzo 2015, 21:29 pm
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!


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: tincopasan en 16 Marzo 2015, 22:33 pm
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!


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: pablomillon en 16 Marzo 2015, 23:04 pm
Pero yo quiero escribir la Palabra afuera del form ejemplo si Aqui escribiera "Speed" que me marque la accion en el form


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: tincopasan en 17 Marzo 2015, 00:54 am
pues en ese caso podrías usar la api GetAsyncKeyState para detectar las teclas pulsadas.


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: okik en 17 Marzo 2015, 16:52 pm
Hola
Podría ser algo así  :silbar:

--Se necesita---
-1 control Timer
-1 Label
-1 Textbox


Código
  1. Public Class Form1
  2.    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Int32) As Int32
  3.    Dim RegistrerKeys As String 'Aquí se registran las teclas pulsadas
  4.    Dim Comando As String
  5.    Dim cont As Long
  6.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  7.        TextBox1.Visible = False
  8.        Timer1.Enabled = True
  9.        'Ojo con esto, cuanto menor sea el valor'interval' más
  10.        'rápido hay que teclear para detectar la palabra pulsada
  11.        Timer1.Interval = 70
  12.        Comando = "Speed"
  13.    End Sub
  14.  
  15.  
  16.    Public Function IsCommand(ByVal Command As String, ByVal Cadena As String, ByVal objText As TextBox) As Boolean
  17.        Dim C As Integer
  18.        objText.Text = Cadena
  19.        C = InStr(1, Cadena, Command, 1) 'posición en el que se encuentra el elemento buscado
  20.        On Error GoTo NoPalabra
  21.        objText.SelectionStart = C - 1
  22.        objText.SelectionLength = Len(Command)
  23.        If Len(Command) > 0 Then IsCommand = True
  24. NoPalabra:
  25.  
  26.    End Function
  27.  
  28.    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  29.        Dim msg As Boolean, S As Long, i As Long
  30.        S = 0
  31.        'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
  32.        For i = 65 To 90 '65 a 90 representan letras de la A a Z
  33.            S = GetKeyState(i) 'Obtiene un valor negativo si se ha pulsado una tecla entre 65 y 90 (de A a Z)
  34.            If S < 0 Then
  35.                RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
  36.            End If
  37.        Next i
  38.       'Iscommand comprueba si se ha pulsado "speed"
  39.        msg = IsCommand(Comando, RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de  teclas pulsadas
  40.        If msg = True Then
  41.            msg = False
  42.            RegistrerKeys = ""
  43.            TextBox1.Text = ""
  44.            MsgBox("Palabra pulsada: " & Comando)
  45.            Label1.Text = Comando
  46.        End If
  47.    End Sub
  48.  
  49. 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.


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: pablomillon en 18 Marzo 2015, 02:58 am
Gracias amigos me sirvieron los dos consejos gracias.


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: 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
Código:
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 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


Título: Re: Ayuda para ejecute un tipo comando
Publicado por: okik en 18 Marzo 2015, 17:51 pm
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:
Código
  1. Public Class Form1
  2.    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Int32) As Int32
  3.    Dim RegistrerKeys As String 'Aquí se registran las teclas pulsadas
  4.    Dim Comando(0 To 3) As String
  5.    Dim cont As Long
  6.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  7.        TextBox1.Visible = False
  8.        Timer1.Enabled = True
  9.        'Ojo con esto, cuanto menor sea el valor'interval' más
  10.        'rápido hay que teclear para detectar la palabra pulsada
  11.        Timer1.Interval = 120
  12.        Comando(0) = "Speed"
  13.        Comando(1) = "ayuda"
  14.        Comando(2) = "creador"
  15.        Comando(3) = "web"
  16.    End Sub
  17.  
  18.  
  19.    Public Function IsCommand(ByVal Command As String, ByVal Cadena As String, ByVal objText As TextBox) As Boolean
  20.        Dim C As Integer
  21.        objText.Text = Cadena
  22.        C = InStr(1, Cadena, Command, 1) 'posición en el que se encuentra el elemento buscado
  23.        On Error GoTo NoPalabra
  24.        objText.SelectionStart = C - 1
  25.        objText.SelectionLength = Len(Command)
  26.        If Len(Command) > 0 Then IsCommand = True
  27. NoPalabra:
  28.  
  29.    End Function
  30.  
  31.    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  32.        Dim msg As Boolean, S As Long, i As Long
  33.        S = 0
  34.        'Detecta las pulsaciones de teclas y las introduce en Registrerkeys
  35.        For i = 65 To 90 '65 a 90 representan letras de la A a Z
  36.            S = GetKeyState(i) 'Obtiene negativo si se ha pulsado una tecla entre 65 y 90 (de A a Z)
  37.            If S < 0 Then
  38.                RegistrerKeys = RegistrerKeys & Chr(i) 'Introduce las letras pulsadas en Registrerkeys
  39.            End If
  40.        Next i
  41.        For i = 0 To UBound(Comando)
  42.            msg = IsCommand(Comando(i), RegistrerKeys, TextBox1) 'Busca una palabra en un grupo de  teclas pulsadas
  43.            'Iscommand comprueba si se ha pulsado "speed"
  44.            If msg = True Then
  45.                msg = False
  46.                RegistrerKeys = ""
  47.                TextBox1.Text = ""
  48.                Label1.Text = Comando(i)
  49.                '///===================================
  50.                '///Aquí puedes añadir lo que quieres que ocurra al pulsar el comando
  51.                '///por ejemplo Form2.Show
  52.                '///===================================
  53.            End If
  54.        Next i
  55.    End Sub
  56.  
  57. 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.