Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.08.2015, 12:30
flanger05 flanger05 вне форума
Прохожий
 
Регистрация: 25.08.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Результат доступности компа через пинг с условием

Здравствуйте, есть такая программка копирования файла на рабочие столы выбранных сетевых компов. Но если некоторые компы из выбранных не в сети - получаем тормоза. Хотелось бы проверить их минимальным пингом перед копированием. Пробовал 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  
Старый 30.08.2015, 19:32
flanger05 flanger05 вне форума
Прохожий
 
Регистрация: 25.08.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

есть конечно вариант
Код:
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  
Старый 31.08.2015, 00:43
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
Сообщение от flanger05
есть такая программка копирования файла на рабочие столы выбранных сетевых компов. Но если некоторые компы из выбранных не в сети - получаем тормоза
А как строиться список сетевых компьютеров? Почему бы их сразу не делить по группам "В сети" и "Не в сети"? Потом бы не пришлось думать, как проверить его доступность.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter