Start / FAQ / FAQ 0108: Wie kann ich Nachrichten senden und empfangen?
 
Startseite Up-/Download Tutorials Club Das Team
Rubriken Foren Bücher Tips 'n Tricks Suche


FAQ 0108: Wie kann ich Nachrichten senden und empfangen?


  Frage

Wie kann ich Nachrichten senden und empfangen?

Inhalt

Nachrichten senden
Nachrichten empfangen
Nachrichten abfangen

  Nachrichten senden

Der  Nachrichten per API übers Netzwerk senden [Tipp 0536] zeigt, wie man mit einer Funktion der Win32-API Nachrichten versenden kann. Dieser Tipp funktioniert jedoch nur unter NT-basierten Windows-Versionen, da Windows 9x/ME und alle 16-Bit-Windows-Versionen die entsprechende Funktion nicht kennen.

  Nachrichten empfangen

Um Nachrichten empfangen zu können, muß auf dem System, auf dem die Nachricht empfangen werden soll, der Nachrichtendienst laufen. Eingehende Nachrichten werden von diesem Dienst angezeigt und protokolliert.

In Firmen ist hierzu die jeweilige EDV-Abteilung zu konsultieren.

  Nachrichten abfangen

Manchmal ist es nicht erwünscht, die Nachricht vom Dienst anzeigen zu lassen. Einer unserer Besucher namens Bastii hat folgenden Quelltext gepostet, mit dem die eingehenden Nachrichten von einer eigenen Anwendung ausgelesen und verarbeitet werden können.

Private Declare Function FindWindow Lib "user32" _
                Alias "FindWindowA" ( _
                ByVal lpClassName As String, _
                ByVal lpWindowName As String) As Long

Private Declare Function GetWindow Lib "user32" ( _
                ByVal hWnd As Long, _
                ByVal wCmd As Long) As Long

Private Declare Function SendMessage Lib "user32" _
                Alias "SendMessageA" ( _
                ByVal hWnd As Long, _
                ByVal wMsg As Long, _
                ByVal wParam As Long, _
                ByRef lParam As Any) As Long

Private Const GW_CHILD As Long = &H5
Private Const GW_HWNDNEXT As Long = &H2
Private Const BM_CLICK As Long = &HF5
Private Const WM_GETTEXT As Long = &HD
Private Const WM_GETTEXTLENGTH As Long = &HE

Private Function GetMessageText() As String
    Dim hWinParent As Long
    Dim hWinText As Long
    Dim hWinOk As Long
    Dim strText As String
    Dim lngTextLen As Long
    
    strText = vbNullString
    
    '   Leerzeichen beachten
    hWinParent = FindWindow(vbNullString, "Nachrichtendienst ")
    
    '   Wurde ein Dialog des Nachrichtendienstes gefunden?
    If (hWinParent <> 0) Then
        '   Ja, Handle des OK-Buttons holen
        hWinOk = GetWindow(hWinParent, GW_CHILD)
        
        '   Handle der Nachricht holen
        hWinText = GetWindow(hWinOk, GW_HWNDNEXT)
        
        '   Länge der Nachricht auslesen und
        '   Buffer entsprechend vorbereiten
        lngTextLen = SendMessage(hWinText, WM_GETTEXTLENGTH, 0&, 0&)
        strText = Space$(lngTextLen)
        
        '   Nachricht auslesen
        Call SendMessage(hWinText, WM_GETTEXT, lngTextLen + 1, strText)
        
        '   Dialog des Nachrichtendienstes schließen
        Call SendMessage(hWinOk, BM_CLICK, 0&, 0&)
    End If
        
    '   Rückgabe setzen
    GetMessageText = strText
End Function

Listing 1: Nachrichten abfangen

Um diese Funktion zu verwenden, sollte man sie in periodischen Abständen (z. B. unter Verwendung eines Timer-Steuerelements) aufrufen. Bastii schlug hierfür ein Interval von 50 ms vor.

Eine noch nicht geprüfte Lösung besteht darin, denn Nachrichtendienst zu beenden und dann selbst den Mailslot 'messenger' auszulesen, über welchen nach Aussage von  Frank Grimm die Nachrichten des Nachrichtendienstes eintrudeln:
Mailslots - virtuelle EMail-Postfächer (Workshop von vb@archiv).


Erstellt: 17.09.2004
Aktualisierung: 26.07.2010
  Autor: Helge Rex
E-Mail: faq@ActiveVB.de



Copyright © 1998-2010 by ActiveVB
Alle Rechte vorbehalten.