1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB6 - SendKeys Windows Vista

Discussão em 'Programação' iniciada por Yokozuna, 19 de Fevereiro de 2008. (Respostas: 5; Visualizações: 3095)

  1. Yokozuna

    Yokozuna Power Member

    Boas,

    O SendKeys no VB6 provoca "RUNTIME ERROR 70 - Permission Denied" no Windows Vista (Ultimate neste caso).

    Como é que eu posso dar a volta. Parece-me tão simples que não estou a ver nada... Bem, ainda não domino nada o VB (quanto mais o 6, lol).

    Código:

    Código:
    Private Sub Form_Load()
    Dim n As Long
    Dim Documento As String
    Dim Tamanho As Long
    
    Open "c:\fotosP\caminho.txt" For Input As #1
    Line Input #1, Documento
    Close #1
    
    Tamanho = Len(Documento)
    
    Key
    
    SendKeys Mid$(Documento, 2, Tamanho - 2), False
    SendKeys "{enter}", False
    
    For n = 1 To 5000
        DoEvents
    Next n
    
    End
    
    End Sub
     
  2. Armadillo

    Armadillo Folding Member

    senkeys nao é suportado pelo winVista, Para fazeres isso, teras que usar a API do windows

    coloca isto num modulo
    Código:
    Option Explicit
    
    Private Const KEYEVENTF_KEYUP = &H2
    Private Const INPUT_KEYBOARD = 1
    
    Private Type KEYBDINPUT
    wVk As Integer
    wScan As Integer
    dwFlags As Long
    time As Long
    dwExtraInfo As Long
    End Type
    
    Private Type GENERALINPUT
    dwType As Long
    xi(0 To 23) As Byte
    End Type
    
    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)
    
    Public Function SendKeysA(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 Function
    
    
    Metodo de utilização da funcao SendKeysA

    Código:
    Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
       SendKeysA vbKeyTab, True
       KeyAscii = 0
    End If
    End Sub
    
    cumpz
     
  3. Yokozuna

    Yokozuna Power Member

    Ok, vou experimentar, thx...

    Mas, estive a ver uma cena muito gira.

    O que se passa é que este programa já existia e agora estive a experimentar no Vista, estão a ver se os programas funcionam no Vista na minha empresa, e o executável funciona bem. O debug é que dá o erro...
     
  4. Armadillo

    Armadillo Folding Member

    eles ja testaram na parte em que tem o sendkeys? é que, pelo que eu percebi, o sendkeys nao funciona em Vista
     
  5. Yokozuna

    Yokozuna Power Member

    Yup, já executaram mas eu se calhar expliquei-me mal.

    O debug dá erro e o executável também dá quando é chamado pela aplicação principal. Mas quando se corre só o executável funciona bem. Quer dizer, pelo menos não dá erro e executa o pedido.
     
  6. PJTuga

    PJTuga Power Member

    talvez não dê erro por ja estar compilado e em linguagem máquina!
     

Partilhar esta Página