Q&A

  • 인터넷연결유무함수인데 코딩좀 봐주세요.
팁에서 참고를 했는데요.
자꾸 Access violation 에러가 나네요.
어디서 부터 수정을 해야 할지 뭐가 잘못되었는지 잘 모르겠습니다.
고수님들의 조언 부탁드립니다.
참고로 저는 use절에 IdWinsock을 포함했습니다.

수고하십시오.

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;
1  COMMENTS
  • Profile
    이현철 2002.08.07 04:03
    저도 위 소스에 대해서 질문을 많이 받아봤는데..
    제대로 동작을 안한다고 들었습니다.. 확실한건 지는 모르겠지만..

    저 같은면,, 그냥 ping 을 이용해서 할 수 있을것 같은데요..
    주요 공개 서버 (엠파스 등..) 를 한 10개 지정해 놓고 ping 을 쳐보는거져
    되면 인터넷 되는 겁닏..

    -_-;;  ㅎㅎ