Nachricht über Nachrichtendienst versenden



  • wie kann man mit der WinAPI über den Windows-Nachrichtendienst eine Nachricht an eine IP schicken? Ich suche aber keine Lösung über das externe Programme "net" (system("net send ...")) sondern ich will das ganze richtig in meinem Programmcode integrieren.



  • Am einfachsten geht es mit Shellexecute. net ist das Programm und der Rest sind die Parameter. Eleganter geht es mit: NetMessageBufferSend.



  • ja genau, ich wollte die andere lösung. ich hab doch in meinem beitrag geschrieben, das ich das nicht direkt über "net" machen wollte, egal ob mit ShellExecute oder system. NetMessageBufferSend kannte ich auch schon und hatte es schon ausprobiert, aber es hat nie hingehauen. hat vielleicht jemand ein beispiel dazu?



  • Was hast du denn bisher? Ich könnte dir nur ein Beispiel in Delphi Language anbieten, siehe mein NetSend auf meiner HP.



  • Ich hab mindestens 3 anläufe gemacht und es nie hinbekommen. weiss nicht mehr genau wie ich das alles ausprobiert hat. könntest du mir die zeilen in delphi language geben? ich glaube das könnte ich noch übersetzen. 🙂



  • btw: Weiss jemand wie man den Nachrichtendienst anschmeißt? Ich wollte den gerade mal bei mir ausprobieren, aber er sagt mir das er den Service nicht kennt.

    Der Name für den Dienst ist ungültig.

    Hab auch in der Dienstverwaltung von Windows XP geschaut und nichts von "Nachrichtendienst" gefunden. Wie heisst der richtig? und wie bekommt man den wieder in die Service-Liste von Windows XP?



  • Lad es dir von meiner Seite runter, alle Programme sind bei mir mir Soße. 😃



  • Danke Luckie. War doch nicht fähig es zu übersetzen. Sorry. 😞

    Also folgendes will ich in meinem Programm realisieren:

    net send 127.0.0.1 Hallo!

    Das funktioniert wenn man es ausführt. Ok und mein Source sieht jetzt so aus, aber es kommt keine Nachricht an und im Visual C++ steht:

    Eine Ausnahme (erste Chance) bei 0x77e53887 (kernel32.dll) in NetSend.exe: 0x000006BA: Der RPC-Server ist nicht verfügbar.

    Hier der Code:

    #define UNICODE
    
    #include <windows.h>
    #include <lm.h>
    
    int main() {
        LPWSTR Message = L"Hallo!";
        NetMessageBufferSend(L"127.0.0.1", L"Nachricht", NULL, (LPBYTE) &Message, lstrlen(Message));
        return 0;
    }
    

    Das L ist für die Unicode Strings. Vielleicht sieht ja jemand den Fehler. 🙂



  • Ich weiß nich wo dein Fehler liegt, aber du hättest dich wenigstens NetSender2 nennen können. Muss ja nicht der exacte Name sein 😡

    Nunja, ich hoffe immernoch auf meine Antwort auf meiner Frage 🙂



  • sorry, ich wußte nicht das es dich hier auch gibt. hatte bestimmt deinen namen gesehen und der is mir im gedächtnis sitzen geblieben 🙂
    brauche auch noch hilfe. 🙂



  • Original erstellt von Luckie:
    Am einfachsten geht es mit Shellexecute. net ist das Programm und der Rest sind die Parameter. Eleganter geht es mit: NetMessageBufferSend.

    Der Eintrag ist mir entgangen, bin ich schon blind?? Denke schon 😮

    Ich werde es mal probieren, werde vermutlich scheitern, aber dann melde ich mich nochmal



  • Ich scheine echt doof zu sein

    AnsiString msgname = Edit1->Text;
        AnsiString buf = Memo1->Text;
    
        int size = msgname.WideCharBufSize();
        wchar_t * w_msgname = new wchar_t[size];
        msgname.WideChar(w_msgname, size);
    
        NetMessageBufferSend(NULL, L"127.0.0.1", L"Gott",buf.c_str(),buf.Length()+1);
    
        delete[] w_msgname;
    

    Ihr könnt den Code auch so verwenden, man sieht's es ist VCL (BCB)
    Aber net send ist ja WinAPI, wie ich nun gelernt habe :p

    Die Nachricht wird versendet, der Absnender heißt "Gott", nun fragt man sich, ja dann hast du es ja geschafft.
    Ne, leider nicht. Als Text wird nicht der Inhalt der Memo angezeigt sondern nur "???" oder auch mal nur "?". Habe das auch das buf.c_str() durch "Nachricht" ersetzt. Hat nichts geholfen --> "???"

    Was mache ich noch Falsch 😕



  • net sender, danke für den code. mit dem hab ich es nämlich hinbekommen. allerdings weiss ich nicht wie das mit der vcl geht:

    #define UNICODE
    
    #include <windows.h>
    #include <lm.h>
    
    int main() {
        LPWSTR pszMessage = L"Hi!";
        NetMessageBufferSend(NULL, L"127.0.0.1", NULL, (LPBYTE) pszMessage, lstrlen(pszMessage) * sizeof(TCHAR));
        return 0;
    }
    


  • das kommt bestimmt desweigen, weil AnsiString nicht unicode ist.



  • Jetzt merke ich gerade, dass ich derjenige bin, der deinen Namen genommen hat.
    Wir sind ja beide nicht registriert!

    WIr hatten beide die selbe Frage, mein Thread ist jetzt bloß ein paar Zeilen weiter unten. Ich bin derjenige der sich entschuldigen muss!!
    Entschuldige dieses anfahren, da weiter oben.

    Ich nicht mal mehr meinen eigenen Beitrag gefunden *g*

    Das mit AnsiString und unicode kann schon gut sein.
    Wenn ich den Text jedoch in Anführungszeichen sezte, dann kommt das ja auch. Und Text ist ja unicode.

    Freut mich wenn ich dir wenigstens helfen konnte, auch wenn es "unabsichtlich" passierte.



  • hi net sender,
    ich nehme die entschuldigung nicht an, da ich den nickname geklaut hab und ich schuldig bin. 😃
    deshalb möchte ich mich bei dir entschuldigen. 🙂 🙂 🙂
    also du musst ein L vor den Text schreiben, damit der Text im Unicode Format behandelt wird. Also so geht's auch:

    NetMessageBufferSend(NULL, L"127.0.0.1", NULL, (LPBYTE) L"Hi!", 6);

    ich denke mal das kriegst du auch noch hin. 😉



  • FAQ THIS! 😃



  • Also ich kann dir eines verraten, deine Version geht.

    Das einzige was ich leider nicht machen kann, ist L"Hi" als Text so stehen zu lassen. Denn der User sollte seinen Text in einem Textfeld eingeben können.
    Da fällt dann das L"text" leider weg. Und dann geht es bei mir wieder nicht 😞

    Was mich jetzt auch noch interessieren würde, wie bist du auf die "6" gekommen.
    "hi!" --> hat doch nur 3 Zeichen, sind 3 Zeichen == 6 Byte ???
    Da fehlt es mir auch noch an Wissen.

    Bin nun aber überzeugt, dass das noch wird. Hast auf jeden Fall mehr Ahnung als ich.



  • bei unicode verbraucht ein zeichen halt 2 bytes damit mehr informationen darin gespeichert werden können. 😃
    3 buchstaben -> 6 bytes
    das problem is nur das ich nicht weiss wie das mit der vcl geht. vielleicht mal im bcb forum fragen. oder du könntest die api funktion MultiByteToWideChar benutzen.



  • Ein neues Problem tritt auf

    Wenn mit dem normalen "net send <Einlog-Name> <Nachricht>"

    eingibt, dann klappt das. Wenn ich das unter NetMessageBufferSend(...) den Einlog Namen unter Windows eingebe, dann funktioniert das leider nicht mehr.


Log in to reply