Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Message   Найти похожие ветки 

 
pkm   (2004-09-07 19:26) [0]

Доброе время суток. Подскажите с помощью  каких процедур и функций в Delphi можно написать программку, отправляющие сообщения на другие компьютеры находящиеся в сети. Спасибо за внимание.


 
Rouse_ ©   (2004-09-07 20:29) [1]

NetMessageBuferSend или мэйлслоты или ShellExecute(WinExec) с использованием "net send /?"


 
dr Tr0jan   (2004-09-08 09:15) [2]

А как экспортировать NetMessageBufferSend (ИМХО, это надо делать из netapi32.dll)?


 
Rouse_ ©   (2004-09-08 09:41) [3]

 function NetMessageBufferSend(servername: LPCWSTR; msgname: LPCWSTR;
   fromname: LPCWSTR; buf: Pointer; buflen: DWORD): DWORD; stdcall;
   external "NETAPI32.DLL";


 
Дмитрий Ботвин   (2004-09-08 10:56) [4]

Вот тебе работающий модуль:

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.


 
Artin   (2004-09-08 17:05) [5]

Кочай исходники.
http://www.verf.ru/delphi/get.php?arts/netsendD7.zip
ЗЫ
Думаю что у тебя она откроется с ошибкой, удаляй всё что вызывает ошибки. Всё работает !
Если запустишь с параметром то параметр и будет твоё имя!
NetSend.exe Имя



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.031 c
14-1098448011
Qwest
2004-10-22 16:26
2004.11.14
Задачи.


14-1098442162
Opilki_Inside
2004-10-22 14:49
2004.11.14
Перевод ASCII - графики в RTF,HTML,DOC...


14-1098814791
Rouse_
2004-10-26 22:19
2004.11.14
Саунд трек к "Бар Гадкий Койот"


3-1098083044
alsov1
2004-10-18 11:04
2004.11.14
Глюки с TSQLConnection


14-1099116614
gn
2004-10-30 10:10
2004.11.14
ИСЛАМСКИЕ ХАКЕРЫ НАСТУПАЮТ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский