Torna al Thread
'La funzione per ottenere l'ID univoco del messaggio
<DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
Private Shared Function RegisterWindowMessage(ByVal lpString As String) As UInteger
End Function
'La funzione per inviare i messaggi
<DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, _
ByVal msg As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As Boolean
End Function
'L'ID del messaggio per avvisare l'applicazione in C++
Private Shared ReadOnly MESSAGE_SEND_ID As UInteger = RegisterWindowMessage("MESSAGE_SEND_ID")
'L'ID del messaggio che ci avvisa che il procedimento è completato
Private Shared ReadOnly MESSAGE_ALERTME_ID As UInteger = RegisterWindowMessage("MESSAGE_ALERTME_ID")
'L'identificatore dei messaggi di Broadcast
Private Shared ReadOnly HWND_BROADCAST As IntPtr = New IntPtr(&HFFFF)
Private Sub TuoButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TuoButton.Click
'In questa funzione avvisiamo l'applicazione in C++, passando il
'nome del file in lParam:
Dim FileName As String = "C:\prova.txt"
'Converto in memoria non gestita, necessario per passare l'argomento
Dim argFileName As IntPtr = Marshal.StringToHGlobalAuto(FileName)
'Invio il messaggio di Broadcast in modo che lo ricevano tutte le applicazioni
SendMessage(HWND_BROADCAST, MESSAGE_SEND_ID, IntPtr.Zero, argFileName)
'Ricordati di deallocare la memoria non gestita!
Marshal.FreeHGlobal(argFileName)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
'Qui riceviamo i messaggi dalle altre applicazioni
'Controllo che l'ID sia quello fornito dall'applicazione C++
If (m.Msg = MESSAGE_ALERTME_ID) Then
'Fai qui quello che devi fare!
MsgBox("Messaggio ricevuto!")
''Se il programma ti passa una stringa, la ottieni con:
'Dim strArg As String = Marshal.PtrToStringAuto(m.WParam)
Else
'Gli altri messaggio non ci interessano, richiamiamo la funzione base
MyBase.WndProc(m)
End If
End Sub