Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   EASYcomm - grafisches Netsend (https://www.delphipraxis.net/5213-easycomm-grafisches-netsend.html)

hitzi 28. Mai 2003 10:53


EASYcomm - grafisches Netsend
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,


heut möchte ich mal ein kleines Tool von mir vorstellen. Dabei handelt es sich um den Netsend Clone EASYcomm.

Nach dem ersten Start läuft das Programm in den Minimalkonfiguration -> STRG - E für die Einstellungen.

Die EASYcomm Erweiterung nutzt TCP für die Nachrichtenübermittlung.

Bekannte Bugs:

Nachricht an bestimmte IP funktioniert in unserem Netzwerk nicht.
Bei Nutzung des eigenen Messagedienst findet das orginal "net send" den Computer, auf dem der eigene Messagedienst läuft, nicht mehr.


Getestet auf WinNT4, Win2000, WinXP.


So nun schreibt mir fleißig eure Verbesserungswünsche, Bugs, etc .... :)


MfG Hitzi

Luckie 28. Mai 2003 12:48

Sieht ganz schick aus, nur funktionieren tut es bei mir nicht. Wenn ich an 127.0.0.1 sende müßte ich selber die Nachricht bekommen. Tue ich aber nicht, obwohl dein Programm steif und fest behauptet die Nachricht wurde versandt, obwohl das gar nicht stimmt.
Mit dem "eigenen Nachrichtendienst" (was auch immer das sein mag) geht es auch nicht.

Wenn ich den Netzwerktreeview nach Computer sortiere, gehen die selbst eingetragenen IPs verloren.

Und das nöächste mal bitte einen Hinweis wo dein Programm Müll in der Registry hinterläßt. :evil:

hitzi 28. Mai 2003 13:07

Zitat:

Zitat von Luckie
Wenn ich an 127.0.0.1 sende müßte ich selber die Nachricht bekommen.

Hatte ich oben schon angesprochen. ->
Zitat:

Zitat von hitzi
Bekannte Bugs:

Nachricht an bestimmte IP funktioniert in unserem Netzwerk nicht.

Sieht wohl so aus, als ob das nicht an unseren Netzwerk liegt, sondern generell nicht funktioniert?!


Zitat:

Zitat von Luckie
Mit dem "eigenen Nachrichtendienst" (was auch immer das sein mag) geht es auch nicht.

Ist im eigentlichen Sinne kein Nachrichtendienst. Diese Funktion schaltet den "Nachrichten" Dienst von Windows (Messenger Dienst) ab und richtet einen eigenen Mailslot (messgnr) ein. Diese ganze Funktion beeinflusst nicht das Senden. Sie nur dazu da die Netsendmeldungen in einen eigenen Fenster darzustellen. (Hauptgrund war die fehlende Möglichkeit den Text einer empfangenen Netsend zu kopieren - außer über das Ereignisprotokol)

Zitat:

Zitat von Luckie
Wenn ich den Netzwerktreeview nach Computer sortiere, gehen die selbst eingetragenen IPs verloren.

Notiert ... Wird in der nächsten Version behoben sein.

Zitat:

Zitat von Luckie
obwohl dein Programm steif und fest behauptet die Nachricht wurde versandt, obwohl das gar nicht stimmt.

Das ist das Problem bei den Mailslots. Es gibt keine Bestätigung, dass eine Nachricht den Empfänger erreicht hat. Deine Nachricht wurde versandt (Meldung ist korrekt), ich habe da aber noch ein Problem mit der richtigen IP Übergabe an die Mailslot Funktion (denke ich ... ;) ). So landet deine Nachricht im digitalen Nirvana.

Zitat:

Zitat von Luckie
Und das nöächste mal bitte einen Hinweis wo dein Programm Müll in der Registry hinterläßt.

Alle einträge sind unter
HKEY_CURRENT_USER\Software\EASYcomm\2.0
zu finden. Werde in der folgenden Version die Möglichkeit einbauen diesen Schlüssel wieder zu löschen.

Weiterhin legt das Programm im Standardprogrammordner das Verzeichnis EASYcomm an, wo die Nachrichten Logs gespeichert werden.



MfG Hitzi

Luckie 28. Mai 2003 13:24

Komisch, mit meinem NetSend kann ich an die IP 127.0.0.1 senden. Die Bestätigung kam aber auch bei verwendung des Nachrichtendienstes.

Mein Netsend fidest du auf meiner Homepage, probier den doch mal bei euch aus.

hitzi 28. Mai 2003 13:34

Falls es interessiert - ich nutze folgende Funktion zum Senden über Mailslots:

Delphi-Quellcode:
function Netsend(Server, Reciever, Sender, Msg : String) : Boolean;

  function SendToMailSlot(Server, Slot, Data : String) : Boolean;
  var hToSlot : THandle;
      BytesWritten : DWord;
  begin
    Result := False;
    hToSlot := CreateFile(PChar('\\' + Server + '\mailslot\' + Slot), GENERIC_WRITE,
                                FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if hToSlot = INVALID_HANDLE_VALUE then Exit;
    try
      BytesWritten := 0;
      if (not WriteFile(hToSlot, Pointer(pchar(Data))^, length(Data), BytesWritten,nil)) or (BytesWritten <> dword(length(Data))) then Exit;
      result := True;
    finally
      CloseHandle(hToSlot);
    end;
    sleep(5);
  end;

var j : integer;
    sDummy, sOld : string;

begin
  if length(msg) > 128 then begin
    sOld:=msg;
    while length(sOld) > 128 do begin
      sDummy := ReverseString(copy(sOld, 1, 128));
      j := pos(' ', sDummy);
      if j > 0 then
        sOld := ReverseString(copy(sDummy, 1, j-1)) + copy(sOld, 129, length(sOld))
      else
        sOld := copy(sOld, 129, length(sOld));
      Result := SendToMailSlot(Server, sc_Mailslot, Sender + #0 + Reciever + #0 +
                               ReverseString(copy(sDummy, j+1, length(sDummy))));
    end;
    Result := SendToMailSlot(pchar(Server), sc_Mailslot, Sender + #0 + Reciever + #0 + sOld);
  end else if length(msg) > 0 then
    Result := SendToMailSlot(Server, sc_Mailslot, Sender + #0 + Reciever + #0 + msg)
  else result := true;
end;
Ob der Fehler (IP) in dieser Funktion liegt oder im Aufruf kann ich zum jetzigen Zeitpunkt noch nicht sagen. Bin gerade noch an einem anderen Projekt dran.

MfG Hitzi

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

MathiasSimmack 28. Mai 2003 19:03

Der Fehler liegt daran (bzw. darin), dass unter NT nicht zwangsläufig ein Mailslot benutzt wird. Insbesondere dann, wenn der Empfänger ein Benutzername ist. "net send" und WinPopup (Win9x) benutzen neben dem Mailslot noch eine zusätzliche Variante. ... Hm, ich wusste sogar mal wie die heißt, weil auch ich -vor mehr als 2 Jahren!- ein eigenes Nachrichtentool für Win9x/NT/... geschrieben habe.

Außerdem muss -wenn das eigene Programm "net send"-kompatibel sein soll!- der Mailslot den Namen messngr tragen. Kann sein, dass das bei dir der Fall ist. Es geht aus dem geposteten Code nur nicht hervor.
Benutzt das eigene Programm einen eigenen Mailslot-Namen, dann muss das selbe Programm logischerweise auch auf den anderen Rechnern laufen, sonst kommt die Nachricht natürlich nicht an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz