Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2009, 07:21   #1
delphin100
Он лайн
Форумчанин
 
Аватар для delphin100
 
Регистрация: 26.09.2007
Сообщений: 173
Сообщение Работа с подключением к интернету

Как сделать так чтобы программа сама подключала интернет, если есть подключение (в папке Сетевые подключения). Т.е. есть компьютер на котором есть интернет но он отключен, надо подключить интернет, сделать что-нибудь и если надо отключить обратно.
P.S.: Подключать/отключать надо прям на моём компьютере (т.е. без всякого удалённого доступа).
delphin100 вне форума Ответить с цитированием
Старый 04.02.2009, 09:57   #2
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

юзаем поиск

Код:
uses Ras;

var
  CurrentState: string = '';

{ Эта функция возвращает строку с
  рассшифровкой значений state и error: }
function StateStr(state: TRasConnState; error: longint): string;
var buf: array [0..511] of char; { В рelp-е написано,
                                   что 512 байт хватит всегда }
begin
  if error <> 0 then begin
    case RasGetErrorString(error, @buf, sizeof(buf)) of
      0: result := buf;
      ERROR_INVALID_PARAMETER: result := 'Invalid parameter';
      else result := 'Error code: ' + IntToStr(error);
    end;
  end else case state of
    RASCS_OpenPort: result := 'Opening port';
    RASCS_PortOpened: result := 'Port opened';
    RASCS_ConnectDevice: result := 'Connecting device';
    RASCS_DeviceConnected: result := 'Device connected';
    RASCS_AllDevicesConnected: result := 'All devices connected';
    RASCS_Authenticate: result := 'Start authenticating';
    RASCS_AuthNotify: result := 'Authentication: notify';
    RASCS_AuthRetry: result := 'Authentication: retry';
    RASCS_AuthCallback: result := 'Authentication: callback';
    RASCS_AuthChangePassword: result := 'Authentication: change password';
    RASCS_AuthProject: result := 'Authentication: projecting';
    RASCS_AuthLinkSpeed: result := 'Authentication: link speed';
    RASCS_AuthAck: result := 'Authentication: acknowledge';
    RASCS_ReAuthenticate: result := 'Authentication: reauthenticate';
    RASCS_Authenticated: result := 'Authenticated';
    RASCS_PrepareForCallback: result := 'Preparing for callback';
    RASCS_WaitForModemReset: result := 'Waiting for modem reset';
    RASCS_WaitForCallback: result := 'Waiting for callback';
    RASCS_Projected: result := 'Projected';
    RASCS_StartAuthentication: result := 'Start authentication';
    RASCS_CallbackComplete: result := 'Callback complete';
    RASCS_LogonNetwork: result := 'Logging on network';

    RASCS_Interactive: result := 'Interactive';
    RASCS_RetryAuthentication: result := 'Retry Authentication';
    RASCS_CallbackSetByCaller: result := 'Callback set by caller';
    RASCS_PasswordExpired: result := 'Password expired';

    RASCS_Connected: result := 'Connected';
    RASCS_Disconnected: result := 'Disconnected';
    else result := 'Unknown state';
  end;
end;

// Заполнение s всеми соединениями:
procedure FillEntries(s: TStrings);
var
  EntryCount, bufsize: longint;
  entries: LPRasEntryName;
  i: integer;
begin
  s.Clear;
  s.BeginUpdate;
  bufsize := 0;
  // Определение количества соединений:
  RasEnumEntries(nil, nil, nil, bufsize, EntryCount);
  if EntryCount > 0 then begin
    // Выделение памяти под информацию о соединениях:
    GetMem(entries, bufsize);
    FillChar(entries^, bufsize, 0);
    entries^.dwSize := sizeof(TRasEntryName);
    // Получение информации о соединениях:
    RasEnumEntries(nil, nil, entries, bufsize, EntryCount);
    // Заполнение s названиями соединений:
    for i := 0 to EntryCount - 1 do begin
      s.Add(entries^.szEntryName);
      inc(entries);
    end;
    // Освобождение памяти:
    dec(entries, EntryCount);
    FreeMem(entries);
  end;
  s.EndUpdate;
end;

// Заполнение items всеми активными соединениями:
procedure FillConnections(items: TListItems);
var
  conns: LPRasConn;
  ConnCount, bufsize: longint;
  li: TListItem;
  i: integer;
  status: TRASCONNSTATUS;
begin
  items.BeginUpdate;
  items.Clear;
  bufsize := 0;
  // Определение количества активных соединений:
  RasEnumConnections(nil, bufsize, ConnCount);
  if ConnCount > 0 then begin
    // Выделение памяти:
    GetMem(conns, bufsize);
    conns^.dwSize := sizeof(TRasConn);
    // Заполнение conns информацией об активных соединениях:
    RasEnumConnections(conns, bufsize, ConnCount);
    status.dwSize := sizeof(TRasConnStatus);
    // Заполнение items названиями соединений:
    for i := 0 to ConnCount - 1 do begin
      li := items.Add;
      li.Data := pointer(conns^.hrasconn);
      li.Caption := conns^.szEntryName;
      li.SubItems.Add(conns^.szDeviceType);
      li.SubItems.Add(conns^.szDeviceName);
      RasGetConnectStatus(conns^.hrasconn, status);
      li.SubItems.Add(StateStr(status.rasconnstate, status.dwError));
      inc(conns);
    end;
    // Освобождение памяти:
    dec(conns, ConnCount);
    FreeMem(conns);
  end;
  items.EndUpdate;
end;

{ Процедура разрывает соединение и
  дожидается завершения операции: }
procedure HangUpAndWait(conn: integer);
var
  status: TRasConnStatus;
begin
  RasHangUp(conn); // Разрыв соединения
  status.dwSize := sizeof(TRasConnStatus);
  // Ожидание уничтожения соединения:
  repeat
    Application.ProcessMessages;
    sleep(0);
  until RasGetConnectStatus(conn, status) = ERROR_INVALID_HANDLE;
end;
Перед тем как спросить ищи на форуме и в GOOGLE

Последний раз редактировалось KORN; 04.02.2009 в 13:19.
KORN вне форума Ответить с цитированием
Старый 04.02.2009, 13:19   #3
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

Код:
{ Эта процедура будет вызываться при любых изменениях в
  соединении: }
procedure RasNotifier(msg: integer; state: TRasConnState;
  error: Cardinal); stdcall;
begin
  CurrentState := StateStr(state, error);
  Form1.ListBox2.Items.Add(CurrentState);
  // Обновление информации об актывных соединениях:
  FillConnections(Form1.ListView1.Items);
  if error <> 0 then begin
    Form1.Timer1.Enabled := false;
    Form1.Caption := CurrentState;
  end else begin
    Form1.Timer1.Enabled := false;
    Form1.Timer1.Enabled := true;
    Form1.Timer1.Tag := 0;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Установка свойств компонентов (может быть реализована
    через ObjectInspector: }
  Timer1.Enabled := false;
  Button1.Caption := 'Update Entries';
  Button2.Caption := 'Update Conns';
  Button3.Caption := 'Hang Up';
  Button4.Caption := 'Dial Up';
  Button5.Caption := 'Save';
  ListView1.ViewStyle := vsReport; // Вид таблицы
  // Добавление колонок:
  ListView1.Columns.Add.Caption := 'Name';
  ListView1.Columns.Add.Caption := 'Device Type';
  ListView1.Columns.Add.Caption := 'Device Name';
  ListView1.Columns.Add.Caption := 'State';
  // Заполнение компонентов информацией:
  FillEntries(ListBox1.Items);
  FillConnections(ListView1.Items);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Обновление списка соединений:
  FillEntries(ListBox1.Items);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // Обновление информации об актывных соединениях:
  FillConnections(ListView1.Items);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  { Если соединений нет - выход, если одно - выделить его, если
    несколько, но ни одно не выделено - выход }
  case ListView1.Items.Count of
    0: Exit;
    1: ListView1.Selected := ListView1.Items[0];
    else if ListView1.Selected = nil then Exit;
  end;
  // Разрыв соединения:
  HangUpAndWait(longint(ListView1.Selected.Data));
  // Обновление информации об актыв  FillConnections(ListView1.Items);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  params: TRasDialParams;
  hRas: THRasConn;
begin
  if ListBox1.ItemIndex < 0 then Exit;
  ListBox2.Clear;

  // Заполнение params
  FillChar(params, sizeof(TRasDialParams), 0);
  params.dwSize := sizeof(TRasDialParams);
  StrPCopy(params.szEntryName, ListBox1.Items[ListBox1.ItemIndex]);
  StrPCopy(params.szUserName, Edit1.Text);
  StrPCopy(params.szPassword, Edit2.Text);
  // Установка связи:
  RasDial(nil, nil, params, 0, @RasNotifier, hRas);
end;

procedure TForm1.Button5Click(Sender: TObject);
var params: TRasDialParams;
begin
  // Сохранение имени пользователя и пароля:
  params.dwSize := sizeof(TRasDialParams);
  StrPCopy(params.szEntryName, ListBox1.Items[ListBox1.ItemIndex]);
  StrPCopy(params.szUserName, Edit1.Text);
  StrPCopy(params.szPassword, Edit2.Text);
  RasSetEntryDialParams(nil, params, false);
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  params: TRasDialParams;
  passw: longbool;
begin
  if ListBox1.ItemIndex < 0 then Exit;
  // Определение имени пользователя и пароля:
  fillchar(params, sizeof(TRasDialParams), 0);
  params.dwSize := sizeof(TRasDialParams);
  StrPCopy(params.szEntryName, ListBox1.Items[ListBox1.ItemIndex]);
  RasGetEntryDialParams(nil, params, passw);
  Edit1.Text := params.szUserName;
  if passw then begin
    // Пароль доступен
    Edit2.Text := params.szPassword;
    Button4.SetFocus;
  end else begin
    // Пароль не доступен
    Edit2.Text := '';
    Edit2.SetFocus;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  { Если действие происходит дольше секунды - в заголовок окна
    помещается информация о действии и время, которое оно
    происходит }
  Form1.Caption := CurrentState + ' - ' + IntToStr(Timer1.Tag);
  Timer1.Tag := Timer1.Tag + 1;
end;
http://www.delphisources.ru/pages/fa...on_params.html
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 05.02.2009, 07:08   #4
delphin100
Он лайн
Форумчанин
 
Аватар для delphin100
 
Регистрация: 26.09.2007
Сообщений: 173
По умолчанию

Информация хорошая только на DelphiSource где лежит "исходник" этой статьи указан сайт для скачки модуля но сайт не существует. А когда я все это функции пытаюсь засунуть в программу тогда нужны : типы и т.д. Подскажите может я "деревянный", а может тут правда чего не хватает.

Цитата:
как из Вашей программы подключиться к Интернету, определить активные соединения, определить и сохранить параметры соединения. Все эти функции находятся в rasapi32.dll. Описания этих функций для Delphi есть в модуле res.pas. Его можно скачать на сайте program.dax.ru (14 Кбайт).

Эта программа заполняет ListBox1 всеми соединениями, ListView1 - всеми активными соединениями. При двойном щелчке по соединению в Edit1 и Edi2 кладутся имя пользователя и пароль (если он сохранен). Кнопка "Dial Up" устанавливает соединение, "Save" сохраняет имя пользователя и пароль. "Hang Up" разрывает соединение. "Update Entries" и "Udate Conns" обновляют информацию о соединениях. В том случае, если связь разорвалась сама, для установления соединения необходимо сначала нажать "Hang Up".

Скачать необходимые для компиляции файлы проекта можно на http://program.dax.ru. Дустапны проекты для Delphi3 и для Delphi5.
delphin100 вне форума Ответить с цитированием
Старый 05.02.2009, 08:14   #5
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

или к примеру вот
http://www.realcoding.net/article/view/1456
http://www.delphisources.ru/pages/fa...beginners.html
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с подключением dll библиотеки Tan4ik Помощь студентам 7 01.03.2010 21:02
Проблема с подключением к MySQL [Smarik] БД в Delphi 16 06.02.2009 09:52
проблема с подключением к Mysql tibult БД в Delphi 0 09.01.2009 15:13
Проблемы с подключением Катрина БД в Delphi 3 19.05.2008 00:57
Подключение к интернету ilya_cska Общие вопросы .NET 0 10.03.2008 12:27