![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Message [D7, Win2k]
pkm © (2004-09-07 19:26:00)Доброе время суток. Подскажите с помощью каких процедур и функций в Delphi можно написать программку, отправляющие сообщения на другие компьютеры находящиеся в сети. Спасибо за внимание.
Artin (2004-09-08 17:05:00) [1]Кочай исходники.
http://www.verf.ru/delphi/get.php?arts/netsendD7.zip
ЗЫ
Думаю что у тебя она откроется с ошибкой, удаляй всё что вызывает ошибки. Всё работает !
Если запустишь с параметром то параметр и будет твоё имя!
NetSend.exe Имя
Дмитрий Ботвин (2004-09-08 10:56:00) [2]Вот тебе работающий модуль:
unit Unit6;
interface
uses
Windows, SysUtils, Forms, StdCtrls,
ExtCtrls, Classes, Controls;
type
TForm6 = class(TForm)
SendButton: TButton;
SendText: TEdit;
Label1: TLabel;
SendUser: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure SendTextChange(Sender: TObject);
procedure SendButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
Uses Unit1,Winsvc,lm;
//Доступность отпарвки сообщений
procedure TForm6.SendTextChange(Sender: TObject);
begin
if Length(SendText.Text)<>0 then SendButton.Enabled:=true
else SendButton.Enabled:=false;
end;
//Отправка сообщения
procedure TForm6.SendButtonClick(Sender: TObject);
var i: integer;
SList: TStringList;
Msg: String;
HostName,MessageName: WideString;
buflen: DWORD;
error: NET_API_STATUS;
begin
if Length(SendUser.Text)=0 then
begin
Application.MessageBox('Не указан пользователь, от имени которого отправляем!','Ошибка',MB_OK+MB_ICONSTOP);
exit;
end;
if Length(Form1.CompName.Text)<>0 then
begin
HostName:=WideString(Trim(Form1.CompName.Text));
MessageName:=WideString(Trim(SendText.Text));
buflen:=200;
error:=NetMessageBufferSend(nil,PWideChar(HostName),PWideChar(WideString(Trim(SendUser.Text))),PWideChar(MessageName),bu flen);
if error=NERR_Success then Application.MessageBox('Сообщение успешно отправлено!','Отправка сообщений',MB_OK+MB_ICONINFORMATION)
else Application.MessageBox('Сообщение не отправлено!'+#13#10+'Проверьте состояние службы сообщений','Отправка сообщений',MB_OK+MB_ICONSTOP);
Form6.Close;
end
else
begin
SList:=TStringList.Create;
for i:=0 to Form1.Computers.Items.Count-1 do
begin
HostName:=WideString(Trim(Form1.Computers.Items[i].Caption));
MessageName:=WideString(Trim(SendText.Text));
buflen:=200;
error:=NetMessageBufferSend(nil,PWideChar(HostName),PWideChar(WideString(Trim(SendUser.Text))),PWideChar(MessageName),bu flen);
if error<>NERR_Success then SList.Add(Form1.Computers.Items[i].Caption);
Label3.Caption:='Отправлено собщение на '+IntToStr(i+1)+' из '+IntToStr(Form1.Computers.Items.Count);
Application.ProcessMessages;
end;
if SList.Count=0 then Application.MessageBox('Сообщение успешно отправлено на все компьютеры!','Отправка сообщений',MB_OK+MB_ICONINFORMATION)
else
begin
for i:=0 to SList.Count-1 do
if i<SList.Count-1 then Msg:=Msg+SList.Strings[i]+', '
else Msg:=Msg+SList.Strings[i];
Application.MessageBox(PChar('Не смог отправить сообщение на следующие компьютеры: '+Msg),'Отправка сообщений',MB_OK+MB_ICONEXCLAMATION)
end;
Form6.Close;
end;
end;
//Текущий прользователь
function GetUserFromWindows: string;
Var
UserName : string;
UserNameLen : Dword;
Begin
UserNameLen := 50;
SetLength(userName, UserNameLen);
If GetUserName(PChar(UserName), UserNameLen) Then
Result := Copy(UserName,1,UserNameLen - 1)
Else Result := 'Unknown';
End;
//Управление заголовком
procedure TForm6.FormShow(Sender: TObject);
begin
if Length(Form1.CompName.Text)=0 then Form6.Caption:='Отправка сообщения на '+IntToStr(Form1.Computers.Items.Count)+' комьютер(а)(ов)'
else Form6.Caption:='Отправка сообщения на '+Trim(Form1.CompName.Text);
SendUser.Text:=GetUserFromWindows;
end;
end.
Rouse_ (2004-09-08 09:41:00) [3]
function NetMessageBufferSend(servername: LPCWSTR; msgname: LPCWSTR;
fromname: LPCWSTR; buf: Pointer; buflen: DWORD): DWORD; stdcall;
external 'NETAPI32.DLL';
dr Tr0jan (2004-09-08 09:15:00) [4]А как экспортировать NetMessageBufferSend (ИМХО, это надо делать из netapi32.dll)?
Rouse_ (2004-09-07 20:29:00) [5]NetMessageBuferSend или мэйлслоты или ShellExecute(WinExec) с использованием "net send /?"