|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Результат доступности компа через пинг с условием
Здравствуйте, есть такая программка копирования файла на рабочие столы выбранных сетевых компов. Но если некоторые компы из выбранных не в сети - получаем тормоза. Хотелось бы проверить их минимальным пингом перед копированием. Пробовал IdIcmpClient, но что-то не пойму там с обработкой результата... Как-бы так сделать, чтобы в коде вместо if DirectoryExists(.........) then (перед копированием файла) вставить именно команду пинга и тут же обработать ответ: если пинг есть - копируем файл, нет - пишем в лог, что не смогли достучаться.
Гуглил очень долго.. Но что-то не раздуплю никак Помогите, спасибо Код:
unit copy; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, FileCtrl, ShellApi; type TForm1 = class(TForm) GroupBox1: TGroupBox; GroupBox2: TGroupBox; Button1: TButton; Edit1: TEdit; Button2: TButton; OpenDialog1: TOpenDialog; Button3: TButton; CheckBox1: TCheckBox; RadioGroup1: TRadioGroup; RadioButton1: TRadioButton; RadioButton2: TRadioButton; CheckBox2: TCheckBox; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; destination: string; bazarkina: string; bogacheva: string; txt:System.Text; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin bazarkina:='192.168.2.25'; bogacheva:='192.168.2.27'; end; procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then Edit1.Text:=OpenDialog1.FileName; end; procedure TForm1.Button3Click(Sender: TObject); begin Edit1.Clear; end; procedure TForm1.Button2Click(Sender: TObject); begin AssignFile(txt,'log.txt'); //регистрация файла Rewrite(txt); //создание файла if RadioButton1.Checked=True then destination:='\C$\Users\Public\Desktop\'; if RadioButton2.Checked=True then destination:='\C$\Documents and Settings\All Users\Рабочий стол\'; If CheckBox1.Checked=true then begin if DirectoryExists(bazarkina) then begin CopyFile(Pchar (OpenDialog1.FileName), Pchar('\\'+bazarkina+destination+ExtractFileName(OpenDialog1.FileName)),False); WriteLn(txt,'Базаркина - ОК') end else WriteLn(txt,'Базаркина - не скопировано'); end; If CheckBox2.Checked=true then begin if DirectoryExists(bogacheva) then begin CopyFile(Pchar (OpenDialog1.FileName), Pchar('\\'+bogacheva+destination+ExtractFileName(OpenDialog1.FileName)),False); WriteLn(txt,'Богачева - ОК') end else WriteLn(txt,'Богачева - не скопировано'); end; CloseFile(txt); ShellExecute(Handle, 'open', 'log.txt', nil, nil, SW_SHOWNORMAL); end; end. |
#2
|
|||
|
|||
есть конечно вариант
Код:
procedure TForm1.Button1Click(Sender: TObject); begin Form1.IdIcmpClient1.Host:='192.168.2.35'; IdIcmpClient1.Ping(); end; procedure TForm1.IdIcmpClient1Reply(ASender: TComponent; const AReplyStatus: TReplyStatus); begin if AReplyStatus.MsRoundTripTime = 0 then КОМП В СЕТИ else НЕ В СЕТИ end; Но тут есть одно НО для меня. Мне нужно, чтобы действия процедуры TForm1.IdIcmpClient1Reply выполнялись в процедуре TForm1.Button1Click, то бишь там, где у меня осуществляется непосредственно копирование. И перед ним надо обработать результат пинга, чтобы понять - копировать начинать или нет. Вот как это сделать я что-то не пойму. Мне не нужен обработчик результата пинга после кнопки.. |
#3
|
||||
|
||||
Цитата:
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |