Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

Как отловить установление dialup соединения,.   Найти похожие ветки 

 
NoIdeaAboutName   (2003-12-22 22:52) [0]

Собственно программа должна как то узнать что user установил dialup соединение, подскажите plz, как это сделать? или хотя бы что сначала почитать, может статью какую-нить,.


 
alex-drob   (2003-12-23 01:12) [1]

По нажатию на кнопку появляется сообщение. Если не 0 - есть соединения с Интернетом. А в заголовке формы показывается тип соединения.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Registry, WinSock, WinInet, StdCtrls;

type
TConnectionType = (ctNone, ctProxy, ctDialup);

function ConnectedToInternet : TConnectionType;
function RasConnectionCount : Integer;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

//For RasConnectionCount =======================
const
cERROR_BUFFER_TOO_SMALL = 603;
cRAS_MaxEntryName = 256;
cRAS_MaxDeviceName = 128;
cRAS_MaxDeviceType = 16;
type
ERasError = class(Exception);

HRASConn = DWord;
PRASConn = ^TRASConn;
TRASConn = record
dwSize: DWORD;
rasConn: HRASConn;
szEntryName: Array[0..cRAS_MaxEntryName] Of Char;
szDeviceType : Array[0..cRAS_MaxDeviceType] Of Char;
szDeviceName : Array [0..cRAS_MaxDeviceName] of char;
end;

TRasEnumConnections =
function (RASConn: PrasConn; { buffer to receive Connections data }
var BufSize: DWord; { size in bytes of buffer }
var Connections: DWord { number of Connections written to buffer }
): LongInt; stdcall;
//End RasConnectionCount =======================

function ConnectedToInternet: TConnectionType;
var
Reg : TRegistry;
bUseProxy : Boolean;
UseProxy : LongWord;
begin
Result := ctNone;
Reg := TRegistry.Create;
with REG do
try
try
RootKey := HKEY_CURRENT_USER;
if OpenKey("\Software\Microsoft\Windows\CurrentVersion\Internet settings",False) then begin
//I just try to read it, and trap an exception
if GetDataType("ProxyEnable") = rdBinary then
ReadBinaryData("ProxyEnable", UseProxy, SizeOf(LongWord) )
else begin
bUseProxy := ReadBool("ProxyEnable");
if bUseProxy then
UseProxy := 1
else
UseProxy := 0;
end;
if (UseProxy <> 0) and ( ReadString("ProxyServer") <> "" ) then Result := ctProxy;
end;
except
//Obviously not connected through a proxy
end;
finally
Free;
end;

//We can check RasConnectionCount even if dialup networking is not installed
//simply because it will return 0 if the DLL is not found.
if Result = ctNone then begin
if RasConnectionCount > 0 then Result := ctDialup;
end;
end;

function RasConnectionCount : Integer;
var
RasDLL : HInst;
Conns : Array[1..4] of TRasConn;
RasEnums : TRasEnumConnections;
BufSize : DWord;
NumConns : DWord;
RasResult : Longint;
begin
Result := 0;

//Load the RAS DLL
RasDLL := LoadLibrary("rasapi32.dll");
if RasDLL = 0 then exit;

try
RasEnums := GetProcAddress(RasDLL,"RasEnumConnectionsA");
if @RasEnums = nil then
raise ERasError.Create("RasEnumConnectionsA not found in rasapi32.dll");

Conns[1].dwSize := Sizeof (Conns[1]);
BufSize := SizeOf(Conns);

RasResult := RasEnums(@Conns, BufSize, NumConns);

If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result := NumConns;
finally
FreeLibrary(RasDLL);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(RasConnectionCount));
if ConnectedToInternet=ctNone then Form1.Caption:="ctNone";
if ConnectedToInternet=ctProxy then Form1.Caption:="ctProxy";
if ConnectedToInternet=ctDialup then Form1.Caption:="ctDialup";
end;

end.


 
NoIdeaAboutName   (2003-12-23 08:50) [2]

Mega респект, и СПАСИБО!


 
BSL   (2003-12-23 13:34) [3]

Сторка if RasConnectionCount > 0 then Result := ctDialup;
дукажет dialup подключение даже если оно не установлено, а, например, только набирается номер!...


 
Rem   (2003-12-24 12:14) [4]

Пингануть чей-то сайт в инете, например, www.microsoft.com. Если пинганулся - есть коннект к инету.


 
Карелин Артем   (2003-12-24 13:13) [5]

BSL © (23.12.03 13:34) [3]
Надо еще проверить статус соединения.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
7-94205
LOX
2003-09-05 14:12
2004.02.29
определить температуру винчестера.


6-94069
denkop
2003-12-16 01:47
2004.02.29
Проблема с сокетами


6-94085
Perf
2003-11-17 18:47
2004.02.29
Прога, которая ищет все компы в локальной сети


14-94146
ИМХО
2004-02-08 02:50
2004.02.29
По поводу Hotmail.com


14-94160
xion
2004-02-07 04:37
2004.02.29
Функция Shell_NotifyIcon у меня вызывает RunTime ошибки. Почему?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский