Pagina 1 di 1

[VB] Simulare pressione ALT

MessaggioInviato: gio lug 08, 2004 9:07 pm
da M@ttia
Salve raga, eccovi un problemin oche mi assilla da un po': In VB ho trovato il modo per simulare "cioè farli premere dal pc) la pressione di tasti sulla tastiera, usando il seguente codice:

Codice: Seleziona tutto
Private Declare Sub keybd_event Lib "user32" ( _
   ByVal bVk As Byte, ByVal bScan As Byte, _
   ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2

Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" ( _
   ByVal cChar As Byte) As Integer
Private Declare Function VkKeyScanW Lib "user32" ( _
   ByVal cChar As Integer) As Integer

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)


Public Sub KeyDown(ByVal vKey As KeyCodeConstants)
   keybd_event vKey, 0, KEYEVENTF_EXTENDEDKEY, 0
End Sub

Public Sub KeyUp(ByVal vKey As KeyCodeConstants)
   keybd_event vKey, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End Sub

Public Function KeyCode(ByVal sChar As String) As KeyCodeConstants
Dim bNt As Boolean
Dim iKeyCode As Integer
Dim b() As Byte
Dim iKey As Integer
Dim vKey As KeyCodeConstants
Dim iShift As ShiftConstants

   ' Determine if we have Unicode support or not:
   bNt = ((GetVersion() And &H80000000) = 0)
   
   ' Get the keyboard scan code for the character:
   If (bNt) Then
      b = sChar
      CopyMemory iKey, b(0), 2
      iKeyCode = VkKeyScanW(iKey)
   Else
      b = StrConv(sChar, vbFromUnicode)
      iKeyCode = VkKeyScan(b(0))
   End If
   
   KeyCode = (iKeyCode And &HFF&)

End Function


Private Sub Command1_Click()
Text1.SetFocus
KeyDown (VBKeyN) '(oppure invece di VBKeyN metto 78) schiaccia e tiene premuto N nella textbox
End Sub



Ora il mio problema: io devo simulare la pressione dei tasti ALT + F4 (x chiudere una finestra): x l'F4 no problem, VBKeyf4 e funziona, il mio problema invece è la pressione dell'alt (che per chiudere una finestra deve essere l'Alt di sinistra...). Sul SITO sono dati tutti i codici (anche maiuscolo, ctrl, tab, ecc...), ma non si parla dell'alt... Provando con la funzione normale di vb form_keydown(keycode as integer, shift as integer) e facendomi dare il keycode, schiacciando l'alt mi restituisce 18, ma poi se lo metto nella funzione x schiacciarlo non me l oschiaccia: qualcuno sa come fare???? Grazie mille! [brindisi] [^]

MessaggioInviato: ven lug 09, 2004 7:43 am
da Robby78
si, il keycode è il 18, ma lo shift che assume valore 4; credo che l'unico modo sia trovare una funzione analoga a quella che usi che ti permetta di passare anche il parametro shift

MessaggioInviato: ven lug 09, 2004 1:54 pm
da M@ttia
Già, ok cercherò grazie [^]

MessaggioInviato: lun lug 12, 2004 12:41 pm
da Robby78
Ciao Mattia, forse ho trovato quello che cercavi...
guarda l'esempio:

Dim ReturnValue, I
ReturnValue = Shell("calc.exe", 1) 'Esegue l'applicazione
AppActivate ReturnValue 'Attiva l'applicazione
SendKeys "%{F4}", True ' Invia ALT+F4

MessaggioInviato: lun lug 12, 2004 5:06 pm
da M@ttia
<blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">citazione:<hr height="1" noshade id="quote"><i>Messaggio inserito da Robby78</i>
<br />Ciao Mattia, forse ho trovato quello che cercavi...
guarda l'esempio:

Dim ReturnValue, I
ReturnValue = Shell("calc.exe", 1) 'Esegue l'applicazione
AppActivate ReturnValue 'Attiva l'applicazione
SendKeys "%{F4}", True ' Invia ALT+F4

<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

YESSSSSSSSS!!!!!! [applauso] Grazie mille, di devo una [brindisi]