Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-93480
maxXP
2004-01-15 17:46
2004.01.29
Как в listbox определить количество существующих элементов?


7-93716
Davey
2003-11-10 15:14
2004.01.29
загрузка памяти процессом


1-93458
Taras
2004-01-16 09:54
2004.01.29
Как перезапустить мое приложение?


1-93463
Cerber
2004-01-14 18:41
2004.01.29
Файлы


4-93732
voe
2003-11-22 03:10
2004.01.29
Запуск exe файла...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский