COMO CORRIGIR O RUN-TIME ERROR 70 DO VB NO WIN7?
Mudei minha versão do windows xp para o 7 e agora está dando esse erro quando estou programando. O executavel roda sem problemas.
Essa é a parte que dá erro:
If KeyAscii = vbKeyReturn Then
SendKeys ([Ô]{TAB}[Ô])
SendKeys [Ô]{Home}+{End}[Ô]
KeyAscii = 0
End If
O erro está ligado ao comando SendKeys. Já procurei no forum e não achei nenhum comentário sobre esse erro.
Alguém poderia ajudar ?
Agradeço desde já!
Essa é a parte que dá erro:
If KeyAscii = vbKeyReturn Then
SendKeys ([Ô]{TAB}[Ô])
SendKeys [Ô]{Home}+{End}[Ô]
KeyAscii = 0
End If
O erro está ligado ao comando SendKeys. Já procurei no forum e não achei nenhum comentário sobre esse erro.
Alguém poderia ajudar ?
Agradeço desde já!
você instalou o sp6 do visual basic
KNILSSON,
O velho truque do UAC habilitado...
Veja isto:
http://blogs.msdn.com/b/luisdem/archive/2012/04/15/compatibilidade-de-aplica-231-245-es-visual-basic-6-0-no-windows-7.aspx
================================================
2. Permissão Negada
No Windows 7, o uso do método SendKeys gera o erro “Run-tine error [ô]70[ô]: Permission denied†quando o UAC está habilitado. A Figura 3 exibe um DUMP coletado, para uma das aplicações diagnosticadas, no momento em que o erro ocorre. Através do DUMP é possÃvel verificar que o erro ocorreu devido ao uso da função SendKeys:
Existem algumas soluções para esse corrigir esse problema sem a necessidade de executar a aplicação com privilégio elevado ou desativar o UAC. Sendo algumas delas:
• Recompilar a aplicação VB6 no Windows 7. Esse problema de incompatibilidade foi corrigido na última versão do runtime do VB6 (MSVBVM60.DLL) que agora utiliza um método interno diferente para realizar a ação. Essa solução corrige o problema de acesso negado do código compilado, entretanto, não elimina o erro durante o debug do código através da IDE do VB6.
• Substituir o SendKeys pela API PostMessage, conforme:
================================================
[][ô]s,
Tunusat.
O velho truque do UAC habilitado...
Veja isto:
http://blogs.msdn.com/b/luisdem/archive/2012/04/15/compatibilidade-de-aplica-231-245-es-visual-basic-6-0-no-windows-7.aspx
================================================
2. Permissão Negada
No Windows 7, o uso do método SendKeys gera o erro “Run-tine error [ô]70[ô]: Permission denied†quando o UAC está habilitado. A Figura 3 exibe um DUMP coletado, para uma das aplicações diagnosticadas, no momento em que o erro ocorre. Através do DUMP é possÃvel verificar que o erro ocorreu devido ao uso da função SendKeys:
Existem algumas soluções para esse corrigir esse problema sem a necessidade de executar a aplicação com privilégio elevado ou desativar o UAC. Sendo algumas delas:
• Recompilar a aplicação VB6 no Windows 7. Esse problema de incompatibilidade foi corrigido na última versão do runtime do VB6 (MSVBVM60.DLL) que agora utiliza um método interno diferente para realizar a ação. Essa solução corrige o problema de acesso negado do código compilado, entretanto, não elimina o erro durante o debug do código através da IDE do VB6.
• Substituir o SendKeys pela API PostMessage, conforme:
Public Declare Function PostMessage Lib [Ô]user32[Ô] Alias [Ô]PostMessageA[Ô] (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys [Ô]{tab}[Ô] [ô]13 = Enter Key
PostMessage hwnd, &H100, &HD&, &H1C0001
End If
End Sub
================================================
[][ô]s,
Tunusat.
Eu ja instalei o SP6 e não resolveu nada[Ô]
TUNUSAT,
eu vi essa explicação no blog, mas não funcionou ou eu fiz alguma coisa errada. Podia explicar de outra forma ?
eu vi essa explicação no blog, mas não funcionou ou eu fiz alguma coisa errada. Podia explicar de outra forma ?
Tente isto:
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
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeysA vbKeyTab, True
KeyAscii = 0
End If
End Sub
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
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeysA vbKeyTab, True
KeyAscii = 0
End If
End Sub
SIRIUS,
beleza, funcionou certinho. Pena que eu vou ter incluir essa rotina em todos os meus sistemas para parar com esse erro. Mas tá otimo. Vou deixar o tópico aberto mais um tempo para ver se alguem tem outra ideia. Se não aparecer nada eu fecho o tópico e indico sua resposta.
Obrigado!
beleza, funcionou certinho. Pena que eu vou ter incluir essa rotina em todos os meus sistemas para parar com esse erro. Mas tá otimo. Vou deixar o tópico aberto mais um tempo para ver se alguem tem outra ideia. Se não aparecer nada eu fecho o tópico e indico sua resposta.
Obrigado!
KNILSSON,
A [Ô]PostMessage[Ô] é uma API ... A API faz acesso direto a biblioteca de comandos.
Neste caso você substituiria seus [Ô]SendKeys[Ô] por ela.
Bom ... eu ia montar um exemplo, mas acho que não precisa, pois veja esta dica aqui no VBMania:
EVITANDO O METODO SENDKEYS
http://www.vbmania.com.br/index.php?modulo=detalhe&id=6690
Acima, o método SendKeys foi substituÃdo por uma função [Ô]PostMessage[Ô].
Veja também:
SENDKEYS NO WINDOWS VISTA
http://www.vbmania.com.br/index.php?modulo=detalhe&id=8334
SENDKEYS PARA WIN 2000
http://www.vbmania.com.br/index.php?modulo=detalhe&id=694
VB6 SendKeys() permission denied error
http://stackoverflow.com/questions/2307738/vb6-sendkeys-permission-denied-error
Pode apostar que vai dar problema no Windows 8...
====================================================
Bom ... vamos falar um pouco sobre UAC ... já tem muita coisa aqui no fórum também.
Ativar ou desativar o Controle da Conta de Usuário
http://windows.microsoft.com/pt-br/windows/turn-user-account-control-on-off
O Controle da Conta de Usuário (UAC) pode ajudar a impedir alterações não autorizadas no seu computador. O UAC o notificará quando forem feitas alterações no computador que exijam permissão em nÃvel de administrador. Esses tipos de alterações podem afetar a segurança do computador ou podem afetar as configurações de outras pessoas que usam o computador. Recomendamos manter o UAC ativo para ajudar a proteger o computador.
====================================
Você pode mandar seu programa desativar UAC e depois ao sair ativar de novo.
Veja isto:
How do I integrate UAC into my VB6 program?
http://stackoverflow.com/questions/4754093/how-do-i-integrate-uac-into-my-vb6-program
[VB6] Disable UAC
http://www.ic0de.org/archive/index.php/t-9055.html
====================================
[][ô]s,
Tunusat.
A [Ô]PostMessage[Ô] é uma API ... A API faz acesso direto a biblioteca de comandos.
Neste caso você substituiria seus [Ô]SendKeys[Ô] por ela.
Bom ... eu ia montar um exemplo, mas acho que não precisa, pois veja esta dica aqui no VBMania:
EVITANDO O METODO SENDKEYS
http://www.vbmania.com.br/index.php?modulo=detalhe&id=6690
Acima, o método SendKeys foi substituÃdo por uma função [Ô]PostMessage[Ô].
Veja também:
SENDKEYS NO WINDOWS VISTA
http://www.vbmania.com.br/index.php?modulo=detalhe&id=8334
SENDKEYS PARA WIN 2000
http://www.vbmania.com.br/index.php?modulo=detalhe&id=694
VB6 SendKeys() permission denied error
http://stackoverflow.com/questions/2307738/vb6-sendkeys-permission-denied-error
Pode apostar que vai dar problema no Windows 8...
====================================================
Bom ... vamos falar um pouco sobre UAC ... já tem muita coisa aqui no fórum também.
Ativar ou desativar o Controle da Conta de Usuário
http://windows.microsoft.com/pt-br/windows/turn-user-account-control-on-off
O Controle da Conta de Usuário (UAC) pode ajudar a impedir alterações não autorizadas no seu computador. O UAC o notificará quando forem feitas alterações no computador que exijam permissão em nÃvel de administrador. Esses tipos de alterações podem afetar a segurança do computador ou podem afetar as configurações de outras pessoas que usam o computador. Recomendamos manter o UAC ativo para ajudar a proteger o computador.
====================================
Você pode mandar seu programa desativar UAC e depois ao sair ativar de novo.
Veja isto:
How do I integrate UAC into my VB6 program?
http://stackoverflow.com/questions/4754093/how-do-i-integrate-uac-into-my-vb6-program
[VB6] Disable UAC
http://www.ic0de.org/archive/index.php/t-9055.html
====================================
[][ô]s,
Tunusat.
Para quem está tendo problemas com esse comando, vai uma dica para windows 8 [Ô]tive o mesmo problema[Ô]
Cole isso em um módulo e será resolvido
Public Sub Sendkeys(text$, Optional wait As Boolean = False)
Dim WshShell As Object
Set WshShell = CreateObject([Ô]wscript.shell[Ô])
WshShell.Sendkeys text, wait
Set WshShell = Nothing
End Sub
Cole isso em um módulo e será resolvido
Public Sub Sendkeys(text$, Optional wait As Boolean = False)
Dim WshShell As Object
Set WshShell = CreateObject([Ô]wscript.shell[Ô])
WshShell.Sendkeys text, wait
Set WshShell = Nothing
End Sub
Tópico encerrado , respostas não são mais permitidas