Announcement

Collapse
No announcement yet.

NET SEND ... mit Delphi

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NET SEND ... mit Delphi

    Hallo,

    nachdem ich die Antwort auf die Benutzerliste habe, habe ich jetzt noch eine Frage: wie ich die Nachrichten wie mit dem Befehl >NET.EXE SEND person "Nachricht"< versenden kann.

    Ich habe im MSDN die Funktion <b>NetMessageBufferSend</b> probiert aber ohne Erfolg, weil sie registrierte message alias verlangt..???.. Dann habe ich z.Z. mit CreateProcess den Befehl NET.EXE SEND... aufgerufen. Aber das ist keine richtige Loesung.

    vielen Dank fuer jede Antwort im Vorraus...

    duong..

    ps. Hat Herr Andreas Kosch vielleicht eine Loesung ?

  • #2
    Hallo,

    im Win32-SDK werden die folgenden API-Funktionen für die Rubrik der
    <b>Message Functions</b> aufgelistet: <br>
    - NetMessageBufferSend<br>
    - NetMessageNameAdd<br>
    - NetMessageNameDel<br>
    - NetMessageNameEnum<br>
    - NetMessageNameGetInfo <br>

    Um eine Net-Message auszuwerten, muss der <b>Messenger Service</b> (Nachrichtendienst) auf dem Zielrechner laufen. Um eine Net-Message erhalten zu können, muss die Anwendung einen <b>Message Alias</b> im System registrieren - dafür ist die Win32-API-Funktion <b>NetMessageNameAdd</b> zuständig. Der dabei übergebene Alias-Name wird in der exakten Schreibweise ausgewertet. Erst dann ist dem System bekannt, wer für eine über <b>NetMessageBufferSend</b> abgeschickte Net-Message zuständig ist, da der Message Alias dort über den Parameter <i>msgname</i> übergeben wird.

    Über die API-Funktion <b>NetMessageNameEnum</b> kann man sich alle bereits registrierten Alias-Namen auflisten lassen.

    Jetzt stellt sich also die Frage, zu welchem "Empfänger" die Net-Message geschickt werden soll

    Comment


    • #3
      hallo Andreas,

      noch mal vielen Dank fuer deine Hinweise. Ich habe jetzt geschafft mit NetMessageBufferSend mit folgenden Erfahrungen:

      1. Empaenger muss in Grossbuchstaben sein. (case sensitive, ich hoffe dass Windows immer die MsgAliasNamen in Grossbuchstaben registriert)

      2. Sender muss NIL oder der Computername ohne '\\' am Anfang sein.

      3. die Nachricht in WideString und die Groesse in Bytes (Laenge*2)

      duong:-

      Comment


      • #4
        Da muss ich doch glatt mal wieder nerven, auch wenn das Thema schon ´ne Weile her ist. Herr Kosch, Sie wissen ja: "Diverses/Mailslots" - das hatten wir ja schon.

        Meine Frage ist aber folgende:
        Es gibt unter Win9x eine Datei "NETAPI.DLL", die ebenfalls die Funktion "NetMessageBufferSend" enthält, und die von WINPOPUP auch benutzt wird. Nun scheitern meine Versuche, diese Funktion zu nutzen, an der Fehlermeldung, die Datei wäre "fehlerhaft".

        Beim Testen via "LoadLibrary" erhielt ich auch als Rückgabe-Handle den Wert Null, was ja eigentlich bedeutet, dass die DLL nicht geladen wurde. Und beim festen laden mit

        "function ... ; far; external 'NETAPI';

        kam die erwähnte Fehlermeldung.

        Liegt es daran, dass ich diese DLL-Funktion nicht korrekt aufgerufen habe? Und wenn ja, haben Sie, Herr Kosch, oder hat jemand anderer noch Material der alten 16Bit-API, damit ich den korrekten Aufruf erhalte? Oder ist die DLL tatsächlich beschädigt? Ich glaub´s nicht, denn WINPOPUP arbeitet anstandslos.

        Gruß,
        Mathias

        Comment


        • #5
          Hallo,

          wenn das eine alte 16-Bit-DLL ist, kann sie von Delphi 2..6 (32-Bit) nicht eingebunden werden, solange man nicht auf den Mechanismus des <i>Thunking</i> zurückgreift. Der Aufwand für das Thunking lohnt sich vermutlich nicht, da es eine 32-Bit-Version dieser DLL (netapi32.dll) gibt:
          <pre>
          function NetMessageBufferSend; external 'netapi32.dll';
          </pre>
          &#10

          Comment


          • #6
            In dem Umgang mit API-Funktionen habe ich überhaupt keine Erfahrungen. Die Dekleration von Andreas Kosch, war aber anscheinend nicht ganz richtig, immerhing braucht eine Funktion einen Rückgabe wert. Weiterhin diese Funtion nur Sinn, wenn man ihr Parameter übergibt. Die Win-SDK Hilfe gab zu der Funktion nur folgendes Statmend:

            PSS ID Number: Q131458

            Authored 12-Jun-1995 Last modified 15-Jun-1995

            The information in this article applies to:

            - Microsoft Win32 Software Development Kit (SDK) versions 3.5, 3.51

            The NetMessageBufferSend() API can be used to broadcast a message. To
            broadcast a copy a of a particular message to all workstations running
            messanger service in a particular domain, the LPWSTR msgname parameter
            needs to be specified as "DOMAINNAME*" - where DOMAINNAME is the name of
            the domain to which a message is to be sent. In this case, you can use the

            following piece of code to call this API:

            #define UNICODE
            #define MESGLEN 50
            WCHAR awcToName[] = TEXT("DomainName*");
            WCHAR awcFromName[] = Text("MyComputer");
            WCHAR awcMesgBuffer[MESGLEN] = Text("This ia Test Message");
            NET_API_STATUS nasStatus;

            nasStatus = NetMessageBufferSend(NULL,
            awcToName,
            awcFromName,
            awcMesgBuffer,
            MESGLEN);

            Additional reference words: 3.50 3.51 LanMan
            KBCategory: kbprg kbnetwork
            KBSubcategory: NtwkMisc

            -------------------------------------------------------
            Wie kann ich nun diesen Code (Ich vermute C++) in Delphi umwandeln. Ich wäre sehr Dankbar, wenn das jemand mal ausführlicher darstellen könnte, da ich von dieser Diskussion hier nicht wirklich viel verstanden habe, aber diese Funktion trotzdem gerne nutzen würde.

            Vielen Dank im Vorraus,
            Emil Thies

            Comment


            • #7
              @Andreas Kosch: Ist mir ehrlich gesagt noch nie aufgefallen. Ich habe gerade mal geguckt, und Sie haben recht. Wo zum Geier kommt unter Win98 diese "netapi32.dll" her? Die habe ich ja noch nie gesehen. /

              Aber meine DLL hat nur 20k Größe, und die gesuchte Funktion ist nicht drin. Wie also mache ich "Thunking"? Ich schau mal in die Bücher, aber vielleicht verraten Sie´s mir?

              Mathias

              Comment


              • #8
                Hi,

                wenn du willst dann melde dich bei mir ([email protected])! Ich habe da ein proggy geschrieben in dem ich auch den Net Send befehl benutzt habe..

                Comment


                • #9
                  Darum geht´s nicht, Tobias.<br>
                  Ich knoble immer noch am Phänomen <b>WinPopup</b>. Aber es wird verständlicher, wenn man weiß, dass es ein 16Bit-Programm ist. Ich habe auch ein Tool, das (zumindest unter NT/2000/XP) die Auswahl der Methode erlaubt:<br>
                  1.NetMessageBufferSend<br>
                  2.Mailslot<br>
                  3.net send<br><br>
                  Unter Win9x hätte ich gern die "NetMessageBufferSend" aus der "netapi.dll" benutzt. Aber so wie Andreas sagt: es ist eine 16Bit-DLL, und da gibt´s Probleme beim Versuch die zu laden. Es sei denn, man nimmt "Thunking". Aber davon habe ich keine Ahnung.<br><br>
                  Mathias

                  Comment

                  Working...
                  X