Interrupcion de teclado

Iniciado por darnali, 7 Abril 2010, 15:22 PM

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

darnali

Hola buenas!

Me gustaria a ver si alguien me puede explicar como funcionan las interrupciones en Visual Studio 2008 programando con Framework 2.0, no se como van i si alguien me echa un cable, le estaria muy agradecido!

Saludos!

Zzombi

quieres bloquear el teclado? o bloquear ciertas teclas

explicate más

bizco

no se usan interrupciones a dia de hoy.

darnali

quiero escribir en la interrupcion de teclado, es decir, poder escribir por el puerto de teclado sin el teclado, no se si me explico...

Zzombi

y que tal simular pulsaciones de teclas?
con keybd_event

darnali

ya lo probé y no me sirve, ya que en el inicio de sesion de windows no me envia las teclas "pulsadas" con el keybd_event al foco del password por ejemplo, eso es lo que quiero hacer en definitiva, no hay nada mas a parte del sendkeys?

Saludos!

[D4N93R]


Keyen Night

El API SendMessage tambien sirve para enviar teclas pero a un handle determinado...

Mira este ejemplo en C#
Código (c#) [Seleccionar]

        [DllImport("user32.dll")]
        public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

            public const int WM_KEYDOWN = 0x0100;
            public const int WM_KEYUP = 0x0101;
            public const int WM_CHAR = 0x0102;

        public static void SendString(IntPtr mHandle, string s)
        {
            foreach (var c in s)
                SendKey(mHandle, Convert.ToInt32(c));
            Thread.Sleep(10);
        }

        public static void SendKey(IntPtr mHandle, Int32 key)
        {
            SendMessage(mHandle, WM_KEYDOWN, (int)key, 0);
            SendMessage(mHandle, WM_CHAR, (int)key, 0);
            SendMessage(mHandle, WM_KEYUP, (int)key, 0);
        }
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

darnali

#8
ok, vamos a ver, y eso como se llamaria luego, por ejemplo si quiero enviar "Hola" al "textbox" del password de windows??

es mas.... tengo problemas al traducir esto a VB.NET, podrias echarme un cable en esto?

Gracias de antemano

Keyen Night

Primero debes de descargar el WinID para saber si el TextBox es Child o Parent y saber cual es su Class y el Class de su Parent si es Child, esto para así saber si debes usar FindWindow o FindWindowEx. Una vez obtenido el Handle el codigo anterior es más facil de usar en Vb.Net:

Código (vb.net) [Seleccionar]
    Public Const _
    WM_KEYDOWN As Integer = &H100, _
    WM_KEYUP As Integer = &H101, _
    WM_CHAR As Integer = &H102

    Public Sub SendString(ByVal mHandle As IntPtr, ByVal s As String)

        For Each c As String In s
            SendKey(mHandle, System.Text.Encoding.Default.GetBytes(c).First)
            Threading.Thread.Sleep(10)
        Next

    End Sub

    Public Sub SendKey(ByVal mHandle As IntPtr, ByVal key As Keys)
        SendMessage(mHandle, WM_KEYDOWN, key, IntPtr.Zero)
        SendMessage(mHandle, WM_CHAR, key, IntPtr.Zero)
        SendMessage(mHandle, WM_KEYUP, key, IntPtr.Zero)
    End Sub


Y prueba el codigo así:

Debes importar SendMessage, FindWindow y FindWindowEx ( las consigues en pinvoke.net )

Abre un Bloc de Notas y dejalo vacio, en tu Sub Load agrega lo siguiente:

Código (vb.net) [Seleccionar]
        Dim Notepad As IntPtr = FindWindowEx(FindWindow("Notepad", Nothing), 0, "Edit", Nothing)

        SendString(Notepad, "Enviando String con SendMessage")


Funciona perfecto ^^
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...