Abfangen der Fehlermeldungen von net send



  • Hallo zusammen,

    um zu Hause im internen Netzwerk auf simple Art und Weise Nachrichten zu verschicken, hat sich bei uns der net send-Befehl bewährt. Leider ist es auf Dauer ein bisschen lästig, mit der Konsole zu hantieren und ich habe einfach ein kleines GUI mit der WinAPI gebastelt, die dann mit WinExec ("net send Name/IP Text", SW_HIDE) die Nachricht verschickt. Klappt an sich ganz gut, aber ich kriege kein Feedback, ob die Nachricht auch angekommen ist. Kann ich irgendwie in meinem Programm die Fehlermeldungen von net send auswerten? Oder ist der Ansatz komplett falsch und ich muss auf bestimmte WinAPI-Funktionen zum Verschicken von Nachrichten zurückgreifen? Es sollte wie schon gesagt alles sehr simpel gehalten werden.



  • Hey Tlyman,

    ich arbeite momentan auch gerade an einem ähnlichen Problem! Welchen Compiler benutzt du denn? Ich habe erst vor kurzem angefangen mich mit GUIs zu beschäftigen.
    Ich hatte vor ner Weile schon mal ein kleines Konsolen Programm geschrieben, aber das wird mir auf dauer auch zu unkomfortabel.

    Vielleicht kannste ja mal deinen Quellcode posten!



  • Das Projekt hatte ich damals mit Visual Studio 6.0 erstellt. Den Quelltext habe ich gerade nicht zur Hand, aber in ein paar Tagen werde ich ihn sicher finden, dann kann ich ihn hier mal reinstellen, zumindest den relevanten Teil.
    Das Problem ist einfach, dass ich nicht weiß, was net send im Fehlerfall zurückgibt und wie ich das auslesen kann, wenn das Programm über WinExec aufgerufen wurde. Wahrscheinlich werde ich mir beizeiten eine Alternative überlegen müssen, z.B. komplett über API-Funktionen ohne Rückgriff auf Konsolenprogramme wie net.



  • Wenn ich ehrlich bin, muss ich sagen, ich hab auch eben garnicht aufs Datum geschaut! Ich war grad nur froh, das ich mal nen Beitrag gefunden hab, der in etwa mit meinem Thema überein stimmt! 🙂

    Eine Programm eigene Nachrichtendienst Funktion ist auf jeden Fall die elegantere Variante, aber ich wäre erst mal schon froh, wen mein Programm über Net funzt. Verbessern kann man es ja dann immer noch!



  • So, wie versprochen hier der Hauptteil aus dem Quelltext des kleinen Programms:

    case WM_COMMAND:
    			switch LOWORD (wParam)
    			{
    			case IDOK:
    				laenge = SendDlgItemMessage (hDlg, IDE_NAMEIP, WM_GETTEXTLENGTH, 0, 0);
    				if (!laenge)
    				{
    					MessageBox (hDlg, "Name bzw. IP nicht eingegeben.", "Eingabefehler", MB_ICONEXCLAMATION);
    					SetFocus (GetDlgItem (hDlg, IDE_NAMEIP));
    				}
    				else
    				{
    					SendDlgItemMessage (hDlg, IDE_NAMEIP, WM_GETTEXT, laenge + 1, (LPARAM) buffer);
    					laenge = SendDlgItemMessage (hDlg, IDE_TEXT, WM_GETTEXTLENGTH, 0, 0);
    					if (!laenge)
    					{
    						MessageBox (hDlg, "Keine Nachricht eingegeben.", "Eingabefehler", MB_ICONEXCLAMATION);
    						SetFocus (GetDlgItem (hDlg, IDE_TEXT));
    					}
    					else
    					{
    						strcpy (befehl, "NET SEND ");
    						strcat (befehl, buffer);
    						strcat (befehl, " ");
    						SendDlgItemMessage (hDlg, IDE_TEXT, WM_GETTEXT, laenge + 1, (LPARAM) buffer);
    						strcat (befehl, buffer);
    						WinExec (befehl, SW_HIDE);	// an der Stelle fehlt mir die Rückgabe von net
    					}
    				}
    				break;
    

    Da ist wirklich nicht viel mehr als das Prüfen der Usereingaben und Aufruf des net-Befehls. Deswegen ist das auch schon fast ein bisschen Off-Topic und wenn es eher um die GUI-Funktionalität ging, kann man das denke ich besser über PN klären.
    Da ich hier bezüglich des eigentlichen Themas (also des gesuchten Rückgabewertes) wohl nicht mehr viel Hilfe erwarten kann, schaue ich mich momentan in anderen Foren nach einer Lösung um und habe evtl. einen Ansatz gefunden. Ich melde mich dann mit dem Ergebnis der Nachforschungen zurück.

    Viele Grüße



  • Ich konnte es noch nicht testen, weil mein Nachrichtendienst bzw. die Firewall gerade allgemein etwas spinnt, aber die Lösung sollte die Funktion NetMessageBufferSend sein. Der Code ist zwar schon geändert, aber ich poste ihn besser erst, wenn ich jemanden gefunden habe, der testen kann, ob es auch tatsächlich funktioniert.
    Ich glaube ich sollte niemandem erzählen, dass ich mir meine Frage nach einem Jahr beantwortet habe 😃

    Viele Grüße


Anmelden zum Antworten