Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Passare valori a Windows?

    Avrei bisogno di una delucidazione.

    Ho un programma che registra delle specie di macro di windows (in pratica una serie di movimenti del mouse e click) e le associa a combinazioni di tasti. Fin qui tutto funziona: premo la mia combinazione (ad es. CTRL+B) e l'evento prestabilito accade.

    Il mio problema ora è che vorrei fare in modo che questo succedesse anche quando non ci sono. Esiste un modo di passare a windows una combinazione di tasti? Io riesco solo a simulare la tastiera all'interno di un programma.
    Mi hanno detto che probabilmente con delle API si potrebbe fare.

    Lo scopo finale per me è creare un programmino che giri in background e ad orari prestabiliti passi a win (o all'altro programma) la combinazione di tasti precedentemente impostata.

    Non so se sono stato chiaro... spero di sì. Grazie.
    Horus

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    (Tratto da una guida che ho trovato):
    Simulare la pressione dei tasti

    Per simulare la pressione dei pulsanti della tastiera è necessario usare la seguente dichiarazione API:

    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

    con le seguenti costanti:

    Const KEYEVENTF_EXTENDEDKEY = &H1 'pressione del tasto (keyDown)
    Const KEYEVENTF_KEYUP = &H2 'rilascio del tasto premuto (keyUp)


    La funzione keybd_event utilizza come argomenti il codice virtuale del tasto da “premere e/o rilasciare” (bVk), il codice di scansione del tasto (bScan), un flag per indicare se il tasto deve essere premuto o rilasciato (dwFlags) e, per ultimo, eventuali informazioni opzionali (dwExtraInfo) non usate dal Visual Basic.

    L’esempio di codice seguente mostra come utilizzare la funzione keybd_event per scrivere “API”, simulando la pressione dei tasti della tastiera, in una textbox:

    Sub ScriviText()

    Text1.SetFocus
    keybd_event vbKeyA, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "A"
    keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "A"

    keybd_event vbKeyP, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "P"

    keybd_event vbKeyP, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "P"

    keybd_event vbKeyI, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "I"
    keybd_event vbKeyI, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "I"

    End Sub

    Allo stesso modo è possibile cambiare lo stato del tasto “CapsLock”

    Sub InvertiCapsLock()

    keybd_event vbKeyCapital, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "CapsLock"

    keybd_event vbKeyCapital, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "CapsLock"

    End Sub

    Essendo il tasto CapsLock, al pari dei tasti NumLok e ScrollLock, un tasto “interruttore”, la sub InvertiCapsLock ne inverte la posizione. Per determinare anticipatamente lo stato di questi tasti è possibile usare la funzione GetKeyState

    In questo ultimo esempio, invece, viene descritto come simulare un “PrintScreen” in modo da copiare in memoria (clipboard) l’intero contenuto dello schermo o della sola finestra attiva:

    Sub PrintScreen()

    'copia nella clipboard l'intero contenuto dello schermo
    keybd_event vbKeySnapshot, 1, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del tasto "Stamp" o "Print"
    keybd_event vbKeySnapshot, 1, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "Stamp" o "Print"

    ‘istruzioni da utilizzare in alternativa alle precedenti

    'copia nella clipboard il solo contenuto della finestra attiva

    keybd_event vbKeySnapshot, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione dei tasti "Alt" +"Stamp" o "Print"
    keybd_event vbKeySnapshot, 1, KEYEVENTF_KEYUP, 0 'simula il rilascio dei tasti "Alt" +"Stamp" o "Print"

    End Sub


    ricordarsi sempre di usare, dopo la prima chiamata alla funzione con l’argomento bScan = KEYEVENTF_EXTENDEDKEY (premi tasto), una seconda chiamata alla funzione con l’argomento bScan = KEYEVENTF_KEYUP (rilascia tasto) altrimenti la tastiera si trova nelle condizioni di simulare continuamente la pressione del tasto.

    consultare la guida in linea di Visual Basic alla voce “tasti, costanti” per avere la lista completa dei codici virtuali dei tasti.

  3. #3
    Sì, grazie, questo già lo avevo fatto, il problema è che seguendo questo metodo io scrivo in una textbox, secondo te è possibile fare la stessa cosa ma passando gli eventi al sistema operativo?
    Horus

  4. #4
    Horus ho il tuo stesso problema.
    Ho l'urgenza di fare una tastiera virtuale che si interfacci con notepad, IE...insomma per tutte le finestre attive.

    Se vuoi ho trovato i sorgenti di una tastiera virtuale in VC++ m in VB6 nada

    Se scopro qualcosa ti faccio sapere
    Se la vita ti sorride vuol dire che ha una paresi

  5. #5
    Allora, io alla fine ho scoperto che il codice di iguana13 andava benissimo per le mie necessità.

    I sorgenti che hai trovato però mandameli lo stesso, mi interessa vedere come è stato risolto in C++ (webmaster@aibsusa.it).

    Grazie.
    Horus

  6. #6
    nel senso che va bene per qualsiasi finestra attiva di win e non è solo visibile all'interno di vb6?

    Sto inviando
    Se la vita ti sorride vuol dire che ha una paresi

  7. #7
    L'esempio di iguana13 funziona benissimo all'interno di Vb6 (usando una textbox) sei riuscito a farlo funzionare anche finestre attive di win (notepad, IE ecc?)

    Se si potresti dirmi come hai fatto o mi invieresti il codice a blackboxy@email.it ?

    Te ne sarei molto grato.

    Grazie
    Se la vita ti sorride vuol dire che ha una paresi

  8. #8
    Nel mio caso non mi serviva scrivere in una textbox, dovevo attivare un comando in un'altra applicazione.

    Ho un'applicazione che gira in background e ogni tanto deve eseguire delle cose, non potendo modificarne il codice avevo bisogno di qualcosa che dall'esterno fornisse la giusta sequenza (ad esempio ctrl+b) per lanciare le diverse procedure.
    Ho semplicemente utilizzato il codice sotto descritto senza prima mettere il focus su una textbox: credo quindi che l'evento keypress venga passato a windows che lo rigira alle varie applicazioni fino a che non ne trova una che sappia cosa farne.

    Mi sono espresso male, spero si sia capito un po' quello che intendevo, il codice non ce l'ho sotto mano, appena possibile te lo spedisco.
    Horus

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.