Q&A

  • 인터넷이 연결되어 있는지 알려면 어떻게..
안녕하십니까..델파이를 사랑하는 여러분.

봄이 오는데 날씨는 겨울에 머물러 있습니다.



건강들 조심하세요..



조그마한 일정관리 프로그램을 만들고 있습니다.

여기에 특정한 Button을 누르면 IE, Netscape를 실행하고자 합니다.



고수님들이 올리신 방법으로 IE, Netscape를 실행시켰습니다.



그런데 궁금한점이, 저희는 LAN에 Web Server가 구축되어

있어 웹브라우저를 실행하는데 아무생각없어도 되잖아요.



허면, 가정에서 Modem, ISDN, ADSL를 사용할 경우나,

Web Server가 없는 LAN상에서는 무엇을 Check하여야 합니까?



즉, MessageDlg('ISP업체에 연결이 되지 않았습니다') 또는

MessageDlg('인터넷을 사용할 수 없습니다') 가

나타나게 하려면 무엇을, 어떻게 Check를 어떻게 해야합니까?.



너무 광범위한 질문이지만 여러고수님 조언 부탁드립니다...



3  COMMENTS
  • Profile
    초이 2000.02.25 21:01
    하늘소 wrote:

    > 안녕하십니까..델파이를 사랑하는 여러분.

    > 봄이 오는데 날씨는 겨울에 머물러 있습니다.

    >

    > 건강들 조심하세요..

    >

    > 조그마한 일정관리 프로그램을 만들고 있습니다.

    > 여기에 특정한 Button을 누르면 IE, Netscape를 실행하고자 합니다.

    >

    > 고수님들이 올리신 방법으로 IE, Netscape를 실행시켰습니다.

    >

    > 그런데 궁금한점이, 저희는 LAN에 Web Server가 구축되어

    > 있어 웹브라우저를 실행하는데 아무생각없어도 되잖아요.

    >

    > 허면, 가정에서 Modem, ISDN, ADSL를 사용할 경우나,

    > Web Server가 없는 LAN상에서는 무엇을 Check하여야 합니까?

    >

    > 즉, MessageDlg('ISP업체에 연결이 되지 않았습니다') 또는

    > MessageDlg('인터넷을 사용할 수 없습니다') 가

    > 나타나게 하려면 무엇을, 어떻게 Check를 어떻게 해야합니까?.

    >

    > 너무 광범위한 질문이지만 여러고수님 조언 부탁드립니다...

    >



    우선 아래의 내용은 김영대님의 홈페이지에서 인용한것임을 알려드립니다.



    -----------------------------------------------------------------------

    // 이 기능을 사용하려면 IE4.0 이상에서 사용하는 wininet.dll 의 함수의

    // prototype 중 빠진 부분을 SourceRTLWin 에 있는 wininet.pas 에 추가해야 합니다

    // wininet.pas 을 컴파일하여 wininet.dcu 를 Lib 디렉토리에 놓으세요

    // 아래 내용을 단계별로 작업하세요



    [1]. wininet.pas의 interface 에 아래 부분을 추가하세요



    {dwFlag for InternetAutodial}

    const

    INTERNET_AUTODIAL_FORCE_ONLINE = 1; //Forces an online Internet connection.

    INTERNET_AUTODIAL_FORCE_UNATTENDED = 2; //Forces an unattended Internet dial-up.

    INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4;



    {dwFlags for InternetDial}

    const

    INTERNET_DIAL_UNATTENDED = $8000; //Connects to the Internet through a modem, without displaying a user interface.



    {dwFlags for InternetGetConnectedState}

    const

    INTERNET_CONNECTION_MODEM = 1; // Local system uses a modem to connect to the Internet.

    INTERNET_CONNECTION_LAN = 2; // Local system uses a local area network to connect to the Internet.

    INTERNET_CONNECTION_PROXY = 4; // Local system uses a proxy server to connect to the Internet.

    INTERNET_CONNECTION_MODEM_BUSY = 8; // Local system's modem is busy with a non-Internet connection.



    {dwState for InternetSetDialState}

    const

    INTERNET_DIALSTATE_DISCONNECTED = 1;



    function InternetAutodial(dwFlags : DWORD; dwReserved : DWORD) : boolean; stdcall;

    function InternetAutodialHangup(dwReserved : DWORD) : boolean; stdcall;

    function InternetDial(hwndParent : HWND; lpszConnectionId : PChar; dwFlags : DWORD;

    lpdwConnection : Pointer; dwReserved : DWORD) : DWORD; stdcall;

    function InternetGetConnectedState(lpdwFlags : Pointer; dwReserved : DWORD) : boolean; stdcall;

    function InternetGoOnline(lpszUrl : PChar; hwndParent : HWND; dwReserved : DWORD) : boolean; stdcall;

    function InternetSetDialState(lpszConnectionID : PChar; dwState : DWORD; dwReserved : DWORD) : boolean; stdcall;





    [2] implementation 에 아래 부분을 추가하세요



    function InternetAutodial; external winetdll name 'InternetAutodial';

    function InternetAutodialHangup; external winetdll name 'InternetAutodialHangup';

    function InternetDial; external winetdll name 'InternetDial';

    function InternetGetConnectedState; external winetdll name 'InternetGetConnectedState';

    function InternetGoOnline; external winetdll name 'InternetGoOnline';

    function InternetSetDialState; external winetdll name 'InternetSetDialState';





    [3] 아래 예제를 컴파일해서 실행하세요



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, WinInet;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    dwConnectionTypes: DWORD;

    begin

    if InternetGetConnectedState(@dwConnectionTypes, 0) then // 정상적으로 검사됨

    begin

    if (dwConnectionTypes and INTERNET_CONNECTION_MODEM) <> 0 then

    ShowMessage('Modem으로 인터넷 사용중...');

    if (dwConnectionTypes and INTERNET_CONNECTION_LAN) <> 0 then

    ShowMessage('LAN으로 인터넷 사용중...');

    if (dwConnectionTypes and INTERNET_CONNECTION_PROXY) <> 0 then

    ShowMessage('Proxy로 인터넷 사용중...');

    if (dwConnectionTypes and INTERNET_CONNECTION_MODEM_BUSY) <> 0 then

    ShowMessage('Modem을 다른 용도로 사용중');

    end

    else

    begin

    ShowMessage('검사할 수 없습니다');

    end;

    end;



  • Profile
    하늘소 2000.02.26 00:33


    답변 정말 감사합니다..

    근데 Compile하는데 에러가 발생하는데 다시한번 부탁드립니다.



    Sourcertlwinwindows.pas[19167] $WEAKPAKEGEUNIT 'Window' cannot have

    code initialization or fialization code 라는 Error가 발생합니다.



    * 이 기능을 사용하려면 IE4.0 이상에서 사용하는 wininet.dll 의 함수의

    * prototype 중 빠진 부분을 SourceRTLWin 에 있는 wininet.pas 에 추가해야

    * 합니다

    * wininet.pas 을 컴파일하여 wininet.dcu 를 Lib 디렉토리에 놓으세요



    부분을 다시한번 자세히 설명해주세요..



    초이 wrote:

    > 하늘소 wrote:

    > > 안녕하십니까..델파이를 사랑하는 여러분.

    > > 봄이 오는데 날씨는 겨울에 머물러 있습니다.

    > >

    > > 건강들 조심하세요..

    > >

    > > 조그마한 일정관리 프로그램을 만들고 있습니다.

    > > 여기에 특정한 Button을 누르면 IE, Netscape를 실행하고자 합니다.

    > >

    > > 고수님들이 올리신 방법으로 IE, Netscape를 실행시켰습니다.

    > >

    > > 그런데 궁금한점이, 저희는 LAN에 Web Server가 구축되어

    > > 있어 웹브라우저를 실행하는데 아무생각없어도 되잖아요.

    > >

    > > 허면, 가정에서 Modem, ISDN, ADSL를 사용할 경우나,

    > > Web Server가 없는 LAN상에서는 무엇을 Check하여야 합니까?

    > >

    > > 즉, MessageDlg('ISP업체에 연결이 되지 않았습니다') 또는

    > > MessageDlg('인터넷을 사용할 수 없습니다') 가

    > > 나타나게 하려면 무엇을, 어떻게 Check를 어떻게 해야합니까?.

    > >

    > > 너무 광범위한 질문이지만 여러고수님 조언 부탁드립니다...

    > >

    >

    > 우선 아래의 내용은 김영대님의 홈페이지에서 인용한것임을 알려드립니다.

    >

    > -----------------------------------------------------------------------

    > // 이 기능을 사용하려면 IE4.0 이상에서 사용하는 wininet.dll 의 함수의

    > // prototype 중 빠진 부분을 SourceRTLWin 에 있는 wininet.pas 에 추가해야 합니다

    > // wininet.pas 을 컴파일하여 wininet.dcu 를 Lib 디렉토리에 놓으세요

    > // 아래 내용을 단계별로 작업하세요

    >

    > [1]. wininet.pas의 interface 에 아래 부분을 추가하세요

    >

    > {dwFlag for InternetAutodial}

    > const

    > INTERNET_AUTODIAL_FORCE_ONLINE = 1; //Forces an online Internet connection.

    > INTERNET_AUTODIAL_FORCE_UNATTENDED = 2; //Forces an unattended Internet dial-up.

    > INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4;

    >

    > {dwFlags for InternetDial}

    > const

    > INTERNET_DIAL_UNATTENDED = $8000; //Connects to the Internet through a modem, without displaying a user interface.

    >

    > {dwFlags for InternetGetConnectedState}

    > const

    > INTERNET_CONNECTION_MODEM = 1; // Local system uses a modem to connect to the Internet.

    > INTERNET_CONNECTION_LAN = 2; // Local system uses a local area network to connect to the Internet.

    > INTERNET_CONNECTION_PROXY = 4; // Local system uses a proxy server to connect to the Internet.

    > INTERNET_CONNECTION_MODEM_BUSY = 8; // Local system's modem is busy with a non-Internet connection.

    >

    > {dwState for InternetSetDialState}

    > const

    > INTERNET_DIALSTATE_DISCONNECTED = 1;

    >

    > function InternetAutodial(dwFlags : DWORD; dwReserved : DWORD) : boolean; stdcall;

    > function InternetAutodialHangup(dwReserved : DWORD) : boolean; stdcall;

    > function InternetDial(hwndParent : HWND; lpszConnectionId : PChar; dwFlags : DWORD;

    > lpdwConnection : Pointer; dwReserved : DWORD) : DWORD; stdcall;

    > function InternetGetConnectedState(lpdwFlags : Pointer; dwReserved : DWORD) : boolean; stdcall;

    > function InternetGoOnline(lpszUrl : PChar; hwndParent : HWND; dwReserved : DWORD) : boolean; stdcall;

    > function InternetSetDialState(lpszConnectionID : PChar; dwState : DWORD; dwReserved : DWORD) : boolean; stdcall;

    >

    >

    > [2] implementation 에 아래 부분을 추가하세요

    >

    > function InternetAutodial; external winetdll name 'InternetAutodial';

    > function InternetAutodialHangup; external winetdll name 'InternetAutodialHangup';

    > function InternetDial; external winetdll name 'InternetDial';

    > function InternetGetConnectedState; external winetdll name 'InternetGetConnectedState';

    > function InternetGoOnline; external winetdll name 'InternetGoOnline';

    > function InternetSetDialState; external winetdll name 'InternetSetDialState';

    >

    >

    > [3] 아래 예제를 컴파일해서 실행하세요

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, WinInet;

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > dwConnectionTypes: DWORD;

    > begin

    > if InternetGetConnectedState(@dwConnectionTypes, 0) then // 정상적으로 검사됨

    > begin

    > if (dwConnectionTypes and INTERNET_CONNECTION_MODEM) <> 0 then

    > ShowMessage('Modem으로 인터넷 사용중...');

    > if (dwConnectionTypes and INTERNET_CONNECTION_LAN) <> 0 then

    > ShowMessage('LAN으로 인터넷 사용중...');

    > if (dwConnectionTypes and INTERNET_CONNECTION_PROXY) <> 0 then

    > ShowMessage('Proxy로 인터넷 사용중...');

    > if (dwConnectionTypes and INTERNET_CONNECTION_MODEM_BUSY) <> 0 then

    > ShowMessage('Modem을 다른 용도로 사용중');

    > end

    > else

    > begin

    > ShowMessage('검사할 수 없습니다');

    > end;

    > end;

    >

  • Profile
    이문환 2000.09.01 20:55
    델파이 초보입니다.

    이 곳에 필요한 질문을 보고 저도 이 문제를 해결하였습니다.

    그런데 저 같은 경우에는 랜선을 사용하고 있는데 '랜으로 사용중....'이라고

    메세지박스가 잘 나왔습니다.

    하지만, 제가 랜선을 뽑은 후 인터넷이 접속되지 않는 상황에서 다시 실험을 해도

    같은 메세지가 나옵니다.

    저는 인터넷이 접속해 있는지를 알고 싶습니다.

    저의 환경이 랜선을 쓰고 있다는 것이 아닌 인터넷이 접속되어 있는지, 아닌지를

    알고 싶은데 어떻게 하면 되나요?