Проблема в следующем: мне надо диагностировать наличие подключения к сети и если оно Offline то вывести диалог дозвона по Dial-Up, если клиент подключается только по LAN то это уже не мои проблемы
Решаю данную задачу следующим образом:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, WinInet, dialogs,
ShellApi, IdBaseComponent, IdIntercept, RasManager, IdComponent,
IdTCPConnection, IdTCPClient;
const
INTERNET_CONNECTION_MODEM = $1;
INTERNET_CONNECTION_LAN = $2;
INTERNET_CONNECTION_PROXY = $4;
INTERNET_RAS_INSTALLED = $10;
INTERNET_CONNECTION_OFFLINE = $20;
INTERNET_CONNECTION_CONFIGURED = $40;
winetdll='wininet.dll';
function InternetGetConnectedStateEx(var dwFlags:DWORD; lpszConnectionName:LPTSTR; dwNameLen,dwReserved:WORD):BOOL; stdcall;
function InternetAutodial(dwFlags: DWORD; dwReserved: DWORD): BOOL; stdcall; external winetdll;
type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
WinInetDLL: THandle =0;
_InternetOpenA: function(lpszAgent:PAnsiChar; dwAccessType:DWORD; lpszProxy,lpszProxyBypass: PAnsiChar; dwFlags:DWORD):HINTERNET; stdcall;
_InternetOpenURLA: function(hInet:HINTERNET; lpszUrl:PAnsiChar; lpszHeaders:PAnsiChar; dwHeadersLength:DWORD; dwFlags:DWORD; dwContext:DWORD):HINTERNET; stdcall;
_InternetReadFile: function(hFile:HINTERNET; lpBuffer:Pointer; dwNumberOfBytesToRead:DWORD; var lpdwNumberOfBytesRead:DWORD):BOOL; stdcall;
_InternetCloseHandle: function(hInet:HINTERNET): BOOL; stdcall;
implementation
function InternetGetConnectedStateEx; external winetdll name 'InternetGetConnectedStateEx';
{$R *.dfm}
procedure InitWinInet;
var
OldError: Longint;
begin
OldError:=SetErrorMode(SEM_NOOPENFILEERRORBOX);
try
if (WinInetDLL=0) then
begin
WinInetDLL:=LoadLibrary('wininet.dll');
if (WinInetDLL<>0) then
begin
@_InternetOpenA:=GetProcAddress(WinInetDLL,'InternetOpenA');
@_InternetOpenURLA:=GetProcAddress(WinInetDLL,'InternetOpenUrlA');
@_InternetReadFile:=GetProcAddress(WinInetDLL,'InternetReadFile');
@_InternetCloseHandle:=GetProcAddress(WinInetDLL,'InternetCloseHandle');
end;
end;
finally
SetErrorMode(OldError);
end;
end;
procedure TForm1.FormClick(Sender: TObject);
var
dwFlags: DWORD;
msg: string;
conName: LPTSTR;
b: boolean;
begin
if (WinInetDLL=0) then InitWinInet;
if (WinInetDLL<>0) then
begin
// долго и нудно проверяем тип и статус подключения :)
// если это модемное соединение и оно оффлайн то
b:=InternetAutoDial(0,0);
if (b=true) then showMessage('true');
end else ShowMessage('Не удалось загрузить WinInet.dll');
end;
end.
и вот проблема в том что InternetAutoDial всегда возвращает true, а окно диалога не появляется

чего я делаю не так? В системе настроено 2 подключения модемное и LAN, даже после удаления LAN подключения диалог не появляется...
пробовал как в W2К так и в ХР, под 5-ми и 7-ми делфями