Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente bannato
    Registrato dal
    Mar 2007
    Messaggi
    190

    Visual Basic 6.0 {intercettare tastiera}

    Buon giorno a tutti...

    come indicato dal titolo,
    sto cercando di intercettare i tasti digitati dall'utente durante l'esecuzione del codice
    il linguaggio che intendo usare è Visual Basic 6.0.

    ho gia provato con due tipologie di FUNZIONI
    la SendKeys, gia pre compilata in VB e la keybd_event, compilata a "mano".

    se qualcuno conosce il contrario del SendKey, il "GETKEYS" sarebbe meglio
    ma anche come usare il keybd_event per intercettare va bene.

    ESEMPIO DI SENDKEYS
    codice:
    Option Explicit
    Rem creare il CommandButton "command1"
    
    Private Sub Command1_Click()
     Rem INVIA DATI ALLA TASTIERA
    
     Command1.Caption = "interrompi"
     Dim ReturnValue, I
     ReturnValue = Shell("notepad.exe", 1)   ' Esegue iln ote.
     SendKeys " » ATTENDERE IL 255 « " & "{ENTER}", True ' Invia sequenze di tasti
      For I = 1 To 255   ' Imposta il ciclo di conteggio.
      TEMPOSEC (0.3)
       SendKeys I & "; ", True   ' Invia Indice nel Note.
        If (I Mod 20) = 0 Then
         Rem inserishi INVIO nei comandi vbKeyReturn
         SendKeys "{ENTER}", True   ' Invia Invio per tabulzione))
        End If
      Next I   ' ciascun valore di I.
     SendKeys "{ENTER}" & " » completato «" 'operazione completata
     TEMPOSEC (1)
     SendKeys "%{F4}", True   ' Invia ALT+F4 per uscire dalla Calcolatrice.
     TEMPOSEC (1)
     SendKeys "{N}", True   ' Invia N di NO per salvate.
     Command1.Caption = "completato"
     Rem chiudi operazione
     TEMPOSEC (1)
     End
    End Sub
    ESEMPIO DI keybd_event
    codice:
    Option Explicit
    Rem creare il CommandButton "command1"
    Rem creare la ListBox "list1"
    Rem creare il Timer "timer1"
    
    Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    
    Private Sub Command1_Click()
     Rem INVIA DATI ALLA TASTIERA
     Const KEYEVENTF_EXTENDEDKEY = &H1
     Const KEYEVENTF_KEYUP = &H2
     Command1.Caption = "interrompi"
     Dim ReturnValue, I
     ReturnValue = Shell("notepad.exe", 1)   ' Esegue il note.
     keybd_event Asc(" "), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc("A"), 0, 1, 0     '  Invia sequenze di tasti
     keybd_event Asc("T"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("T"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("T"), 0, 0, 0     '  Invia sequenze di tasti
     keybd_event Asc("T"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("E"), 0, 1, 0     '  Invia sequenze di tasti
     keybd_event Asc("N"), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc("D"), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc("I"), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc("I"), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc("L"), 0, 1, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("1"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("1"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("0"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("0"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 2, 0    '  Invia sequenze di tasti
     For I = 0 To 9   ' Imposta il ciclo di conteggio.
      TEMPOSEC (0.3)
      keybd_event Asc(I), 0, 0, 0    '  Invia sequenze di tasti
      keybd_event Asc(I), 0, 2, 0    '  Invia sequenze di tasti
      keybd_event Asc(" "), 0, 1, 0    '  Invia sequenze di tasti
     Next I   ' ciascun valore di I.
     keybd_event Asc(" "), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("F"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("F"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("I"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("I"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("N"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("N"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("I"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("I"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("T"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("T"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc("O"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("O"), 0, 2, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc(" "), 0, 2, 0    '  Invia sequenze di tasti
     TEMPOSEC (1)
     keybd_event vbKeyMenu, 0, 0, 0    '  Invia sequenze di tasti
     keybd_event vbKeyF4, 0, 0, 0    '  Invia sequenze di tasti
     keybd_event vbKeyF4, 0, 2, 0    '  Invia sequenze di tasti
     keybd_event vbKeyMenu, 0, 2, 0    '  Invia sequenze di tasti
     TEMPOSEC (1)
     keybd_event Asc("N"), 0, 0, 0    '  Invia sequenze di tasti
     keybd_event Asc("N"), 0, 2, 0    '  Invia sequenze di tasti
     Command1.Caption = "completato"
     Rem chiudi operazione
     TEMPOSEC (1)
    End
    End Sub
    
    Private Sub List1_Click()
     Rem RICEVI DATI DALLA TASTIERA
     Rem avvia o termina la ricerca dei dati
     Timer1.Interval = 250
     Timer1.Enabled = Not Timer1.Enabled
     If Timer1.Enabled = True Then
      Rem operazione all'inizio dell'attesa
      Beep
      List1.Clear 
      List1.AddItem "avviato", 0
      List1.AddItem "", 0
     Else
      Rem operazione termine dell'attesa
      Beep
      List1.AddItem "» FINE «", 0
     End If
    End Sub
    
    Private Sub Timer1_Timer() ' {█ area importante █}
     Rem RICERCA DATI DALLA TASTIERA
     Dim UN, DU, TR, QU
     keybd_event UN, DU, TR, QU
     List1.AddItem UN + " ; " + DU + " ; " + TR + " ; " + QU + " ; "
    End Sub  {█ area importante █}
    
    Private Sub TEMPOSEC(MaXSeC As Double)
     'temporizzazione calcolo
     Dim PauseTime, Start, Finish, TotalTime
     PauseTime = MaXSeC  ' Imposta la durata.
     Start = Timer   ' Imposta l'ora di inizio.
     Do While Timer < Start + PauseTime
     DoEvents      ' Passa il controllo ad altri processi.
     Loop
     Finish = Timer   ' Imposta l'ora di fine della pausa.
     TotalTime = Finish - Start   ' Calcola il tempo totale.
     Form1.Caption = Form1.Caption + " -> " + (CurDir("")) 'restituzione directory iniziale
    End Sub
    Grazie ancora per la pazienza

  2. #2
    provare con l'evento keypressed?
    ChromeOS.eu tutto su Chrome OS!
    HTML5 Answer Il 3D nel browser è arrivato! Sviluppa la tua app 3D per il browser!

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    1) a parte il fatto che non capisco il senso di questa frase:

    la SendKeys, gia pre compilata in VB e la keybd_event, compilata a "mano"
    dato che i termini pre-compilato e compilata a "mano" non hanno alcun senso...


    2) per intercettare la tastiera SendKeys non serve a niente , dato che fa l'esatto contrario.


    3) se vuoi intercettare tutti i tasti devi usare l'evento KeyDown che prevede anche l'intercettazione delle combinazioni di tasti con Alt,Control e Shift(Maiuscolo), il KeyPress non è sufficiente perchè non intercetta tutti i tasti (leggere la guida per l'elenco dei tasti intercettabili).

    Ma l'intercettazione si limita solamente al form corrente (se KeyPreview=True) oppure al singolo controllo.

    Nel caso tu voglia intercettare tutti i tasti premuti, ovvero di tutte le applicazioni, allora si rende necessario utilizzare un 'hook di sistema', cosa non proprio facile da realizzare perchè prevede l'uso della tecnica del subclassing, che richiede conoscenze approfondite sui meccanismi dei messaggi di Windows e relative funzioni.
    Se non si hanno già conoscenze in tal senso, lo sconsiglio caldamente, a meno che non sia una questione di estrema importanza, in questo caso bisogna armarsi di molta pazienza, grande studio e preparasi a 'crash a go-go'

    VB 6.0 non è il linguaggio adatto, qualcuno c'ha provato:
    http://www.planetsourcecode.com/vb/s...13506&lngWId=1
    ma dai commenti sembra che il risultato sia davvero deludente.

    Comunque, in linea generale , una operazione del genere eseguita con le policy dei sistemi operativi odierni (Vista e 7), verrebbe considerata come codice malevolo e bloccata automaticamente dal sistema se l'utente non ha un account con i permessi (e per default non li ha!)
    Per i vecchi sistemi operativi ci pensano gli antivirus seri che già di default bloccano questo tipo di operazione. L'utente deve configurare il proprio antivirus (o altro programma di sicurezza) per abilitarla.


  4. #4
    Utente bannato
    Registrato dal
    Mar 2007
    Messaggi
    190
    Scusate ragazzi NON sono stato chiaro sulla richiesta
    NON ho espesso CHIARAMANTE il punto cruciale.

    IO riesco, tramite i DUE codice di esempio, a simulare la Digitazione di un utente
    senza che sia presente una FORM, e anche su Applicazione NON mie.

    Ma sono alla ricerca del CONTRARIO,
    cioè a Inteccettare i Tasti che vengono premuti sulla tastiera,
    senza che ci sia una MIA FORM selezionata.

    caro morocarlo
    il comando "keypressed" funziona SOLO su un Oggetto della FORM
    MA io ho bisogno che intercetti anche su programmi NON miei.

    grande gibra
    di fatti il comando "SendKeys" invia i dati al Buffer.
    Ho bisogno, per questo comando, del CONTRARIO il "GETKEYS"
    che Legge i dati nel Buffer. Come specificato in ROSSO.

    il comando "KeyDown" come il comando "KeyPressed" valgono SOLO per la FORM

    VB 6.0 non è il linguaggio adatto, non è vero, solo molto difficile...
    L'ho visto FUNZIONARE in VB6, era un Timer con un controllo che NON conosco NE ricordo.

    Se fosse vera la Policy della Microsoft, non permetterebbe neanche l'uso del SendKeys
    che è piu dannoso del "GETKEYS" uno invia i comandi l'altro si limita ad intercettali.

    Comunque in VisualBasic 6.0, potete COPIARE uno dei codici d'esempio
    e incollarlo in un Progetto Vuoto e Provarlo.

  5. #5
    http://www.google.it/search?hl=it&cl...=&oq=&gs_rfai=

    http://www.hwupgrade.it/forum/archiv...t-1264909.html

    p.s. scrivi in nero con con il multicolor non si capisce niente.... e ricorda che google non morde!
    ChromeOS.eu tutto su Chrome OS!
    HTML5 Answer Il 3D nel browser è arrivato! Sviluppa la tua app 3D per il browser!

  6. #6
    Utente di HTML.it L'avatar di Pista
    Registrato dal
    May 2009
    Messaggi
    28

    Keylogger

    Se è un keylogger quello che cerchi:

    1) Vuoi un keylogger belleffatto? Chiedi a zio Google: keylogger
    2) Vuoi fartelo da solo, per capire le problematiche correlate allo sviluppo di un'applicazione tanto complessa ? Chiedi a zio Google: keylogger vb6

    Ciauz

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da tuono_2000
    grande gibra
    di fatti il comando "SendKeys" invia i dati al Buffer.
    Ho bisogno, per questo comando, del CONTRARIO il "GETKEYS"
    che Legge i dati nel Buffer. Come specificato in ROSSO.
    L'avevamo capito. Non serve che lo riscrivi.

    Originariamente inviato da tuono_2000
    il comando "KeyDown" come il comando "KeyPressed" valgono SOLO per la FORM
    si chiamano EVENTI, non comandi, e KeyPressed non esiste, si chiama KeyPress.

    Originariamente inviato da tuono_2000
    Se fosse vera la Policy della Microsoft, non permetterebbe neanche l'uso del SendKeys
    che è piu dannoso del "GETKEYS" uno invia i comandi l'altro si limita ad intercettali.
    Hai letto male quello che ho scritto e/o le tue informazioni sono sbagliate.
    La policy è verissima, tant'è che ci sono miriadi di post in giro per i forum tecnici che lamentano della SendKeys che non funziona più su Vista e Seven e dipende anche dall'impostazione dell'account. Si deve sostituire SendKeys con la SendInput() come spiega Karl Peterson (che non è mica l'ultimo del carro) qui
    http://vb.mvps.org/samples/SendInput/


  8. #8
    Utente bannato
    Registrato dal
    Mar 2007
    Messaggi
    190
    grazie ragazzi per le informazioni, non mi aspettavo niente di meno

    sopratutto a morocarlo
    il comando per Intercetta Tastiera GetAsyncKeyState è quello che cercavo, +o-

    questo è quello che ho realizzato GetAsyncKeyState

    codice:
    Rem FORM1 ¦------------------------------------------
    
    Option Explicit
    Rem CheckBox "check1"
    Rem ListBox "List1"
    Rem Timer "Timer1"
    
    Rem dichiarazione libreai abbinata
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    
    Private Sub Check1_Click()
    Rem attiva e disattiva intercettazione
    Timer1.Interval = 100 'controllo ravvicinato
    If Check1.Value = 1 Then
    Rem cancella lista e inizializza
    List1.Clear
    List1.AddItem "inizio", 0
    Timer1.Enabled = True ' attiva controllo
    Else
    Rem termina lista
    List1.AddItem "fine", 0
    Timer1.Enabled = False ' disattiva controllo
    End If
    End Sub
    
    Private Sub Timer1_Timer()
    Rem ricerca tasto premuto
    Dim I As Integer
    Rem Costanti dei codici dei tasti  vbKeyA
    Rem ricerca TASTI speciali Tastiera (Tasto BACKSPACE ~ Tasto della Guida)
    For I = 8 To 47 Step 1
    If GetAsyncKeyState(I) Then ' intercettazione tasto
    List1.AddItem "SPEC " + Str(I), 0 'visualizza tasto premuto
    End If
    Next I
    Rem ricerca TASTI standard Tastiera (Tasto 0 ~ Tasto Z)
    For I = 48 To 90 Step 1
    If GetAsyncKeyState(I) Then ' intercettazione tasto
    List1.AddItem "STAN " + Str(I), 0 'visualizza tasto premuto
    End If
    Next I
    Rem ricerca TASTI NumPed Tastiera (Tasto Num0 ~ Tasto Num/)
    For I = 96 To 111 Step 1
    If GetAsyncKeyState(I) Then ' intercettazione tasto
    List1.AddItem "NumP " + Str(I), 0 'visualizza tasto premuto
    End If
    Next I
    Rem ricerca TASTI Funzione Tastiera (Tasto F1 ~ Tasto F12/)
    For I = 112 To 127 Step 1
    If GetAsyncKeyState(I) Then ' intercettazione tasto
    List1.AddItem "Funz " + Str(I), 0 'visualizza tasto premuto
    End If
    Next I
    End Sub
    grazie anche a te gibra
    ma ultilizzare il UnhookWindowsHookEx da grossi problemi in Ripristino.

    comunque questo è un esempio d'uso.

    codice:
    Rem Form1 ¦------------------------------------------------------
    
    Option Explicit
    Rem CheckBox "check1"
    Rem ListBox "List1"
    
    Private Sub Check1_Click()
    Rem attiva o disattiva intercettazione
    If Check1.Value = 1 Then
    Rem attivata intercettazione
    hook = SetWindowsHookEx(13, AddressOf myfunc, App.hInstance, 0)
    List1.Clear
    List1.AddItem "inizio", 0
    Else
    Rem disattivata intercettazione
    UnhookWindowsHookEx hook
    List1.AddItem "fine", 0
    End If
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    Rem chiusura programma
    UnhookWindowsHookEx hook
    End
    End Sub
    
    Rem Module ¦-----------------------------------------------------
    
    Rem dichiarazioni Librerie abbinate
    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 Declare Function SetWindowsHook Lib "user32" Alias "SetWindowsHookA" (ByVal nFilterType As Long, ByVal pfnFilterProc As Long) As Long
    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 Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Rem dichiarazione variabile Ambiantale
    Public hook As Long
    Rem dichiarazione tipologia ambientale
    Type HookStruct
        vkCode As Long
        scancode As Long
        flags As Long
        time As Long
        dwExtraInfo As Long
    End Type
    
    Rem funzione d'intercettazione tastiera
    Public Function myfunc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim kybd As HookStruct
        myfunc = True
        If code = 0 And wParam <> 257 Then
            CopyMemory kybd, ByVal lParam, Len(kybd)
            Form1.List1.AddItem Str(kybd.vkCode) + " " + Chr(kybd.vkCode), 0
            myfunc = CallNextHookEx(hook, code, wParam, lParam)
        ElseIf code < 0 Then
            myfunc = CallNextHookEx(hook, code, wParam, lParam)
        End If
    End Function
    grazie ancora... CHIUDO

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Evidentemente c'è un malinteso.

    Tu hai scritto:
    caro morocarlo
    il comando "keypressed" funziona SOLO su un Oggetto della FORM
    MA io ho bisogno che intercetti anche su programmi NON miei.
    Se leggi la guida di GetAsyncKeyState, troverai che:

    Return Values
    If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. The return value is zero if a window in another thread or process currently has the keyboard focus.

    Quindi, come ho già detto, per fare quello che chiedi devi usare un hook di sistema .

    GetAsyncKeyState non ti serve a niente perchè intercetta SOLO i tasti della TUA applicazione.


  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    GetAsyncKeyState funziona benissimo anche se l'applicazione/Form non ha il focus o addirittura se la tua applicazione è invisibile! (almeno con vb.net)
    Sbagliare è umano, perseverare è diabolico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.