안녕하십니까..델파이를 사랑하는 여러분.
봄이 오는데 날씨는 겨울에 머물러 있습니다.
건강들 조심하세요..
조그마한 일정관리 프로그램을 만들고 있습니다.
여기에 특정한 Button을 누르면 IE, Netscape를 실행하고자 합니다.
고수님들이 올리신 방법으로 IE, Netscape를 실행시켰습니다.
그런데 궁금한점이, 저희는 LAN에 Web Server가 구축되어
있어 웹브라우저를 실행하는데 아무생각없어도 되잖아요.
허면, 가정에서 Modem, ISDN, ADSL를 사용할 경우나,
Web Server가 없는 LAN상에서는 무엇을 Check하여야 합니까?
즉, MessageDlg('ISP업체에 연결이 되지 않았습니다') 또는
MessageDlg('인터넷을 사용할 수 없습니다') 가
나타나게 하려면 무엇을, 어떻게 Check를 어떻게 해야합니까?.
너무 광범위한 질문이지만 여러고수님 조언 부탁드립니다...
> 안녕하십니까..델파이를 사랑하는 여러분.
> 봄이 오는데 날씨는 겨울에 머물러 있습니다.
>
> 건강들 조심하세요..
>
> 조그마한 일정관리 프로그램을 만들고 있습니다.
> 여기에 특정한 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;