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

programadorvb6

Como pressionar automáticamente teclado em vb6

7 mensagens neste tópico

:wallbash:

Olá boa tarde, como fazer para pressionar automaticamente as teclas do teclado em vb6 ?

Sei que é através da instrução : "Send key", só que o meu problema agora é com o Windows Vista que não aceita o "Send key ", existe alguma maneira / ou função que me faça exactamente o que o comando "send keys" faz para as outras plataformas abaixo , para o Windows vista?

cump.

ajudem-me..

ate+

programadorvb6

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Windows Vista, VB6, não será hora de actualizar para VB.NET ?

(Desculpa sei que não ajudei em nada, mas é uma ideia...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O .net framework tem send keys portanto de certeza que funciona no Vista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O .net framework tem send keys portanto de certeza que funciona no Vista.

Também estou a achar estranho o a função SendKeys() não funcionar, no entanto podes utilizar API's como a SendInput (se não estou enganado é esta)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas....

Como nunca trabalhei com essa API tive de ir procurar na net e ver como é utilizada. Encontrei este código fonte que tem ai umas coisas interessantes e depois retirei apenas o necessário para fazer o que queres:

Option Explicit


Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Private Const KEYEVENTF_KEYUP = &H2
Private Const INPUT_KEYBOARD = 1

Private Type GENERALINPUT
    dwType As Long
    xi(0 To 23) As Byte
End Type


Private Type KEYBDINPUT
    wVk As Integer
    wScan As Integer
    dwFlags As Long
    time As Long
    dwExtraInfo As Long
End Type


Private Enum ControlKey
    Ctrl = 1
    Alt = 2
    Shift = 4
    Caps = 8
    Win = 16
    PrintScr = 32
    SysPopup = 64
    NumLock = 128
End Enum



Private Sub SendKey(ByVal vkey As Integer, Optional booDown As Boolean = False)
    Dim GInput(0) As GENERALINPUT
    Dim KInput As KEYBDINPUT
    KInput.wVk = vkey
    If Not booDown Then
        KInput.dwFlags = KEYEVENTF_KEYUP
    End If
    GInput(0).dwType = INPUT_KEYBOARD
    CopyMemory GInput(0).xi(0), KInput, Len(KInput)
    Call SendInput(1, GInput(0), Len(GInput(0)))
End Sub



Private Sub Timer1_Timer()
Dim vkey As Integer

vkey = Asc(UCase("T"))

SendKey vkey, True
End Sub

Esse é o código. Na linha -> vkey = Asc(UCase("T")) esse "T" é o carácter que será enviado, só pode ser enviado um carácter de cada vez. Depois podes substituir esse "T" por uma variávels, etc, etc.....

Para enviares Strings é é com a função:

Private Sub SendString(ByVal txt As String, Optional booDown As Boolean = False, Optional ByVal enumCtrl As ControlKey = 0)
    Dim GInput() As GENERALINPUT
    Dim KInput As KEYBDINPUT
    Dim L As Long, i As Long, tmp As String
    txt = UCase(txt)
    L = Len(txt)
    ReDim GInput(0 To L - 1) As GENERALINPUT
    For i = 0 To L - 1 Step 1
        tmp = Mid(txt, i + 1, 1)
        Select Case tmp
            Case "*": KInput.wVk = vbKeyMultiply
            Case "+": KInput.wVk = vbKeyAdd
            Case "-": KInput.wVk = vbKeySubtract
            Case "/": KInput.wVk = vbKeyDivide
            Case ".": KInput.wVk = vbKeyDecimal
            Case "?": KInput.wVk = 191
            Case Else: KInput.wVk = Asc(tmp)
        End Select
        If Not booDown Then
            KInput.dwFlags = KEYEVENTF_KEYUP
        End If
        GInput(i).dwType = INPUT_KEYBOARD
        CopyMemory GInput(i).xi(0), KInput, Len(KInput)
    Next i
    If (enumCtrl And Ctrl) Then SendKey vbKeyControl, booDown
    If (enumCtrl And Alt) Then SendKey vbKeyMenu, booDown
    If (enumCtrl And Caps) Then SendKey vbKeyCapital, booDown
    If (enumCtrl And NumLock) Then SendKey vbKeyNumlock, booDown
    If (enumCtrl And PrintScr) Then SendKey vbKeyPrint, booDown
    If (enumCtrl And Shift) Then SendKey vbKeyShift, booDown
    If (enumCtrl And SysPopup) Then SendKey 93, booDown
    If (enumCtrl And Win) Then SendKey 91, booDown
    Call SendInput(L, GInput(0), Len(GInput(0)))
End Sub

E para a utilizares fazes -> SendString "String aqui", True

Penso que com esta ultima função ate podes fazer conbinações de teclas com ctrl + c, etc.... Para tal basta adicionares mais un argumento ao chamar a função -> SendString "String aqui", True, Num_Correspondente

Para saberes as opções diponiveis podes ver aqui neste bocado:

Private Enum ControlKey
    Ctrl = 1
    Alt = 2
    Shift = 4
    Caps = 8
    Win = 16
    PrintScr = 32
    SysPopup = 64
    NumLock = 128
End Enum

Se quisesses enviar um ctrl+c seria algo do genero ->  SendString "String aqui", True, 1

Podes fazer o download do código fonte completo aqui

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradeço desde já o teu exelente exemplo e a tua colaboraçao.

cump.

programadorvb6

se tiveres alguma duvida que te possa ajudar me contacta!

até +

valeu.

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