Nachricht über Nachrichtendienst versenden



  • 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.



  • ich habe dein problem schon im bcb forum gelesen. aber du hast das total unverständlich geschrieben!! 😡



  • Tut mir leid, dass ich mich so schlecht ausgedrückt habe.

    ABer ihr kennt dass doch, dass man sich unter Windows 2000 einloggt, mit Benutzername und Passwort.

    Wenn man mit der normalen "net send" Methode, an diesem "Benutzernamen", mit dem man sich ja nun unter Windows2000 angemeldet hat eine Nachricht schickt, dann kommt diese an.

    z.B. unter Ausführen folgendes eingeben:

    net send BENUTZERNAME Meine Nachricht
    

    Das funktioniert!

    Nimmt man jedoch NetMessageBufferSend(...) mit den ganzen Parametern die da noch dazugehören, dann wird die Nachricht leider niemals ankommen. Gibt man aber z.B. die IP Adresse an, dann kommt sie an.

    [cpp]NetMessageBufferSend(0, L"BENUTZERNAME", L"Absender", (LPBYTE)L"Meine Nachricht",30);[/cpp]

    Ich hoffe diesmal habs ich besser erklärt 😞



  • Ich glaube, ich habe hier etwas für euch.

    WCHAR* AnsiToWideChar(LPCTSTR lpszString)
    {
       if(!lpszString)
          return NULL;
       int length = strlen(lpszString);
       WCHAR* lpwString = new WCHAR[length + 1];
       int wCharLength = MultiByteToWideChar(CP_ACP, 0, lpszString, length, NULL, 0);
       MultiByteToWideChar(CP_ACP, 0, lpszString, length, lpwString, wCharLength);
       lpwString[length] = 0x00;
       return lpwString;
    }
    //---------------------------------------------------------------------------
    
    BOOL SendNetMessage(LPCTSTR lpszUser, LPCTSTR lpszMsg)
    {
       WCHAR* lpwMsg   = AnsiToWideChar(lpszMsg);
       WCHAR* lpwUser  = AnsiToWideChar(lpszUser);
    
       BOOL retval = NetMessageBufferSend(NULL, lpwUser, NULL, (LPBYTE)lpwMsg,
                                          2 * wcslen(lpwMsg));
    
       delete[] lpwMsg;
       delete[] lpwUser;
    
       return(!retval);
    }
    

    Dann braucht ihr nur noch was zu schreiben wie

    SendNetMessage("WEBFRITZI", "Na, du dummes A-r-s-c-h-l-o-c-h");
    

    [ Dieser Beitrag wurde am 19.12.2002 um 22:39 Uhr von WebFritzi editiert. ]



  • Danke dir WebFritzi, keine Ahnung wo du das gefunden hast, aber ist echt super.

    Hab nur noch ein kleines Problem:
    [cpp]´
    BOOL SendNetMessage(LPCTSTR lpszUser, lpszFrom , LPCTSTR lpszMsg)
    {
    WCHAR* lpwMsg = AnsiToWideChar(lpszMsg);
    WCHAR* lpwUser = AnsiToWideChar(lpszUser);
    WCHAR* lpwFrom = AnsiToWideChar(lpszFrom);

    BOOL retval = NetMessageBufferSend(NULL, lpwUser, lpwFrom, (LPBYTE)lpwMsg,
    2 * wcslen(lpwMsg));

    delete[] lpwMsg;
    delete[] lpwUser;
    delete[] lpwFrom;

    return(!retval);
    }
    [/cpp]
    SendNetMessage("WEBFRITZI", "Nickname" ,"Meine Nachricht");
    ---
    Mit GetLastError kommt 997 raus

    ERROR_IO_PENDING Overlapped I/O operation is in progress. 997
    laut MSDN

    Ich schätze mal bei mir stimmt das "Kürzel" From nicht
    Habe schon From, from, Fromname, fromname, Frm, frm ausprobiert
    Bisher ohne Erfolg



  • Danke dir WebFritzi, keine Ahnung wo du das gefunden hast, aber ist echt super.

    Wo ich das herhabe? Aus meinem Gehirn! 🕶 Zu deinem Prob:

    BOOL SendNetMessage(LPCTSTR lpszTo, LPCTSTR lpszFrom, LPCTSTR lpszMsg)
    {
       WCHAR* lpwTo    = AnsiToWideChar(lpszTo);
       WCHAR* lpwFrom  = AnsiToWideChar(lpszFrom);
       WCHAR* lpwMsg   = AnsiToWideChar(lpszMsg);
    
       BOOL retval = NetMessageBufferSend(NULL, lpwTo, lpwFrom, (LPBYTE)lpwMsg,
                                          2 * wcslen(lpwMsg));
    
       delete[] lpwTo;
       delete[] lpwFrom;
       delete[] lpwMsg;
    
       return(!retval);
    }
    

    Klappt doch super!



  • Original erstellt von WebFritzi:
    Klappt doch super!

    Kann das nicht bestätigen. Es geht jedoch aber nur wenn Absender(From) gleich dem Empänger(To) ist. Ist natürlich nicht der Sinn der Sache.

    Vielleicht fällt dir ja noch was ein.



  • Ist niemandem mehr etwas eingefallen?

    Es müsst eigentlich fast geschafft sein!
    Denn normaler Weise, wenn das NetSendMessegeBuf verwendet, mit dem Code am Anfang, dann kann irgendeinen Absender einstellen, jeodch als Empfänger nur die IP Adresse

    Nun, kann man an JEDEN senden (Win-LogIn Namen) aber man hat nicht mehr die freie Auswahl den Absender einzustellen. Außer (Absender == Empfänder), dann wir die Nachricht versendet. Das finde ich ist komisch, es müsst eine Mischung von den beiden geben.

    Thank for more answers



  • Hi <Net Sender>! Sorry, kann dir im Moment leider nicht weiterhelfen, da ich hier in unserem kleinen Netzwerk der einzige bin, der ein System >= Win NT hat.



  • dann such dir doch einen anderen I-d-i-o-t-e-n der sich mit dir verbinden will 🙂



  • Mich würd das auch interressieren. Mein Linker meldet jedoch das er NetSendBuffer... net findet. Muss ich irgendne Lib linken? ich nutz VC.NET Wie mach ich das dort? (ich kenn mich mit dem ding net aus)



  • Netapi32.lib steht doch in der doku :o 😡


Anmelden zum Antworten