Q&A

  • 인터넷열결여부 어떻게 확인(내용과 같은 소스의 결과는 왜 항상 참이죠?)???
USES
WinInet;
..
..

function InternetConnected: Boolean;
CONST
// local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_MODEM = 1;
// local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_LAN = 2;
// local system uses a proxy server to connect to the Internet.
INTERNET_CONNECTION_PROXY = 4;
// local system's modem is busy with a non-Internet connection.
INTERNET_CONNECTION_MODEM_BUSY = 8;

VAR
dwConnectionTypes : DWORD;
BEGIN
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes,0);
END;

Tips에 퍼왔는데요!
실행을 해 보니 항상 결과는 참인데... 이래도 되는 건가요?
네트웍선을 뽑고 실행하면 거짓값이 반환되어야 하는데,
미치겠네요!
3  COMMENTS
  • Profile
    구창민 2002.07.23 04:25
    아래 함수를 이용해 보세요.

    결과는 즉시 나타나지 않습니다.

    지속적으로 조사하고 있어야 겠지요.

    그럼~ 항상 즐거운프로그래밍 하시길~

    function IsOnline: Boolean;
    var
    Size: Integer;
    PC: array[0..4] of Char;
    Key: hKey;

    function IsIPPresent: Boolean;
    type
       TaPInAddr = array[0..10] of PInAddr;
       PaPInAddr = ^TaPInAddr;
    var
       phe: PHostEnt;
       pptr: PaPInAddr;
       Buffer: array[0..63] of Char;
       I: Integer;
       GInitData: TWSAData;
       IP: string;
    begin
       WSAStartup($101, GInitData);
       Result := False;
       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
         IP := inet_ntoa(pptr^[I]^);
         Inc(I);
       end;
       WSACleanup;
       Result := (IP <> '') and (IP <> '127.0.0.1');
    end;

    begin
    if RegOpenKey(HKEY_LOCAL_MACHINE, 'SystemCurrentControlSetServicesRemoteAccess', Key) = ERROR_SUCCESS then
    begin
       Size := 4;
       if RegQueryValueEx(Key, 'Remote Connection', nil, nil, @PC, @Size) = ERROR_SUCCESS then
         Result := PC[0] = #1
       else
         Result := IsIPPresent;
       RegCloseKey(Key);
    end
    else
       Result := IsIPPresent;
    end;






  • Profile
    김동광 2002.07.23 06:00
    답변에 감사드립니다.

    아래 함수를 제 소스에 그대로 넣어 컴파일 해 보니,
    'PinAddr'변수 등등이 선언이 안되었다고 에러가 납니다.
    한 수 더 부탁드립니다.

    혹! 제가 뭘 잘못 알고 있나요? 관련 컴포넌트가 있나요?

    델프를 많이 해 보지는 않았습니다.
    완존 초보구요! 조그마한 프를 하면서 배우면서 하는 중입니다.


  • Profile
    이현철 2002.07.23 03:09
    가장 확실하고 간단한 방법은 프로그램 내부에서
    유명 사이트에 ping 을 해보는 것입니다.

    empas.co.kr   or  daum.net 등
    ping 이 된다면, 인터넷이 되는 것이겠죠? 하나의 사이트만 한다면
    불확실하니까 한 2~5개정도 두어서 ping되는 사이트가 한개라도
    았다면, 인터넷이 된다고 판명하시면됩니다