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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2008, 06:38   #1
BanDit
Пользователь
 
Аватар для BanDit
 
Регистрация: 26.05.2007
Сообщений: 58
Счастье Установить соединение с интернетом

Можно ли программно установить соединение с интернетом.(Dial UP).
Использую такой код из "Delphi world", но НИЧЕГО не происходит.
Цитата:
uses
WinInet;


procedure TForm1.Button1Click(Sender: TObject);
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if not InternetGetConnectedState(@dwConnec tionTypes, 0) then
// not connected
if not InternetAutodial(INTERNET_AUTODIAL_ FORCE_ONLINE or
INTERNET_AUTODIAL_FORCE_UNATTENDED, 0) then
begin
// error
end;
end;


// hangup the default Internet connection.
procedure TForm1.Button2Click(Sender: TObject);
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if InternetGetConnectedState(@dwConnec tionTypes, 0) then
// connected
InternetAutodialHangup(0);
end;
BanDit вне форума Ответить с цитированием
Старый 17.01.2008, 21:59   #2
Vladimir K.
Пользователь
 
Регистрация: 25.12.2006
Сообщений: 64
По умолчанию

Попробуй так (на форму помести две кнопки, окно ричэдит и компонент IdHTTP1; кликни баттон2 - прога подключится к инету, зайдет на яндекс, отыщет на странице слово Новости (для проверки, что загрузка успешна), отключится от инета и выведет в окно инфу о своей работе):
Цитата:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdHttp, StdCtrls, ComCtrls, ActiveX, MsHtml, IdBaseComponent,
IdCookieManager, IdComponent, IdTCPConnection, IdTCPClient, IdIntercept,
IdSocks, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, WinInet, Registry, WinSock;

.
.
.

implementation
{$R *.dfm}

var C:integer=0; //Счетчик заходов на сайт
t:integer=0; //Счетчик отсутствия соединения

// Поиск данных
// Проверка подключения к интернету

procedure TForm1.Connect(N,s:string);
var i:integer;
begin
if s<>'' then
begin
i:=Pos(AnsiLowerCase('Новости'),Ans iLowerCase(s)); //Ищем на странице слово Новости - это покажет, что страница загрузилась верно
if i<=0 then
begin
RichEdit1.Lines.Add('Подключение к инету отсутствует...');
exit;
end
else
begin
s:=s[i]+s[i+1]+s[i+2]+s[i+3]+s[i+4]+s[i+5]+s[i+6];
RichEdit1.Lines.Add(N+s);
exit;
end;
end;
end;

function IsConnection(URL:string):boolean;
var
hSession,hfile: hInternet;
dwindex,dwcodelen: dword;
dwcode: array[1..20] of char;
res: pchar;
begin
Result:= false;
if URL = '' then exit;
hSession:= InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,n il,
nil, 0);
if assigned(hsession) then
begin
hfile:= InternetOpenUrl(hsession,pchar(URL) ,nil,0,INTERNET_FLAG_RELOAD,0);
dwIndex:= 0;
dwCodeLen:= 10;
HttpQueryInfo(hfile,HTTP_QUERY_STAT US_CODE,@dwcode,dwcodeLen,dwIndex);
res:= pchar(@dwcode);
result:= (res ='200') or (res ='302');
if assigned(hfile) then InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;

//-----------------
procedure TForm1.Button2Click(Sender: TObject);
var lData: TStringList;
N,s:string;
url:string;
begin
//-----------------
// Проверка подключения к интернету - если поключ. нет - подключить:

url:='http://yandex.ru';
if IsConnection(url) then
begin
RichEdit1.Lines.Add('Есть связь');
t:=0;
end
else
begin
RichEdit1.Lines.Add('Нет связи...');
If t=10 then exit;
inc(t);
Button2Click(Sender);
end;

N:='yandex.ru: ';
lData := TStringList.Create;

try
IdHTTP1.Post('http://yandex.ru', lData);
finally
lData.Free;
end;

try
s:=IdHTTP1.Get('http://yandex.ru');
Connect(N,s); //Проверка
except
N:='yandex.ru: Нет связи...';
s:='';
Connect(N,s); //Проверка
end;
//-------------------------

Button3Click(Sender); //разрыв соединения

end;

//-------------------------
// Отключить соединение
//-------------------------
procedure TForm1.Button3Click(Sender: TObject);
type
PRasConn=^TRasConn;
TRasConn=record
dwSize:DWord;
hRasConn:THandle;
szEntryName:array [0..20] of Char;
end;
TRasHangUp=function(hRasConn:THandl e):DWord; stdcall;
TRasEnumConnections=function(RasCon n:PChar; var bSize:DWord;
var ConnCount:DWord):DWord; stdcall;
var RasApi:Cardinal;
RasEnumConnections:TRasEnumConnecti ons;
RasHangUp:TRasHangUp;
bSize,ConnCount,j:DWord;
RasConn:TRasConn;
ArrRasConn,RasOld:PChar;
begin
RasApi:=LoadLibrary('RasApi32.dll') ;
if RasApi<>0 then
begin
RasEnumConnections:=GetProcAddress( RasApi,'RasEnumConnectionsA');
RasHangUp:=GetProcAddress(RasApi,'R asHangUpA');
if (Assigned(RasEnumConnections))and(A ssigned(RasHangUp)) then
begin
bSize:=0;
RasConn.dwSize:=SizeOf(TRasConn);
RasEnumConnections(@RasConn,bSize,C onnCount);
if bSize>0 then
begin
RichEdit1.Lines.Add('Активных Dial-Up соединений: '+IntToStr(ConnCount));
try
GetMem(ArrRasConn,bSize);
PRasConn(ArrRasConn)^.dwSize:=SizeO f(TRasConn);
j:=bSize;
RasOld:=ArrRasConn;
if RasEnumConnections(ArrRasConn,j,Con nCount)=0 then
for j:=1 to ConnCount do
begin
RichEdit1.Lines.Add('Соединение '+IntToStr(j)+':');
RichEdit1.Lines.Add(' - Дескриптор: '+IntToStr(PRasConn(ArrRasConn)^.hR asConn));
RichEdit1.Lines.Add(' - Название: '+PRasConn(ArrRasConn)^.szEntryName );
Inc(C);
RichEdit1.Lines.Add('Соединение № ¹'+IntToStr(C));
RichEdit1.Lines.Add('');
{Отключаем соединение}
try
while RasHangUp(PRasConn(ArrRasConn)^.hRa sConn)=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;

end.
Vladimir K. вне форума Ответить с цитированием
Старый 17.01.2008, 22:22   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Vladimir K.
что- то я не заметил в вопросе просьбы относительности серфинга и парсинга.
BanDit
Смотреть надо в сторону RasApi в коде Vladimir K. присутствует кусок, который вам необходим, можете его попросить выудить его оттуда.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 17.01.2008, 22:44   #4
Vladimir K.
Пользователь
 
Регистрация: 25.12.2006
Сообщений: 64
По умолчанию

Я помочь хотел, выложил полностью рабочую прогу - испытать... Больше не буду.

Код:
function IsConnection(URL:string):boolean;
var
hSession,hfile: hInternet;
dwindex,dwcodelen: dword;
dwcode: array[1..20] of char;
res: pchar;
begin
Result:= false;
if URL = '' then exit;
hSession:= InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,nil,
nil, 0);
if assigned(hsession) then
begin
hfile:= InternetOpenUrl(hsession,pchar(URL),nil,0,INTERNET _FLAG_RELOAD,0);
dwIndex:= 0;
dwCodeLen:= 10;
HttpQueryInfo(hfile,HTTP_QUERY_STATUS_CODE,@dwcode ,dwcodeLen,dwIndex);
res:= pchar(@dwcode);
result:= (res ='200') or (res ='302');
if assigned(hfile) then InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
Вызывать эту функцию:

Код:
url:='http://yandex.ru';
if IsConnection(url) then ...
Vladimir K. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с интернетом Логинова Надежда Компьютерное железо 3 07.05.2008 21:01
как програмно разорвать соединение с интернетом shurik_7866 Работа с сетью в Delphi 4 24.01.2008 13:06
как разорвать соединение с интернетом shurik_7866 Работа с сетью в Delphi 0 22.01.2008 20:32