![]() |
Net Send mit Mailslots
Ich habe folgenden Code von Assarbad vorliegen:
Delphi-Quellcode:
Zwei Probleme:
(******************************************************************************
This code is PUBLIC DOMAIN! You may find it on [url]http://assarbad.net[/url] or [url]http://assarbad.net[/url] Contact me via eMail: Assarbad AT gmx DOT info ... or via ICQ : 28 16 45 ******************************************************************************) function NetMessageBufferSendSubstA(ServerName, MsgName, FromName, Msg: AnsiString): Boolean; {.$DEFINE SYNCHRONOUS} const szService = '\mailslot\messngr'; MaxBufLen = $700; var hFile: THandle; WrittenBytes: DWORD; {$IFNDEF SYNCHRONOUS} ovs: OVERLAPPED; EventName:String; {$ENDIF} begin Result := False; if Length(Msg) > MaxBufLen then SetLength(Msg, MaxBufLen); {$IFNDEF SYNCHRONOUS} EventName:='NetSendEvent_'+ServerName; {$ENDIF} ServerName := '\\' + Servername + szService; hFile := CreateFileA( @ServerName[1], GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING or FILE_FLAG_OVERLAPPED, 0); if hFile <> INVALID_HANDLE_VALUE then try Msg := FromName + #0 + MsgName + #0 + Msg; {$IFNDEF SYNCHRONOUS} ovs.hEvent := CreateEventA(nil, True, False, @EventName[1]); WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, @ovs); {$ELSE} WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, nil); {$ENDIF} Result := GetLastError = ERROR_IO_PENDING; finally {$IFNDEF SYNCHRONOUS} if WaitForSingleObject(ovs.hEvent, INFINITE) <> WAIT_TIMEOUT then {$ENDIF} CloseHandle(hFile); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if not NetMessageBufferSendSubstA('hal9000', 'Empfänger', 'Absender', 'üäö') then RaiseLastOSError(); end;
Nachtrag: Kann ich mit der Funktion auch auf einen Win9x Rechner Nachrichten schicken auf dem WinPopup läuft? Ich meine da mal was gehört zu haben. |
Re: Net Send mit Mailslots
Zitat:
Delphi-Quellcode:
Zumindest WinPopup stellt die Zeichen dann richtig dar. Womit wohl auch die Frage:
function OEMConverter(s: AnsiString): string;
begin SetLength(Result,length(s)); if(length(Result) > 0) then CharToOEM(pchar(s),pchar(Result)); end; Zitat:
|
Re: Net Send mit Mailslots
Hm, ghut danke, dann wäre das schon mal behoben. Aber zufrieden bin ich erst, wenn ich dem Benutzer im Fall der Fälle eine aussagekräftige Fehlermeldung geben kann.
|
Re: Net Send mit Mailslots
Na ja, als (schlechte?) Idee fiele mir noch ein, vor dem Senden den Zielnamen aufzulösen. Sprich: die IP im Netzwerk ermitteln. Aber das klappt dann wirklich nur bei Computernamen. :?
|
Re: Net Send mit Mailslots
Ist mir egal, ich benutz' den Code nicht produktiv, es ist quasi Prototypen-Code. Und solchen veroeffentliche ich immer unter PUBLIC DOMAIN. Deshalb heisst es wohl selber basteln ;)
|
Re: Net Send mit Mailslots
Liste der Anhänge anzeigen (Anzahl: 1)
Mailslots senden auf verdacht hin die Messages and den Empfänger, egal ob der Empfänger existiert oder nicht. Somit kann es keine Fehlermeldungen bei Nichterreichbarkeit eines Empfängers geben. Dies ist also Prinzipbedingt und muß durch externen Code erledigt werden. Eine Möglichkeit, so wie ich sie bei meinen Mailslots genutzt habe, ist es das der Empfänger auf die gesendete Message antworten muß. Der Absender sendet nun seine Message und wartet auf die Bestätigungen der Empfänger. Die andere Möglichkeit wäre es die Verfügbarkeit des Empfängers zu überprüfen, sprich übers Netzwerk-API oder Socket-API die IP o.ä. herauszubekommen. Dies reicht aber nicht aus um zu erkennen ob der Empfämger-Mailslot auch tatsächlich die Nachricht empfangen hat. Am besten wäre es nun eine Software zu coden die einen eigenen Mailslot einrichtet. Über diesen werden die Nachrichten im Netzwek vesendet und eben auch der Empfang bestätigt. Diese Software leitet eventuell diese Nachrichten an den lokalen Messanger-Mailslot weiter.
Attached mein Mailslot Program das die Funktionen des Messangers ersetzt. Gruß Hagen |
Re: Net Send mit Mailslots
Zitat:
Danke Hagen, werde ich mir mal ankucken. |
Re: Net Send mit Mailslots
Zitat:
|
Re: Net Send mit Mailslots
@Luckie: "Public Domian Code" zuviel Fernsehen geschaut? Domian war doch so ein Fernseh-Seelenklempner ;)
|
Re: Net Send mit Mailslots
Da habe ich ja angerufen, aber der konnte mir auch nicht helfen. :?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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