Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Как сделать что-б прога сама обнаружила коннект?   Найти похожие ветки 

 
0pavel0 ©   (2002-10-19 02:24) [0]

Умные дядьки подскажите пожалуйста:

Запустил свою прогу,вот она висит включенная,запускаю
internet explorer,коннектюсь,и когда законнектился моя
прога должна это определять(Без моего участия),и начинать
чёта делать!


Как ей самой понять,что я законнектился???

Заранее благодарен!!!


 
Rouse_ ©   (2002-10-19 02:42) [1]

Варианты
1. Определять состояние модема (не надежно)
2. Воспользоваться InternetGetConnectedState (не надежно)
3. Пинговать какой либо постоянный сервер (к примеру www.Microsoft.com)

Желаю успехов


 
esu ©   (2002-10-19 07:40) [2]


> 0pavel0 © (19.10.02 02:24)
> начинать
> чёта делать!

Spam рассылать например...


> примеру www.Microsoft.com

Они заблокировали ping. Наверное у слишком многих людей проги постоянно их пинговали ;)
BTW и ip у них некрасивый: 207.46.134.190 могли бы уж наверное и запоминающийся прикупить.


 
RV ©   (2002-10-19 09:00) [3]

esu © (19.10.02 07:40)

когда это они его блокировали?


 
guest_xxx   (2002-10-19 15:08) [4]

Надежного способа нет.


 
INCOGNITO ©   (2002-10-20 00:32) [5]

const
IC_Modem=1;
IC_LAN= 2;
IC_PROXY=3;
IC_MODEM_BUSY=4;
winetdll="wininet.dll";
...
...
function InternetGetConnectedState(lpdwFlags:LPDWORD; dwReserved: DWORD): BOOLEAN;
stdcall; external winetdll name"InternetGetConnectedState";
...
...
procedure TForm1.Timer1Timer(Sender: TObject);
var
dwConnectionTypes : DWORD;
begin
dwConnectionTypes:=IC_MODEM+IC_LAN+IC_PROXY;
if InternetGetConnectedState(@dwConnectionTypes,0) then...
end;
...
...


 
0pavel0 ©   (2002-10-20 03:45) [6]

Спасибо,но вопрос остаётся,есть програмка:

Dial-Up NetWorking Monitor v2,0

Она стабильно при коннекте запускает окно статистики,при
обрыве прячет !(может и есть исключения, но при нормально
работающей системе всё OK)
А при помощи установленного глобального HOOKa это
словить никак?
Если пинговать или опрашивать это не дело,прога должна
постоянно висеть в памяти и минимум тормозить систему.


 
Rouse_ ©   (2002-10-20 04:01) [7]

Действительно надежного способа нет, предлагаю почитать статьи на этом форуме и на королевстве дельфи.
Я бы определял по совокупности первого и третьего моих вариантов.

(Ну раз мелкософт заблокирован, и когда только успели) пингуй своего провайдера

Желаю успехов


 
0pavel0 ©   (2002-10-20 04:03) [8]

И ЕЩЁ

Раз это проблемма,идея:
Можно просто ждать появления иконки коннекта в systemtree,
и после производить свои действия.!

Как это реализовать?


 
Rouse_ ©   (2002-10-20 04:29) [9]

Можно, но есть идея и получше, напиши свою программу в виде прокси сервера, и коннкться через него, тогда ты 100% моментально узнаешь когда установилось соединение (в момент прихода ответа на запрос)

Желаю успехов


 
Юрий   (2002-10-24 04:30) [10]

{*************************************************************}
{ This component determines online status of the computer }
{ and returns current IP address }
{*************************************************************}
{ PROPERTIES: }
{ IP: String - Current IP address of local machine }
{ Online: Boolean - Online status of local machine }
{ DispatchInterval - Determines in milliseconds the }
{ intervals of time between testing }
{ online of a mode of computer }
{ Enabled: Boolean - As usual... =) }
{ EVENTS: }
{ OnChanged - causes if online status changed. }
{*************************************************************}
{ Please see demo program for more information. }
{*************************************************************}
unit OnlineIP;

interface

uses
Windows, Messages, Winsock, Classes, Forms;

type
TOnlineIP = class(TComponent)
private
FEnabled: Boolean;
FDispatchInterval: Cardinal;
FWindowHandle: hWnd;
FOnline: Boolean;
FIP: String;
FOnChanged: TNotifyEvent;

procedure UpdateTimer;
procedure SetEnabled(Value: Boolean);
procedure SetDispatchInterval(Value: Cardinal);
procedure SetNoneBool(Value: Boolean);
procedure SetNoneStr(Value: String);
procedure WndProc(var Msg: TMessage);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Enabled: Boolean read FEnabled write SetEnabled;
property DispatchInterval: Cardinal read FDispatchInterval write SetDispatchInterval;
property Online: Boolean read FOnline write SetNoneBool;
property IP: String read FIP write SetNoneStr;
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
end;

procedure Register;

implementation

function LocalIP: String;
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: Array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := "";
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^[I] <> nil do
begin
Result := inet_ntoa(pptr^[I]^);
Inc(I);
end;
WSACleanup;
end;

constructor TOnlineIP.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEnabled := True;
FDispatchInterval := 1000;
FWindowHandle := AllocateHWnd(WndProc);
UpdateTimer;
end;

destructor TOnlineIP.Destroy;
begin
FEnabled := False;
UpdateTimer;
DeallocateHWnd(FWindowHandle);
inherited Destroy;
end;

procedure TOnlineIP.WndProc(var Msg: TMessage);
var
OldState: Boolean;
begin
with Msg do
if Msg = wm_Timer then
try
FIP := LocalIP;
OldState := FOnline;
FOnline := (FIP <> "") and (FIP <> "127.0.0.1");
if (not OldState and FOnline) or
(OldState and not FOnline) then
if Assigned(FOnChanged) then FOnChanged(Self);
except
Application.HandleException(Self);
end
else
Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;

procedure TOnlineIP.UpdateTimer;
begin
KillTimer(FWindowHandle, 1);
if (FDispatchInterval <> 0) and FEnabled then
SetTimer(FWindowHandle, 1, FDispatchInterval, nil);
end;

procedure TOnlineIP.SetEnabled(Value: Boolean);
begin
if Value <> FEnabled then
begin
FEnabled := Value;
UpdateTimer;
end;
end;

procedure TOnlineIP.SetDispatchInterval(Value: Cardinal);
begin
if Value <> FDispatchInterval then
begin
FDispatchInterval := Value;
UpdateTimer;
end;
end;

procedure TOnlineIP.SetNoneBool(Value: Boolean); begin {} end;

procedure TOnlineIP.SetNoneStr(Value: String); begin {} end;

procedure Register;
begin
RegisterComponents("Designed", [TOnlineIP]);
end;

end.



 
Bsl   (2002-10-24 07:59) [11]

Попробуй через функции RSA (если для подключения используется удаленный доступ).



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

Текущий архив: 2002.12.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
1-61643
Виталик
2002-12-07 16:40
2002.12.19
MessageBox по центру моего окна (или в произвольном месте экрана)


4-61865
Vasily Terekhov
2002-11-06 12:04
2002.12.19
Минимизация приложения


8-61705
Владимир Васильев
2002-09-04 13:06
2002.12.19
NEWS: ЭКВАЛАЙЗЕР


1-61601
olden
2002-12-06 18:56
2002.12.19
как избежать прокрутки комбобокса колесом мышки


6-61728
delpher_gray
2002-10-20 17:51
2002.12.19
Передача данных через сокеты