네트워크 연결하기 / 연결끊기 ![]() ![]() 2011/07/28 10:49
|
Network Connection Enable / Disable 제어 관련 내용입니다.
인터넷을 구글해보니, 아래의 3가지 경우로 압축이 됩니다.
Win32_NetworkAdapter Disable Class
1. WMI 기능 사용
- WMI 에서 Win32_NetworkAdapter Class를 사용하는 방법입니다.
해당 클래스에 Enable / Disable 멤버 함수가 존재합니다.
장점 : WMI, C++ 사용 가능
단점 : C++로 해도 구현 코드가 길고, C# 으로 사용하기 어려움. (사용방법이 떠오르지 않네요.)
참조 : http://msdn2.microsoft.com/en-us/library/aa394216(VS.85).aspx
2. INetConnectionManager 인터페이스 사용
- Platform SDK에 있는 NetCon.h에 정의되어 있는 인터페이스를 사용해서 제어를 합니다.
해당 인터페이스를 이용해서 INetConnection 인터페이스를 구합니다.
INetConnection 인터페이스에 connect / disconnect 멤버 함수가 존재합니다.
장점 : C++ 사용 가능, 1번 항목보다 직관적이며 코딩량이 적음.
단점 : unmanaged C++에서만 사용가능. 심지어 managed C++에서조차 사용할 수 없음.
참조 : http://www.codeguru.com/forum/showthread.php?t=419909 작성자 ess1_il
3. Shell Automation 이용
- Microsoft Shell and Automation을 참조하여 오토메이션 기능 사용
사용자가 "내 컴퓨터">"제어판">"네트워크 폴더" 로 이동하여 제어하고자 하는 네트워크 커넥션,
가령 이름이 "로컬 영역 연결" 인 네트워크 커넥션을 선택해서 오른쪽 마우스 클릭하여 컨텍스트 메뉴 중에서
"사용" / "사용 안 함"을 선택하는 과정을 자동화시켜 해당 기능을 구현함.
장점 : .NET 사용 가능. XP에서 테스트 완료함. 예제가 필요하시면 연락을...
단점 : 실행 환경이 어드민 권한을 요구함.
Vista 에서 테스트 해보지 않았으나 안될 가능성 90%
Windows XP 한글판 / 영어판 / 기타 언어판 에서 네트워크 폴더 명 및 사용 verb 다름.
가령 한글판 : "네트워크 연결" / "사용(&A) / "사용 안 함(&B",
영어판 : "Network Connections" / "En&able" / "Disa&ble" 문자열을 사용해야 함.
C++로 구현 시 Shell Automation 관련 코딩량이 길어짐.
; ==================================
function EnabelNetworkCard(cardName : String) : integer;
var Retvar : integer;
oBindObj : IDispatch;
onetAdapters,oNetAdapter,
oIpAddress,oGateWay,
oWMIService,oSubnetMask : OleVariant;
i,iValue : longword;
oEnum : IEnumvariant;
oCtx : IBindCtx;
oMk : IMoniker;
sFileObj : widestring;
begin
Retvar := 0;
sFileObj := 'winmgmts:\\.\root\cimv2';
// Connect to WMI - Emulate API GetObject()
OleCheck(CreateBindCtx(0,oCtx));
OleCheck(MkParseDisplayNameEx(oCtx,PWideChar(sFileObj),i,oMk));
OleCheck(oMk.BindToObject(oCtx,nil,IUnknown,oBindObj));
oWMIService := oBindObj;
onetAdapters := oWMIService.ExecQuery('Select * from ' +
'Win32_NetworkAdapter ' +
'where Description = ' + '''' +
CardName + '''');
oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;
while oEnum.Next(1,oNetAdapter,iValue) = 0 do begin try ShowMessage(oNetAdapter.Description);
Retvar := oNetAdapter.Enable;
except
Retvar := -1;
end;
onetAdapter := Unassigned;
end;
oGateWay := Unassigned;
oSubnetMask := Unassigned;
oIpAddress := Unassigned;
onetAdapters := Unassigned;
oWMIService := Unassigned;
Result := Retvar;
end;
; Windows XP (BORLAND DELPHI)
; ==================================
; here you need to add 'Microsoft Shell Controls and Automation' go
; to Project|Import Type Library, uncheck 'Generate Component Wrapper',
; Mselect 'Microsoft Shell Controls and Automation', and click Create
; Unit; then, add Shell32_tlb to your unit's uses clause.
function ToggleLAN(const ConnectionName: string): Boolean;
const
EnableVerb = 'En&able'; //'사용(&A)'
DisableVerb = 'Disa&ble'; //'사용 안 함(&B)'
var
ShellApp: Shell32_tlb.Shell;
ControlPanel: Shell32_tlb.Folder;
FolderItem: Shell32_tlb.FolderItem;
NetworkFolder: Shell32_tlb.Folder;
LANConnection: Shell32_tlb.FolderItem;
EnableVerbItem, DisableVerbItem, Verb : Shell32_tlb.FolderItemVerb;
I,K: Integer;
begin
Result := False;
ShellApp := CoShell.Create;
ControlPanel := ShellApp.NameSpace(ssfCONTROLS);
// test := ConnectionName;
for I := 0 to ControlPanel.Items.Count - 1 do
begin
FolderItem := ControlPanel.Items.Item(I);
// ShowMessage(FolderItem.Name);
if (FolderItem.Name = 'Network Connections') or
(FolderItem.Name = 'Network and Dial-up Connections') or
(FolderItem.Name = 'Network and Sharing Center') then
begin
NetworkFolder := FolderItem.GetFolder as Folder;
Break;
end;
end;
if NetworkFolder = nil then
begin
Result := False;
Exit;
end;
for I := 0 to NetworkFolder.Items.Count - 1 do
begin
FolderItem := NetworkFolder.Items.Item(I);
// ShowMessage(FolderItem.Name);
if FolderItem.Name = ConnectionName then
begin
LANConnection := FolderItem;
Break;
end;
end;
if LANConnection = nil then
begin
Result := False;
Exit;
end;
for I := 0 to LANConnection.Verbs.Count - 1 do
begin
if LANConnection.Verbs.Item(I).Name = EnableVerb then
begin
EnableVerbItem := LANConnection.Verbs.Item(I);
LANEnable := True;
Break;
end
else if LANConnection.Verbs.Item(I).Name = DisableVerb then
begin
DisableVerbItem := LANConnection.Verbs.Item(I);
LANEnable := False;
Break;
end;
end;
if LANEnable then
EnableVerbItem.DoIt
else
DisableVerbItem.DoIt;
Result := True;
end;
Microsoft Shell Controls And Automation 선택
Create Unit 클릭
Delphi 설치된곳 아래 Imports 디렉토리에 Shell32_TLB.pas 파일 생성 됩니다.
[출처] 네트워크 연결하기 / 연결끊기|작성자 유돌이
'delphi' 카테고리의 다른 글
HTML 태그 접근법 (0) | 2013.12.28 |
---|---|
TWebBrowser에 직접 HTML 소스코드 넣기 (0) | 2013.12.28 |
델파이 기초 - WebBrowser 기능 정리 (0) | 2013.12.28 |
암호화 (0) | 2013.12.28 |
WebBrowser에서 window.open 구별방법 (0) | 2013.12.28 |