- Posted
- Filed under 주절주절
결국 동네 피씨방에 왔다... 아주 슬럼프가 제대로 왔나부다...
점점더 심해지는거 같은데...
집에 있으면 너무 답답하고 집중도 안되고...
놀기로 했으니 실컷놀다 가야지-ㅁ-;;
kkuzil.own@gmail.com
안녕 하십니까?
(주)바로북닷컴의 김성규 입니다.
이 강좌는 본인이 관리합니다. 다른곳으로 옮기시면 출처를 밝혀주시기 바랍니다.
질문란에 인터넷 연결상태를 체크하는 방법에 대한 질문이 많이 올라옵니다.
Ping을 이용하는 방법에서 갖가지 방법이 있는데.. 표준 API 를 사용해 봅시다.
저도 사실 그동안은 네트워크카드의 정보를 읽어와서 활성화된 상태인지.. 또
루프백 디바이스인지를 가지고 체크해왔었지요.
강좌에 사용된 환경 : 델파이5, Windows 2000 pro, 익스플로러 5.0.2290
소스 정렬 : Tab size 4
-----
마이크로 소프트는 인터넷관련 API 를 간편하게 제공합니다.
FTP나 HTTP 같은 것을 만든다고 한다면 굳이 소켓을 사용할 필요가 없습니다.
하지만 이 강좌에서는 인터넷 연결상태 체크와 연결을 호출하는 것을 알아봅니다.
이 API 는 WinInet.dll 에 포함되어 있습니다.
이 DLL에 대한 인터페이스는 델파이에 이미 포함되어 있습니다.
/source/rtl/win/wininet.pas 죠.. (플랫폼 SDK에 포함된 wininet.h 를 번역하다가
죽을뻔 했음.. --;)
하지만 도움말에는 포함이 안되어 사람들이 잘 모르는 것 같습니다.
주의 할 점은 이 API 들은 익스플로러 4.0 부터 제공합니다.
다시 말하면 익스플로러가 반드시 4.0 이상이 깔려있어야 사용할 수 있다는
것입니다.
wininet.dll 을 같이 배포할 수도 있지만 별로 권장할 일은 아니죠.. MS 가 언제
업그레이드할지 모르니까요.
익스플로러버전에 따른 API 리스트는 다음과 같습니다.
API Functions Introduced in Internet Explorer 4
CreateUrlCacheGroup
DeleteUrlCacheGroup
FindFirstUrlCacheEntryEx
FindNextUrlCacheEntryEx
GetUrlCacheEntryInfoEx
HttpEndRequest
HttpSendRequestEx
InternetAutodial
InternetAutodialHangup
InternetDial
InternetGetConnectedState
InternetGoOnline
InternetHangUp
InternetReadFileEx
SetUrlCacheEntryGroup
API Functions Introduced in Internet Explorer 5
FindFirstUrlCacheGroup
FindNextUrlCacheGroup
FtpCommand
FtpGetFileSize
GetUrlCacheGroupAttribute
InternetGetConnectedStateEx
SetUrlCacheGroupAttribute
여기서 연결 상태를 체크하는 것은 InternetGetConnectedState 를 이용하면
간단합니다.
연결을 하는 것은 InternetAutodial 을 이용하면 됩니다.
이 함수들에 대한 도움말은 MSDN이나 플랫폼 SDK에 포함된 도움말을 이용하세요.
다음은 간단히 만들어본 유닛의 소스입니다.
(*
인터넷 관련 윈도우즈 API 자동화 유틸리티.
제작자 : 김성규. allex@barobook.com
날 짜 : 2000.09.16
*)
unit InternetUtil;
interface
uses
Windows, Dialogs, Forms, WinInet;
// Functions
function InternetConnected : Boolean;
function ConnectToInternet(Parent : TForm) : Boolean;
function AutoConnectToInternet(Parent : TForm) : Boolean;
implementation
function InternetConnected : Boolean;
var
Flags : DWORD;
begin
Flags := INTERNET_CONNECTION_LAN or INTERNET_CONNECTION_MODEM or
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@Flags, 0);
end;
function ConnectToInternet(Parent : TForm) : Boolean;
begin
Result := InternetAutodial(0, Parent.Handle);
end;
function AutoConnectToInternet(Parent : TForm) : Boolean;
begin
Result := True;
if not InternetConnected then
begin
ShowMessage('인터넷에 연결되지 않았습니다. 연결을 시도합니다.');
// 모뎀으로 인터넷 연결을 시도한다.
if ConnectToInternet(Parent) = false then
Result := False;
end
end;
end.
사용 예는 다음과 같습니다.
procedure TForm1.Button5Click(Sender: TObject);
begin
//
if AutoConnectToInternet(Self) = False then
begin
ShowMessage('인터넷 연결에 실패하였습니다.');
end else begin
ShowMessage('인터넷에 연결된 상태 입니다..');
end;
end;
간단하죠?
이상입니다.
단축아이콘 만들기
출처 : 델파이 3000
아래 소스는 바탕화면, 시작메뉴, 보내기 에 단축아이콘을 만드는 함수입니다.
사용예는 첨부파일 참조
procedure CreateShortcut(FileName: string; Location: ShortcutType);
var
MyObject : IUnknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
Directory,
LinkName : string;
WFileName : WideString;
MyReg,
QuickLaunchReg : TRegIniFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
MySLink.SetPath(PChar(FileName));
MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
try
LinkName := ChangeFileExt(FileName, '.lnk');
LinkName := ExtractFileName(LinkName);
case Location of
_DESKTOP : Directory := MyReg.ReadString('Shell Folders', 'Desktop', ''); // 바탕화면
_STARTMENU : Directory := MyReg.ReadString('Shell Folders', 'Start Menu', '');// 시작메뉴
_SENDTO : Directory := MyReg.ReadString('Shell Folders', 'SendTo', ''); // 보내기
_QUICKLAUNCH: // 디렉토리가 유동적(사용자에 따라)
begin
QuickLaunchReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\GrpConv');
try
Directory := QuickLaunchReg.ReadString('MapGroups', 'Quick Launch', '');
finally
QuickLaunchReg.Free;
end;
end;
end;
if Directory <> '' then
begin
WFileName := Directory + '\' + LinkName;
MyPFile.Save(PWChar(WFileName), False);
end;
finally
MyReg.Free;
end;
end;