Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Отклучить установленное модемное соединение


Автор: SP@wn 4.11.2004, 01:14
Необходимо по таймеру отклучить модемное соединение.
Как это сделать?

Автор: bartram 14.11.2004, 22:40
Цитата(SP @ 4.11.2004, 01:14)
Необходимо по таймеру отклучить модемное соединение.
Как это сделать?

Какое именно соединение с интернетом или с локалкой?

Автор: Гость_SoWa 16.11.2004, 14:30
Используй LineDrop (есть в Дельфи: СЕТИ) Автор- SoWa

Автор: SP@wn 21.11.2004, 01:54
Цитата(bartram @ 14.11.2004, 22:40)
Цитата(SP @ 4.11.2004, 01:14)
Необходимо по таймеру отклучить модемное соединение.
Как это сделать?

Какое именно соединение с интернетом или с локалкой?

соединение с интернетом

Автор: Girder 21.11.2004, 14:11
Процедура отключения всех Dial-Up соединений.
PS:Таймер сам приделаеш... smile
Код
procedure TForm1.Button1Click(Sender: TObject);
type
PRasConn=^TRasConn;
TRasConn=record
 dwSize:DWord;
 hRasConn:THandle;
 szEntryName:array [0..20] of Char;
end;
TRasHangUp=function(hRasConn:THandle):DWord; stdcall;
TRasEnumConnections=function(RasConn:PChar; var bSize:DWord;
                             var ConnCount:DWord):DWord; stdcall;
var RasApi:Cardinal;
   RasEnumConnections:TRasEnumConnections;
   RasHangUp:TRasHangUp;
   bSize,ConnCount,j:DWord;
   RasConn:TRasConn;
   ArrRasConn,RasOld:PChar;
begin
Memo1.Clear;
RasApi:=LoadLibrary('RasApi32.dll');
if RasApi<>0 then
 begin
  RasEnumConnections:=GetProcAddress(RasApi,'RasEnumConnectionsA');
  RasHangUp:=GetProcAddress(RasApi,'RasHangUpA');
  if (Assigned(RasEnumConnections))and(Assigned(RasHangUp)) then
   begin
    bSize:=0;
    RasConn.dwSize:=SizeOf(TRasConn);
    RasEnumConnections(@RasConn,bSize,ConnCount);
    if bSize>0 then
     begin
      Memo1.Lines.Add('Активных Dial-Up соединений: '+IntToStr(ConnCount));
      try
       GetMem(ArrRasConn,bSize);
       PRasConn(ArrRasConn)^.dwSize:=SizeOf(TRasConn);
       j:=bSize;
       RasOld:=ArrRasConn;
       if RasEnumConnections(ArrRasConn,j,ConnCount)=0 then
        for j:=1 to ConnCount do
         begin
          Memo1.Lines.Add('Соединение '+IntToStr(j)+':');
          Memo1.Lines.Add(' - Дескриптор: '+IntToStr(PRasConn(ArrRasConn)^.hRasConn));
          Memo1.Lines.Add(' - Название: '+PRasConn(ArrRasConn)^.szEntryName);
          {Отключаем соединение}
          try
           while RasHangUp(PRasConn(ArrRasConn)^.hRasConn)=0 do
            begin
             Application.ProcessMessages;
             Sleep(0);
            end;
          except
          end;
          inc(PRasConn(ArrRasConn));
         end;
       FreeMem(RasOld,bSize);
      except
      end;
     end;
   end;
  FreeLibrary(RasApi);
 end;
end;


Удачи.

Автор: SP@wn 22.11.2004, 00:58
!!огромное спасибо!!

Автор: Akella 11.5.2005, 16:40
Код

procedure TfmSendFiles.bbDialClick(Sender: TObject);
var
   dwConnectionTypes: DWORD;
begin
  dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
  INTERNET_CONNECTION_PROXY;
  if not InternetGetConnectedState(@dwConnectionTypes, 0) then
  // not connected
    if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or
    INTERNET_AUTODIAL_FORCE_UNATTENDED, 0) then begin
      ShowMessage('Îøèáêà äîçâîíà ê Èíòåðíåò.');
    end;//if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or
end;

procedure TfmSendFiles.HungUp;
var
 dwConnectionTypes: DWORD;
begin
  dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
  INTERNET_CONNECTION_PROXY;
  if InternetGetConnectedState(@dwConnectionTypes, 0) then begin
    StatusBar1.SimpleText := 'Îòêëþ÷åíèå';
    InternetAutodialHangup(0);
  end;
  StatusBar1.SimpleText:='Îòêëþ÷åíî';  
end;


Добавлено @ 16:41
в USES нужно поставить WinInet

Автор: Мебель 13.5.2005, 03:07
Вещи очень полезные, мне тоже пригодится! Спасибо. smile

Автор: Cashey 21.11.2008, 15:59
Цитата(Akella @ 11.5.2005,  17:40)
Код

procedure TfmSendFiles.bbDialClick(Sender: TObject);
var
   dwConnectionTypes: DWORD;
begin
  dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
  INTERNET_CONNECTION_PROXY;
  if not InternetGetConnectedState(@dwConnectionTypes, 0) then
  // not connected
    if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or
    INTERNET_AUTODIAL_FORCE_UNATTENDED, 0) then begin
      ShowMessage('Îøèáêà äîçâîíà ê Èíòåðíåò.');
    end;//if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or
end;

procedure TfmSendFiles.HungUp;
var
 dwConnectionTypes: DWORD;
begin
  dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
  INTERNET_CONNECTION_PROXY;
  if InternetGetConnectedState(@dwConnectionTypes, 0) then begin
    StatusBar1.SimpleText := 'Îòêëþ÷åíèå';
    InternetAutodialHangup(0);
  end;
  StatusBar1.SimpleText:='Îòêëþ÷åíî';  
end;

 
 Добавлено @ 16:41 
 в USES нужно поставить WinInet

Как оказывается при ADSL соединение это не работает. Даже если соединение выставленно "по умолчанию".

Автор: Jannet 13.9.2010, 11:18
а меня возник такой вопрос: после отключения соединения PPPoE и использования метода RasHangUp, не сбрасывается состояние порта и потом порт всегда занят. как решить данную проблему? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)