• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Cybernavigator

KeyListener

3 mensagens neste tópico

Boas, o problema é o seguinte.

Eu consigo ficar ah espera de que tecla foi seleccionada, e apresentar a tecla aprensentada.

O problema começa é quando eu quero apresentar um valor tipo Ctrl+P. Como é que eu detecto qq coisa desse tipo?

Tanx desde já...

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom eu consegui isto

Imports System.Windows.Forms

Imports System.Runtime.InteropServices
Public Class Form1
    Delegate Function HookProc(ByVal code As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) _
    As Integer
    <DllImport("user32.dll")> _
    Friend Shared Function SetWindowsHookEx(ByVal idHook As Integer, _
      ByVal lpfn As HookProc, _
      ByVal hInstance As IntPtr, _
      ByVal threadId As Integer) As Integer
    End Function

    <DllImport("user32.dll")> _
    Friend Shared Function CallNextHookEx(ByVal hhk As IntPtr, _
    ByVal nCode As Integer, ByVal wParam As IntPtr, _
    ByVal lParam As IntPtr) As Integer
    End Function
    'ok
    Dim rememberedkey1 As String
    Dim doning As Boolean = False
    Private Function MyCallbackFunction(ByVal code As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
        If (code < 0) Then
            'you need to call CallNextHookEx without further processing
            'and return the value returned by CallNextHookEx
            Return CallNextHookEx(IntPtr.Zero, code, wParam, lParam)    'unt
        End If
        ' we can convert the 2nd parameter (the key code) to a System.Windows.Forms.Keys enum constant
        Dim keyPressed As Keys = CType(wParam.ToInt32, Keys)
        If TextBox1.Focused Then
            If keydown1 = True And rememberedkey1 <> keyPressed.ToString And doning = True Then
                TextBox1.Text = TextBox1.Text & " + " & keyPressed.ToString
                doning = False
            ElseIf keydown1 = True And rememberedkey1 <> keyPressed.ToString And doning = False Then
                TextBox1.Text = TextBox1.Text
                doning = False
            Else
                TextBox1.Text = keyPressed.ToString
                rememberedkey1 = keyPressed.ToString
                doning = True
            End If

        End If
        'return the value returned by CallNextHookEx
        Return CallNextHookEx(IntPtr.Zero, code, wParam, lParam)
    End Function
    Private myCallbackDelegate As HookProc = Nothing
    Enum HookType
        WH_JOURNALRECORD = 0
        WH_JOURNALPLAYBACK = 1
        WH_KEYBOARD = 2
        WH_GETMESSAGE = 3
        WH_CALLWNDPROC = 4
        WH_CBT = 5
        WH_SYSMSGFILTER = 6
        WH_MOUSE = 7
        WH_HARDWARE = 8
        WH_DEBUG = 9
        WH_SHELL = 10
        WH_FOREGROUNDIDLE = 11
        WH_CALLWNDPROCRET = 12
        WH_KEYBOARD_LL = 13
        WH_MOUSE_LL = 14
    End Enum
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' initialize our delegate
        Me.myCallbackDelegate = New HookProc(AddressOf Me.MyCallbackFunction)

        ' setup a keyboard hook
        SetWindowsHookEx(HookType.WH_KEYBOARD, Me.myCallbackDelegate, IntPtr.Zero, AppDomain.GetCurrentThreadId())
    End Sub
    Dim keydown1 As Boolean = False
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        keydown1 = True
    End Sub

    Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
        keydown1 = False
    End Sub
End Class

já está muito perto, dêem uma vista de olhos.

Podiam-me ajudar a melhor isto?

Em anexo está a solution.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom acho k ja ta a funcionar melhor, mas mesmo assim acho que eh preciso melhorar.

Qualquer tipo de ajuda é bem vinda.

Em anexo o codigo actualizado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora