Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237

    [VB.NET] SendInput per simulare tastiera

    Salve a tutti.
    Sto cercando di usare la funzione API sendinput per simulare la pressione di un tasto della tastiera. Il mio obiettivo è quello di creare delle macro, che ad esempio alla pressione del tasto "R", avvenga in automatico la pressione del tasto 1 (per esempio)... Ho già la parte di codice che riguarda l'hook di sistema, che intercetta il primo tasto.
    La stessa funzione: muove anche il mouse e simula i click ma per la tastiera proprio non..
    Vi posto il mio codice:
    codice:
    Private Declare Function SendInput Lib "user32" (ByVal nInputs As Integer, ByVal pInputs As INPUT, ByVal cbSize As Integer) As Integer
    Private Structure KEYBDINPUT
        	'Public dwtype as Integer
        	Public wVk As Integer
        	Public wScan As Integer
        	Public dwFlags As Integer
        	Public time As Integer
        	Public dwExtraInfo As IntPtr
    End Structure
    '<StructLayout(LayoutKind.Explicit)> _
    	Private Structure INPUT
    		'<FieldOffset(0)> _
    		Public type As Integer
    	'	<FieldOffset(4)> _
    		Public mi As MOUSEINPUT
    	'	<FieldOffset(4)> _
    		Public ki As KEYBDINPUT
    	'	<FieldOffset(4)> _
    		Public hi As HARDWAREINPUT
    End Structure
    Sub InvioTasto
        	Dim inputE As New INPUT
        	inpute.ki.dwExtraInfo = 0
        	inputE.type = 1 'input tastiera
        	InputE.ki.dwFlags = 0 'pressione del tasto
        	inputE.ki.wVk= 66 'tasto a caso
        	'inputE.dwExtraInfo = intptr.zero
        	Dim cbSize As Integer = Marshal.SizeOf(gettype(INPUT))
            Dim result As Integer = SendInput(1, inputE, cbSize) 'invio pressione tasto
            Dim lasterror As Integer = Marshal.GetLastWin32Error
            Debug.WriteLine("LastError: " & lasterror)
            InputE.ki.dwFlags =2 'rilascio del tasto
            cbSize  = Marshal.SizeOf(gettype(INPUT))
            result  = SendInput(1,  inputE, cbSize) 'inviio rilascio tasto
      	lasterror  = Marshal.GetLastWin32Error
            Debug.WriteLine("LastError: " & lasterror)
    End Sub
    Mi da ogni volta error 87. Ho letto tutti gli esempi di questo mondo ma sono quasi tutti o in c++ o per Visual Basic 6.
    Io uso VB.NET, Win XP pro sp3.
    VI prego datemi qualche dritta.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Risolto. era più complicato del previsto...

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.