(Gast)
n/a Beiträge
|
NetMessageBufferSend / WinPopup/NET SEND "manuell"
8. Jul 2003, 22:55
Grade verfaßt. Ist hiermit PUBLIC DOMAIN.
Die Funktionalität entspricht in etwa der von NetMessageBufferSend()
Delphi-Quellcode:
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;
[edit=Daniel B]Ein paar Leerstellen im Titel eingefügt. Mfg, Daniel B[/edit]
[edit=Daniel B] Mfg, Daniel B[/edit]
@Daniel: Sah nicht grad besser aus da ist was schiefgegangen mit den Hochkommata.
[edit=Daniel B] Mfg, Daniel B[/edit]
|
|
Zitat
|