CANCELAMENTO DE TECLA F2

XAVIER 03/09/2012 10:57:00
#409080
Olá pessoal!
Estou precisando saber como que eu iniboo uso da tecla F2 pelo usuário. Ou seja, eu abro um sistema gráfico no vb6, porém somente o ambiente gráfico.
A tecla F2 é um comando implícito deste ambiente gráfico que é externo. então o que acontece quando carrego este ambiente gráfico e pressiono a tecla F2 ? Ele me lança para a frente todo o sistema gráficó e é isto que não quero que aconteça. Será que é possível inibir a tecla F2, mesmo sendo um comando nativo deste ou outro programa qualquer ?

Os únicos eventos deste componente são:
DragDrop;
DragOver;
GotFocus;
LostFocus;
Validate.

Melhor dizendo: Ao carregar o form, se puder cancelar a tecla F2 fá está de bom tamanho.

Abraço a todos.
MARCELO.TREZE 03/09/2012 11:45:16
#409083
Resposta escolhida
basta você inibir no evento keypress do form
XAVIER 03/09/2012 12:05:08
#409084
E via windows TREZE, ao carregar a aplicação ?
XAVIER 03/09/2012 12:10:00
#409085
Estou usando desta forma e ainda assim a tecla F2 chama o comando.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF2 Then
KeyAscii = 0
End Sub

ou

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyCode = vbKeyF2 Then
KeyAscii = 0
End Sub

MARCELO.TREZE 03/09/2012 12:13:26
#409086
a propriedade keypreview do form tem que ser true

XAVIER 03/09/2012 12:30:33
#409087
Mesmo assim ainda não funciona !

Pelo windows talvés resolva, não ?

Ao carregar a aplicação.
MARCELO.TREZE 03/09/2012 12:48:16
#409088
propriedade keypreview = true e o seguinte codigo


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 113 Then
KeyCode = 0
End If
End Sub



lembrando que o form tem que estar com o foco
XAVIER 03/09/2012 12:57:31
#409089
Beleza TREZE. Vou testar aquí.
Obrigadão!
XAVIER 08/09/2012 11:06:15
#409298
Olá pessoal !

Eu encontei esse código aquí. E para evitar problemas na configuração da minha máquina a minha pergunta é: será que bastaria colocar somente o codigo da tecla F2 ?

Onde devo implementar o código?

Desde já obrigadão.


Eis o código:

[ô]Desabilita Crtl-Esc+Alt-Tab+Alt-Esc- Windows Xp/2000 *

[ô]Coloca isso em um módulo
Option Explicit
Public Declare Sub CopyMemory Lib [Ô]kernel32[Ô] Alias [Ô]RtlMoveMemory[Ô] (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function GetKeyState Lib [Ô]user32[Ô] (ByVal nVirtKey As Long) As Integer
Public Declare Function SetWindowsHookEx Lib [Ô]user32[Ô] Alias [Ô]SetWindowsHookExA[Ô] (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib [Ô]user32[Ô] (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function UnhookWindowsHookEx Lib [Ô]user32[Ô] (ByVal hHook As Long) As Long
Public Const HC_ACTION = 0
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Public Const VK_TAB = &H9
Public Const VK_ESCAPE = &H1B
Public Const VK_SHIFT = &H10 [ô]Tecla SHIFT
Public Const VK_CONTROL = &H11 [ô]Tecla CTRL
Public Const VK_MENU = &H12 [ô]Tecla ALT
Public Const VK_LWIN = &H5B
Public Const VK_RWIN = &H5C
Public Const VK_APPS = &H5D
Public Const WH_KEYBOARD_LL = 13
Public Const LLKHF_ALTDOWN = &H20
Public Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type
Dim p As KBDLLHOOKSTRUCT
Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim fEatKeystroke As Boolean

If (nCode = HC_ACTION) Then
If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Or wParam = WM_KEYUP Or wParam = WM_SYSKEYUP Then
CopyMemory p, ByVal lParam, Len(p)
fEatKeystroke = _
p.vkCode = VK_LWIN Or _
p.vkCode = VK_RWIN Or _
p.vkCode = VK_APPS Or _
p.vkCode = VK_CONTROL Or _
p.vkCode = VK_SHIFT Or _
p.vkCode = VK_MENU Or _
((GetKeyState(VK_CONTROL) And &H8000) <> 0) Or _
((p.flags And LLKHF_ALTDOWN) <> 0)
End If
End If

If fEatKeystroke Then
LowLevelKeyboardProc = -1
Else
LowLevelKeyboardProc = CallNextHookEx(0, nCode, wParam, ByVal lParam)
End If
End Function

[ô]Para Usar no seu formulário ou no botão
[ô]
[ô]Desabilita Crtl-Esc+Alt-Tab+Alt-Esc

Option Explicit
Dim hhkLowLevelKybd As Long
Private Sub ChkDesabilita_Click()
If ChkDesabilita = vbChecked Then
hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
Else
UnhookWindowsHookEx hhkLowLevelKybd
hhkLowLevelKybd = 0
End If
End Sub
[ô]Quando vc sair da sua proteção de tela
[ô]
Private Sub Form_Unload(Cancel As Integer)
If hhkLowLevelKybd <> 0 Then UnhookWindowsHookEx hhkLowLevelKybd
End Sub

Tópico encerrado , respostas não são mais permitidas