Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    39

    [VB.NET]Problema SendMessage

    Ho creato un programma e voglio che invii una sequenza di tasti ad una finestra minimizzata, un po' come il SendKeys, solo che appunto la finestra non ha il focus.
    Il problema è che il codice non funziona . Come da titolo, ho utilizzato l'API SendMessage
    Codice:
    codice:
    Declare Auto Function SendMessage Lib "user32.dll" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Public WM_CHAR As Integer = &H102
    
          Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            
            
            Dim processo() As Process = Process.GetProcessesByName("notepad")
            Dim NotepadHandle As Int32 = processo(0).MainWindowHandle.ToInt32
         
            SendMessage(NotepadHandle, WM_CHAR, &H45, 1)' in questo caso tento di premere il tasto E, 1 volta
          End Sub
    Non riesco a capire dov'è l'errore. Tra l'altro, ho provato ad inserire una textbox e a cambiare il NotepadHandle con Me.Textbox1.Handle e funziona... Sarà un problema di handle?? Ho provato anche a mettere al posto di MainWindowHandle ,Handle ma nulla. Attendo un vostro aiuto.

  2. #2
    Non so se può essere questo... ma gli handles si impostano in IntPtr (ed infatti GetProcesses ritorna IntPtr).

    La corretta dichiarazione di SenMessage in VB.net conseguentemente è:

    codice:
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr  , _
        ByVal Msg As UInteger, ByVal wParam As IntPtr, _
               ByVal lParam As IntPtr) As IntPtr
    End Function
    Prova.........

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    39
    Grazie per la risposta, ma il problema persiste , altre soluzioni?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il messaggio va inviato al textbox che sta all'interno della finestra del notepad. Devi quindi ottenere l'handle di questa textbox per usare la SendMessage.

    Per farlo devi usare la FindWindow e FindWindowEx, ovvero

    codice:
        Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
            (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    
        Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
            (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    
        Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _
          (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
    
        Private WM_CHAR As Integer = &H102
        
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim notepadHandle As IntPtr = FindWindow("Notepad", Nothing)
            Dim editHandle As IntPtr = FindWindowEx(notepadHandle, IntPtr.Zero, "Edit", Nothing)
    
            SendMessage(editHandle, WM_CHAR, &H45, 1)
        End Sub
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    39
    Grazie mille, funziona .. Adesso però ti chiedo, come hai fatto a trovare il nome "Edit" della textbox, e come faccio a fare la stessa cosa con un altro programma (quindi a trovare il nome del controllo al quale inviare i tasti)?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Usa un tool come Spy++ e tanta pazienza
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    39
    Perfetto, tutto risolto in un paio d'ore, grazie mille a tutti

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 © 2026 vBulletin Solutions, Inc. All rights reserved.