Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.29;
Скачать: CL | DM;

Вниз

Альтернатива 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
7-93705
NsiSoft
2003-11-04 15:03
2004.01.29
Скрыть программу в процессах?


3-93395
Прямой
2004-01-05 12:22
2004.01.29
ADOQuery ругается


1-93540
Zeon
2004-01-16 21:44
2004.01.29
Событийные процедуры.


1-93450
MakNik
2004-01-16 10:29
2004.01.29
dxDBGrid1


1-93475
dark_angel
2004-01-15 20:53
2004.01.29
Help