vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 2.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Windows/System22.03.05
DdeCallback-Funktion

Diese Funktion wird aufgerufen, wenn eine Anwendung einen DDE-Server eingerichtet hat und gewählte DDE-Ereignisse eintreffen.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  2.266 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Deklaration:

    Function DDECallback(ByVal wType As Long, ByVal wFmt As Long, ByVal h_Conv  _
      As Long, ByVal h_Topic As Long, ByVal h_Service As Long, ByVal hData As _
      Long, ByVal lData1 As Long, ByVal lData2 As Long) As Long
     
    End Function

    Beschreibung:
    Diese Funktion wird aufgerufen, wenn eine Anwendung einen DDE-Server eingerichtet hat und gewählte DDE-Ereignisse eintreffen.

    Parameter:
    wTypeErwartet eine der "wType"-Konstanten, die das Ereignis beschreiben welchesmomentan in der DDE passiert.
    wFmtBeschreibt das Format, in dem die Daten zu senden oder zu empfangen sind.
    h_ConvEnthält das Handle einer DDE-Verbindung, der die aktuelle Transaktion beschreibt.
    h_TopicEnthält das Handle zu einem DDE-String, den der DDE-Client bei "hszTopic" übergeben hat.
    h_ServiceEnthält das Handle zu einem DDE-String, den der DDE-Client bei "hszService" übergeben hat.
    hDataEnthält ein Handle zu einem DDE-Daten.
    lData1Enthält transaktionsspezifische Daten.
    lData2Enthält transaktionsspezifische Daten.

    wType Konstanten:

    Const XTYPF_NOBLOCK = &H2
    ' Standard-Konstante (CBR_BLOCK funktioniert nicht)
     
    Const XCLASS_NOTIFICATION = &H8000
    ' Die Rückgabe wird ignoriert; dient nur zur Benachrichtigung
     
    Const XCLASS_FLAGS = &H4000
    ' Die Funktion muss DDE_FACK, DDE_FBUSY, oder DDE_FNOTPROCESSED zurückgeben
     
    Const XCLASS_DATA = &H2000
    ' Die Funktion muss ein Handle zu Daten, CBR_BLOCK oder 0 zurückgeben
     
    Const XCLASS_BOOL = &H1000
    ' 0 (False) oder 1 (True) muss zurückgegeben werden
     
    Const XTYP_ADVSTART = (&H30 Or XCLASS_BOOL)
    ' Noch keine Informationen
     
    Const XTYP_CONNECT = (&H60 Or XCLASS_BOOL Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_ADVREQ = (&H20 Or XCLASS_DATA Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_REQUEST = (&HB0 Or XCLASS_DATA)
    ' Noch keine Informationen
     
    Const XTYP_WILDCONNECT = (&HE0 Or XCLASS_DATA Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_ADVDATA = (&H10 Or XCLASS_FLAGS)
    ' Noch keine Informationen
     
    Const XTYP_EXECUTE = (&H50 Or XCLASS_FLAGS)
    ' Noch keine Informationen
     
    Const XTYP_POKE = (&H90 Or XCLASS_FLAGS)
    ' Noch keine Informationen
     
    Const XTYP_CONNECT_CONFIRM = (&H70 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_DISCONNECT = (&HC0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_ERROR = (&H0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_MONITOR = (&HF0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_REGISTER = (&HA0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
    ' Noch keine Informationen
     
    Const XTYP_XACT_COMPLETE = (&H80 Or XCLASS_NOTIFICATION)
    ' Noch keine Informationen
     
    Const XTYP_UNREGISTER = (&HD0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
    ' Noch keine Informationen

    Rückgabewert:
    Je nach "wType"-Konstante muss hier ein bestimmter Wert oder eine Konstante zurückgegeben werden.

    Rückgabekonstanten:

    Const DDE_FACK = &H8000
    ' Die Transaktion wurde angenommen (nur möglich, wenn die eintreffende  
    ' Nachricht XCLASS_FLAGS enthält)
     
    Const DDE_FBUSY = &H4000
    ' Die Transaktion wurde nicht angenommen, weil eine andere noch ausgeführt  
    ' wird (nur möglich wenn die eintreffende Nachricht XCLASS_FLAGS enthält)
     
    Const DDE_FNOTPROCESSED = &H0
    ' Die Transaktion wurde nicht ausgeführt (nur möglich wenn die eintreffende  
    ' Nachricht XCLASS_FLAGS enthält)
     
    Const CBR_BLOCK = &HFFFF
    ' Die Transaktion wird geblockt (nur möglich wenn die eintreffende Nachricht 
    ' nicht XTYPF_NOBLOCK enthält, aber die Konstante XCLASS_DATA enthalten ist)

    Beispiel:

    ' Schreiben Sie diesen Code in ein öffentliches Modul
    Private Declare Function DdeQueryString Lib "user32" _
      Alias "DdeQueryStringA" ( _
      ByVal idInst As Long, _
      ByVal hsz As Long, _
      ByVal psz As String, _
      ByVal cchMax As Long, _
      ByVal iCodePage As Long) As Long
     
    ' DdeQueryString iCodePage-Konstanten
    Private Const CP_WINANSI = 1004 ' (Standard) ANSI Zeichensatz
    Private Const CP_WINUNICODE = 1200 ' Unicode Zeichensatz
     
    ' Callback uType-Konstanten
    Private Const XTYP_CONNECT = (&H60 Or XCLASS_BOOL Or XTYPF_NOBLOCK) 
    ' Ein Client will sich verbinden
     
    Public hInst As Long, hService As Long, hTopic As Long, hConv As Long
    Public Function DDECallback(ByVal wType As Long, ByVal wFmt As Long, ByVal _
      h_Conv As Long, ByVal h_Topic As Long, ByVal h_Service As Long, ByVal hData  _
      As Long, ByVal lData1 As Long, ByVal lData2 As Long) As Long
     
      Dim hInstCount As Long, TmpBuffer As String, BuffeLength As Long,  _
        Retval As Long, hWnd2ndInstance As Long
     
      Select Case wType
      Case XTYP_CONNECT ' Eine Anwendung unseres Typs verbindet sich mit der DDE 
     
        ' Ermitteln des Servicenamens des anfragenden Clients
        BuffeLength = DdeQueryString(hInst, h_Service, TmpBuffer, 0&, CP_WINANSI) 
        TmpBuffer = Space(BuffeLength + 1)
        Retval = DdeQueryString(hInst, h_Service, TmpBuffer,  _
        Len(TmpBuffer), CP_WINANSI)
        TmpBuffer = Left$(TmpBuffer, BuffeLength)
     
        ' Falls es ein Client unseres Typs ist dann unser wieder Fenster anzeigen 
        If TmpBuffer = "VB Api Helpline" Then
            MsgBox "Es wurde der Start einer weiteren Instanz  _
            ermittelt.", , "Instanz ID: " & hInst
            Form1.Show
            DDECallback = 1 ' Anfrage bestätigen, dass ein DDE Server vorhanden ist
        End If
      End Select
    End Function
    ' Schreiben Sie den nachfolgenden Code in eine Form
    Private Declare Function DdeInitialize Lib "user32" _
      Alias "DdeInitializeA"  ( _
      pidInst As Long, _
      ByVal pfnCallback As Long, _
      ByVal afCmd As Long, _
      ByVal ulRes As Long) As Integer
    Private Declare Function DdeUninitialize Lib "user32" ( _
      ByVal idInst As Long) As Long
    Private Declare Function DdeNameService Lib "user32" ( _
      ByVal idInst As Long, _
       ByVal hsz1 As Long, _
      ByVal hsz2 As Long, _
      ByVal afCmd As Long) As Long
    Private Declare Function DdeCreateStringHandle Lib "user32" _
      Alias "DdeCreateStringHandleA" ( _
      ByVal idInst As Long, _
      ByVal psz As String, _
      ByVal iCodePage As Long) As Long
    Private Declare Function DdeConnect Lib "user32" ( _
      ByVal idInst As Long, _
       ByVal hszService As Long, _
      ByVal hszTopic As Long, _
      pCC As Any) As Long
    Private Declare Function DdeFreeStringHandle Lib "user32" ( _
      ByVal idInst As Long, _
      ByVal hsz As Long) As Long
     
    ' DdeCreateStringHandle iCodePage-Konstanten
    Private Const CP_WINANSI = 1004 ' (Standard) ANSI Zeichensatz
    Private Const CP_WINUNICODE = 1200 ' Unicode Zeichensatz
     
    ' DdeNameService afCmd-Konstanten
    Private Const DNS_REGISTER = &H1 ' Registriert einen Fehlercode
    Private Const DNS_UNREGISTER = &H2 ' Deregistriert einen DDE Server
     
    ' DdeInitialize afCmd-Konstanten
    Private Const APPCLASS_STANDARD = &H0& ' Richtet das Programm als Standard_DDE Anwendung ein
    ' DDE Server starten
    Private Sub Form_Load()
      Dim Retval As Long
     
      ' DDE initialisieren, nur die CBF_CONNECTIONS soll empfangen werden
      Retval = DdeInitialize(hInst, AddressOf DDECallback,  _
      APPCLASS_STANDARD, 0&)
      If Retval << 0 Then
        Exit Sub
      End If
     
      ' 2 eindeutige Strings erstellen, die unsere Anwendung beschreiben
      hService = DdeCreateStringHandle(hInst, "VB Api Helpline", CP_WINANSI)
      hTopic = DdeCreateStringHandle(hInst, "www.vbapihelpline.de", CP_WINANSI) 
     
      ' Verbinden mit der DDE, und auf Vorhandensein eines Servers testen
      hConv = DdeConnect(hInst, hService, hTopic, ByVal 0&)
      If hConv << 0 Then
        MsgBox "Es besteht bereits eine Instanz, Programm wird beendet",  _
        , "Instanz ID: " & hInst
        Unload Me
      Else
        ' Server starten falls noch keiner existiert
        Retval = DdeNameService(hInst, hService, 0&, DNS_REGISTER)
      End If
    End Sub
    ' DDE-Sitzung beenden
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
      ' Beenden des Nachrichtenempfangs
      Call DdeNameService(hInst, hService, 0&, DNS_UNREGISTER)
     
      ' Strings auflösen
      Call DdeFreeStringHandle(hInst, hService)
      Call DdeFreeStringHandle(hInst, hTopic)
     
      ' Beenden der DDE-Sitzung
      Call DdeUninitialize(hInst)
    End Sub
    ' Fenster zum Testen der 2ten Instanz verstecken lassen
    Private Sub Command1_Click()
      Me.Hide
    End Sub

    Diese Seite wurde bereits 2.266 mal aufgerufen.

    nach obenzurück
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.

    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel