Форум: "Сети";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
ВнизАльтернатива net send? Найти похожие ветки
← →
DAnton (2003-11-24 16:21) [0]Подскажите пожалуйста как реализовать альтернативу виндового net send "чего-нибудь" ? Если можно с примерчиком.
PS: И если можно то без ограничения длинны сообщения в 250 символов (в винде помоему столько).
← →
DAnton (2003-11-24 16:23) [1]И самое интересное, можно ли будет отловить доставлено сообщение или нет.
← →
Rouse_ (2003-11-24 17:22) [2]http://delphimaster.net/view/6-1066114577/
Желаю успехов
← →
DAnton (2003-11-25 08:10) [3]Спасибочки.
Если честно, то я ничего там не понял. Попробовал, но не получилось. Пишет "неверный дескриптор".
← →
Rouse_ (2003-11-25 08:58) [4]Какой еще неверный дескриптор? В какой строке кода и какого именно кода? Там их два правильных... на отправку и прием...
← →
zxc (2003-11-25 15:29) [5]кстате почему то отправка на XP работать отказывается, приём не проверял
← →
Rouse_ (2003-11-25 16:29) [6]Скорее указан не верный получатель, поэтому и отказывается.
Кам код я проверял и под ХР и под 98
← →
OlegV (2003-11-25 16:44) [7]
> Если честно, то я ничего там не понял. Попробовал, но не
> получилось. Пишет "неверный дескриптор".
Возможно, отказывается открывать \\.\mailslot\ на прием сообщений т.к. работает служба сообщений.
← →
OlegV (2003-11-25 16:53) [8]
unit MailSlot;
interface
uses
Classes, ComCtrls;
type
TMailSlot = class(TThread)
private
FListView: TListView;
FMailSlot: THandle;
protected
procedure Execute; override;
procedure UpdateList;
public
constructor Create(AListView: TListView); reintroduce;
destructor Destroy; override;
end;
function OpenMailSlot (const Server, Slot: String): THandle;
function SendBufToMailSlot (const Server, Slot: String; Data: PChar; Length: Integer): Boolean;
function SendToWinpopup (Server, Reciever, Sender, Msg: String): Boolean;
implementation
uses
Windows, SysUtils, uProperty;
function OpenMailSlot (const Server, Slot: String): THandle;
var
FullSlot: String;
begin
FullSlot:="\\"+Server+"\mailslot\"+Slot;
Result:=CreateFile (PChar (FullSlot), GENERIC_WRITE, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
end;
function SendBufToMailSlot (const Server, Slot: String; Data: PChar; Length:
Integer): Boolean;
var
hToSlot: THandle;
BytesWritten: DWORD;
begin
Result:=False;
hToSlot:=OpenMailSlot (Server, Slot);
if hToSlot = INVALID_HANDLE_VALUE then
Exit;
try
BytesWritten:=0;
if (not WriteFile (hToSlot, Pointer (Data)^, Length, BytesWritten, nil)) or
(BytesWritten <> Length) then Exit;
Result:=True;
finally
CloseHandle (hToSlot);
end;
end;
function SendToWinpopup (Server, Reciever, Sender, Msg: String): Boolean;
var
S: String;
const
wpSlot = "messngr";
begin
Result := False;
try
CharToOEM (PChar (Server), PChar (Server));
CharToOEM (PChar (Sender), PChar (Sender));
CharToOEM (PChar (Reciever), PChar (Reciever));
CharToOEM (PChar (Msg), PChar (Msg));
S:=Sender+#0+Reciever+#0+Msg;
Result:=SendBufToMailSlot (Server, wpSlot, PChar(S), Length(S));
except
end;
end;
{ TMailSlot }
constructor TMailSlot.Create(AListView: TListView);
begin
FListView := AListView;
FMailSlot := CreateMailslot("\\.\mailslot\messngr", 0, MAILSLOT_WAIT_FOREVER, nil);
// MessageBeep(MB_ICONEXCLAMATION);
if FMailSlot = INVALID_HANDLE_VALUE then begin
MessageBeep($0FFFFFFFF);
MessageBox(GetForegroundWindow, PChar(SysErrorMessage(GetLastError)),
"Net Sender error", $1010);
end;
inherited Create (False);
end;
destructor TMailSlot.Destroy;
begin
CloseHandle(FMailSlot);
inherited Destroy;
end;
procedure TMailSlot.UpdateList;
var
CurrentSize, Size, Count: DWORD;
Msg: String;
Err: LongBool;
I: Integer;
From, sTo: String;
begin
Size := 10000;
SetLength(Msg, Size);
ReadFile(FMailSlot, Msg[1], Size, CurrentSize, nil);
SetLength (Msg, CurrentSize);
I := 1;
while (Msg[I] <> #0) do Inc(I);
From := Copy(Msg, 1, I - 1);
Delete(Msg, 1, I);
I := 1;
while (Msg[I] <> #0) do Inc(I);
sTo := Copy(Msg, 1, I - 1);
Delete(Msg, 1, I);
OemToChar(PChar(From), PChar(From));
OemToChar(PChar(sTo), PChar(sTo));
OemToChar(PChar(Msg), PChar(Msg));
// FListView.ItemIndex
// FListView.ItemFocused := FListView.Items.Add;
with FListView.Items.Add do begin
Caption := From;
SubItems.Add(sTo);
SubItems.Add(DateToStr(Date));
SubItems.Add(TimeToStr(Time));
SubItems.Add(Msg);
end;
if SystemParam.CheckMaxMessage then
while FListView.Items.Count > SystemParam.MaxMessage do
FListView.Items.Delete(0);
FListView.ItemIndex := FListView.Items.Count-1;
FListView.SetFocus;
MessageBeep($0FFFFFFFF);
end;
procedure TMailSlot.Execute;
var
Size, Count: DWORD;
Err: LongBool;
begin
while not Terminated do begin
Count := 0;
Err := GetMailSlotInfo(FMailSlot, nil, Size, @Count, nil);
if Err and (Count > 0) then
Synchronize (UpdateList);
Sleep (200);
end;
end;
end.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c