C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[813] 네트워크 연결하기 / 연결끊기
박영목 [gsbsoft] 13956 읽음    2008-10-13 17:51
부산의 월천 박영목 입니다.     

현재 델파이에서 작업하고 있습니다. 잘 다루지도 못하는데...  그래서 이것 델파이 코드
입니다...   C++빌더로 바꾸어 주십사 하고 이곳에 올립니다....    ㅋㅋㅋㅋ


그렇게 코드양이 많지 않고 델파이의 막강한 부분의 기능이 필요해서.... ㅋㅋㅋ



네트워크 연결하기 / 연결끊기 할 일이 생겼다....

이 방법을 알아내기 위해 오늘 하루 거의 다 보내 버리고 말았습니다. 될 듯하면서 안되고...

지금 델파이로 작업 중이라... 델파이 소스 를 구했습니다... C++도 쉽게 되겠지요...

누구 바꾸어 주시길...       지금  무지 바빠서.....  ㅋㅋㅋ


방법은 3가지 정도 있다고 되어 있는데.... 정성이 부족하여서 그런지 잘 되지 않음...

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

아래는 아마 devpia에서 찾은 것 같은데....    참고하시고....


[답변]NIC Enable / Disable 제어하기 2008-03-26 오전 11:51:07

고지범 (엘케인)    번호: 714764   / 평점:  (-)  
비슷한 경우를 찾아봐서 도움이 될까 하고 적습니다.

아래 내용은 .NET 관련해서 질답에 올린 사항인데, C++에도 유효할 듯합니다.



SetIfEntry() 사용하는 방식은 별로라고 하는 사람들이 많아서 제외했습니다.


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 관련 코딩량이 길어짐.

    참조 : http://vbcity.com/forums/topic.asp?tid=56821 작성자 drydo



C++ 로 구현하는 경우, 위의 2번 항목을 추천합니다.

다만, Shell Automation 쪽 해보셨으면, 3번이 더 메리트가 있을 것 같습니다.

3번이 직관적이고도 안정적으로 구현되기 때문입니다.




도움이 되길 바라며...~

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



출처 :  http://www.autoitscript.com/forum/lofiversion/index.php?t72165.html  이곳에 가면

        비스타 용도 있던데.... 한번 가보세요...



네트워크 연결하기 / 연결끊기 쉘방식 입니다. 이 방법이 제일 안전 하지요  물론 프로그램적으로..

이것을 가지고 하니 Error가 나더군요.... 물론 또 나는 분도 있을 것입니다.  항목명 때문에 나는 것이데
자신의 맞게 수정해 주시면 됩니다. 그냥 윈도우 설치하고 장난을 한번도 치지 않았다면 그대로 사용하면
동작할 것입니다.   아래 것은 영문 윈도우에서는 Error 발생하지 않을 것입니다.

한글 윈도우 기본으로 설치했을 때 항목명을 수정했습니다.  동작해 보고 Error가 발생하면 자신의
네트워크 연결 항목들을 점검해 보시기 바랍니다.




; 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';
        DisableVerb = 'Disa&ble';
        LANEnable: Boolean = True;
    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;

--------------------------------------------------------------------------------
장성호 [nasilso]   2008-10-14 11:28 X
netsh 를 이용하여 network를 연결했다 끊었다 할수도 있습니다.

끊기 >  netsh interface set interface "로컬 영역 연결" disabled

연결 >  netsh interface set interface "로컬 영역 연결" enabled

근데 이게 os에 따라 되는데가 있고 안되는데가 있더군요
참조하세요

박영목 [gsbsoft]   2008-10-14 13:45 X
성호님 감사.... ㅋㅋㅋㅋ  
이것 때문에 netsh interfase> set interface "로컬 영역 연결" disabled 이것 가지고... 몇시간을 했는데,.,, 다 된다고 하는데,..,. 이게 안되요... 매개변수 어쩌고... 하면서... 그래 한 2시간 하다가 포기했지요...   그래도 감사합니다.... 올리는 글 잘 보고 있습니다.... 행복하세요.... 

+ -

관련 글 리스트
813 네트워크 연결하기 / 연결끊기 박영목 13956 2008/10/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.