Для того чтоб проверить есть ли подключение к интернету я использую вот этот код:
function GetConnect(var strKind: string): Boolean;
var
flags: DWORD;
begin
strKind := '';
Result := InternetGetConnectedState(@flags, 0);
if Result then
begin
if (flags and 1) = 1 then strKind := 'Modem';
if (flags and 2) = 2 then strKind := 'LAN';
if (flags and 4) = 4 then strKind := 'Proxy';
if (flags and 8) = 8 then strKind := 'Modem Busy';
end;
end;
if GetConnect(strKind)and(strkind='Modem') then
begin
ShowMessage('есть');
else
ShowMessage('нету');
end;
Оно безупречно работает когда выходиш под обычным модемом. Но когда через ADSL то нет! Что делать??? Как исправить? Может константы другие поставить? Или как?
---------------------------------------
Заранее всем спасибо!
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
27-09-2007 04:51 | Комментарий к предыдущим ответам
Я фигею дорогие товарищи... Вы что действительно считаете, что поменяв имя у винапишной константы (что само по себе преступление) ваш код стал волшебным образом определять ADSL-подключение?
У вас это работает только потому что используется USB-модем, с которым система работает аналогично обычным Dial-Up модемам, а если стоит сетевой (Ethernet) модем, то никакого "ADSL" вы не получите.
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function IsConnectedToInternet(lpdwFlags: LPDWORD): Boolean;
const
WininetDLL = 'wininet.dll';
var
hWininetDLL: THandle;
dwReserved: DWORD;
fn_InternetGetConnectedState: function(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall;
begin
Result := False;
dwReserved := 0;
hWininetDLL := LoadLibrary(WininetDLL);
if hWininetDLL > 0 then
begin
@fn_InternetGetConnectedState := GetProcAddress(hWininetDLL,'InternetGetConnectedState');
if Assigned(fn_InternetGetConnectedState) then
begin
Result := fn_InternetGetConnectedState(lpdwFlags, dwReserved);
end;
FreeLibrary(hWininetDLL);
end else
raise Exception.Create('Unable to locate function InternetGetConnectedState in library ' + WininetDLL);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
const
INTERNET_CONNECTION_ADSL = 1; //вот заменённый MODEM
INTERNET_CONNECTION_LAN = 2;
INTERNET_CONNECTION_PROXY = 4;
INTERNET_CONNECTION_MODEM_BUSY = 8;
var
dwConnectionTypes: DWORD;
begin
clipboard.Clear;
dwConnectionTypes :=
INTERNET_CONNECTION_ADSL + //и здесь
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if IsConnectedToInternet(@dwConnectionTypes) then
begin
edit1.text:='connected';
edit1.SelectAll;
edit1.CopyToClipboard;
end
else
edit1.Text:='disconnected';
edit1.SelectAll;
edit1.CopyToClipboard;
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.