Jump to content
Andrepereira9

[Resolvido] Hotkeys

Recommended Posts

Andrepereira9

Boas

Estive a testar este código para utilizar hotkeys

   ' Cria uma nova lista que guarda os ID's registados
   Private RegistedIDs As New List(Of Integer)

   ' Declara um evento que irá indicar o número do ID registado
   Public Event HotkeyPressedID(ByVal ID As Integer)

   Public Enum HotKeyModifiers
       None = 0
       Alt = 1
       Control = 2
       Shift = 4
       Windows = 8
   End Enum

   ' API's para registar e remover o registo das hotkeys
   Private Declare Function RegisterHotKey Lib "user32" (ByVal handle As IntPtr, ByVal ID As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean
   Private Declare Function UnregisterHotKey Lib "user32" (ByVal handle As IntPtr, ByVal ID As Integer) As Boolean


   ''' <summary>
   ''' Regista (ou tenta) um HotKey usando a respectiva API
   ''' </summary>
   ''' <param name="ID">Número único do registo</param>
   ''' <param name="Modifiers">Indicação do modifier</param>
   ''' <param name="KeyCombo">Indicação da tecla</param>
   Public Function RegisterHotKey(ByVal ID As Integer, ByVal Modifiers As HotKeyModifiers, ByVal KeyCombo As Integer) As Boolean

       ' Caso consiga registar a hotkey
       If RegisterHotKey(Me.Handle, ID, Modifiers, KeyCombo) Then   

           ' Adiciona à lista dos ID's registados
           RegistedIDs.Add(ID)
           Return True
       End If

   End Function

   ''' <summary>
   ''' Subrotina que executa uma acção de acordo com a combinação efectuada
   ''' </summary>
   ''' <param name="ID">Número do ID registado</param>
   Private Sub RegisterHotKeyExample_HotkeyPressedID(ByVal ID As Integer) Handles Me.HotkeyPressedID

       Select Case ID
           Case 0
               Me.TextBox1.AppendText(Now & " - Ctrl+Shift+F" & vbNewLine)
           Case 1
               Me.TextBox1.AppendText(Now & " - Windows+T" & vbNewLine)
           Case 2
               Me.TextBox1.AppendText(Now & " - Alt+Tab bloqueado" & vbNewLine)
           Case 3
               Me.TextBox1.AppendText(Now & " - Letra ‘a’ bloqueada" & vbNewLine)
           Case 4
               Me.TextBox1.AppendText(Now & " - Letra ‘b’ bloqueada" & vbNewLine)
       End Select

   End Sub

   ' Overrides ao WndProc e detecção se a combinação foi efectuada
   Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
       Const WM_HOTKEY As Integer = &H312

       ' Caso seja uma HotKey
       If m.Msg = WM_HOTKEY Then
           RaiseEvent HotkeyPressedID(m.WParam.ToInt32)
       End If   

       MyBase.WndProc(m)

   End Sub



   Private Sub RegisterHotKeyExample_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       ' No evento Form Load são registadas algumas teclas. Os ID's 2,3 e 4 servem
       ' apenas para mostrar que é preciso ter algum cuidado a utilizar este código 

       ' Ctrl-Shift-F
       RegisterHotKey(0, HotKeyModifiers.Control Or HotKeyModifiers.Shift, Keys.F)

       ' Windows+T
       RegisterHotKey(1, HotKeyModifiers.Windows, Keys.T)

       ' Alt+Tab (que irá apenas desabilitar esta combinação)
       RegisterHotKey(2, HotKeyModifiers.Alt, Keys.Tab)

       ' Desabilita as teclas ‘a’ e ‘b’
       RegisterHotKey(3, HotKeyModifiers.None, Keys.A)
       RegisterHotKey(4, HotKeyModifiers.None, Keys.B)

   End Sub


   ' MUITO IMPORTANTE: Garantir sempre que as teclas saem do registo, caso
   ' contrário o sistema operativo pode não funcionar correctamente
   Private Sub RegisterHotKeyExample_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

       ' Ciclo nos ID's registados
       For Each ID As Integer In RegistedIDs
           UnregisterHotKey(Me.Handle, ID)
       Next

End Sub

e a tecla 'A' e a 'B' estão como hotkeys, e quando são utilizadas, escrevem no textbox 'Letra 'A' bloqueada', mas não escreve nada, por exemplo no Word.

Não existe nenhuma maneira de ao utilizar a tecla, o programa diz tecla 'a' bloqueada, mas ele escrever à mesma no word, ou outro local??


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
jpaulino

Não entendi o que queres .... queres bloquear a tecla e escrever no word? Não entendi.

Share this post


Link to post
Share on other sites
Andrepereira9

não a queria bloquear. queria, se desse, que dissesse o utilizador carregou na tecla 'A', e que ela fosse escrita à mesma


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
jpaulino

Então mas assim mostras as mensagem e depois fazer sendkeys para escrever a tecla onde estiver o focus.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.