비트수에 따른 IP 개수

응용프로그램/Windows 2015.10.02 18:42 Posted by 초절정고수

 Bit

 ip개수

 subnet mask

 30

 4

 255

255 

 255

 252

 29

 8

 255

 255

 255

 248

 28

 16

 255

 255

 255

 240

 27

 32

 255

 255

 255

 224

 26

 64

 255

 255

 255

 192

 25

 128

 255

 255

 255

 128

 24

 256

 255

 255

 255

 0

 23

 512

 255

 255

 254

 0

 22

 1024

 255

 255

 252

 0

 21

 3048

 255

 255

 248

 0

 20

 4096

 255

 255

 240

 0

 19

 8192

 255

255

 224

 0

 18

 16384

 255

 255

 192

 0

 17

 32768

 255

 255

 128

 0

로그온 유형 코드 이해하기

응용프로그램/Windows 2015.05.26 14:40 Posted by 초절정고수

http://nomini.tistory.com/trackback/11



윈도우 보안감사 로그를 분석하다보면 많은 코드들이 나와 혼란스럽습니다.


이중 중요한 코드가 로그온 유형 코드인데요, 이를 통해서 침입자가 어떤 방식으로 접근했는지를 확인할 수 있습니다.


  • 로그온 유형 2 (Logon Type 2) : 대화식

    • 콘솔에서 키보드로 로그인 (KVM 포함)


  • 로그온 유형 3 (Logon Type 3) : 네트워크

    • 네트워크를 통한 원격 로그인. (파일 공유, IIS 접속 등)

  • 로그온 유형 4 (Logon Type 4) : 자동실행(스케줄)

    • 스케줄에 등록된 배치 작업 실행시 미리 설정된 계정 정보로 로그인

  • 로그온 유형 5 (Logon Type 5) : 서비스

    • 서비스가 실행될때 미리 설정된 계정 정보로 로그인


  • 로그온 유형 7 (Logon Type 7) : 잠금해제

    • 화면보호기 잠금 해제시


  • 로그온 유형 8 (Logon Type 8) : 네트워크 (평문암호)

    • 유형 3과 비슷하지만 계정 정보를 평문으로 전송시 발생 (ASP 기본 암호설정)

  • 로그온 유형 9 (Logon Type 9) : 새 자격

    • 실행(RunAs)에서 프로그램 실행시 /netonly 옵션을 줄때

  • 로그온 유형 10 (Logon Type 10) : 원격 대화식

    • 터미널 서비스, 원격 접속, 원격지원으로 로그인

  • 로그온 유형 11 (Logon Type 11) : 캐쉬된 대화식

    • PC에 캐쉬로 저장된 암호로 자동 입력 로그인시

  • 웹브라우저컨트롤

    응용프로그램/Visual Basic 2014.06.16 15:37 Posted by 초절정고수

    원본 : http://www.vbforums.com/showthread.php?384076-Webbrowser-Control-Tip-and-Examples


    Navigating to a site:
    사이트 찾기...

    
    visual basic code:
    

    WebBrowser1.Navigate "www.google.com"


    팝업창을 윈도우 폼으로 열기
    사이트에서 새로운 팝업창이 열리게 될때 정한 폼을 대상으로 새 창이 열리게 된다.

    
    visual basic code:
    

    Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
    Dim frm As Form1
    Set frm = New Form1
    Set ppDisp = frm.WebBrowser1.Object
    frm.Show
    End Sub


    단어/문장을 페이지에서 찾아냄
    단어나 문장을 찾아냄.

    
    visual basic code:
    

    Private Sub Command1_Click()
        Dim strfindword As String
            strfindword = InputBox("What are you looking for?", "Find", "") ' what word to find?
                If WebPageContains(strfindword) = True Then 'check if the word is in page
                    MsgBox "The webpage contains the text" 'string is in page
                Else
                    MsgBox "The webpage doesn't contains the text" 'string is not in page
                End If
    End Sub
    Private Function WebPageContains(ByVal s As String) As Boolean
        Dim i As Long, EHTML
        For i = 1 To WebBrowser1.Document.All.length
            Set EHTML = _
            WebBrowser1.Document.All.Item(i)
    
    
            If Not (EHTML Is Nothing) Then
                If InStr(1, EHTML.innerHTML, _
                s, vbTextCompare) > 0 Then
                WebPageContains = True
                Exit Function
            End If
        End If
    Next i
    End Function
    Private Sub Form_Load()
        WebBrowser1.Navigate2 "www.msn.com"
    End Sub


    시작 페이지 만들기
    이코드는 이벤트에서 어떻게 만들어지고 보여지나.

    
    visual basic code:
    

    Private Sub Form_Load()
        WebBrowser1.Navigate "about:blank"
    End Sub
    
    Private Sub Command1_Click()
        Dim HTML As String
            '----------The HTML CODE GOES FROM HERE AND DOWN----------
        HTML = "<HTML>" & _
                "<TITLE>Page On Load</TITLE>" & _
                "<BODY>" & _
                "<FONT COLOR = BLUE>" & _
                "This is a " & _
                "<FONT SIZE = 5>" & _
                "<B>" & _
                "programmatically " & _
                "</B>" & _
                "</FONT SIZE>" & _
                "made page" & _
                "</FONT>" & _
                "</BODY>" & _
                "</HTML>"
                '----------The HTML CODE GOES HERE AND ABOVE----------
        WebBrowser1.document.write HTML
    End Sub


    보통 브라우저 함수
    간단한 브라우저의 함수.

    
    visual basic code:
    

    Private Sub Command1_Click(Index As Integer)
    On Error Resume Next ' just in case there is no page back or forward
                        'I showed how to disabel them if you scroll down more
        Select Case Index
            Case 0 'Go Back Button
                WebBrowser1.GoBack 'Go Back one Page
            Case 1 'Go Forward Button
                WebBrowser1.GoForward 'Go Forward one Page
            Case 2 'Stop Button
                WebBrowser1.Stop 'stop page
            Case 3 'Refresh Button
                WebBrowser1.Refresh 'refresh page
            Case 4 'Go Home Button
                WebBrowser1.GoHome 'Go to home page
            Case 5 'Search Button
                WebBrowser1.GoSearch 'Search
        End Select
    End Sub


    고급 브라우저 함수
    이것들은 복잡한 브라우저의 함수 프린트나 페이지 속성.

    
    visual basic code:
    

    Private Sub Command1_Click() 'Print Button
        WebBrowser1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT 'Show Print Window
    End Sub
    Private Sub Command2_Click() 'Print Preview Button
        WebBrowser1.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT 'Show Print Preview Window
    End Sub
    Private Sub Command3_Click() 'Page Setup Button
        WebBrowser1.ExecWB OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT 'Show Page Setup Window
    End Sub
    Private Sub Command4_Click() 'Page Properties Button
        WebBrowser1.ExecWB OLECMDID_PROPERTIES, OLECMDEXECOPT_DODEFAULT 'Show Page Properties Window
    End Sub
    Private Sub Form_Load()
        WebBrowser1.Navigate "www.google.com"
    End Sub


    웹의 글꼴 사이즈 변경
    페이지의 글꼴크기를 어떻게 변경 하느냐,  internet explorer 보기-> 텍스트크기 메뉴

    
    visual basic code:
    

    Private Sub Command1_Click() ' Smallest Button
    On Error Resume Next
        WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, CLng(0), vbNull
    End Sub
    Private Sub Command2_Click() 'Small Button
    On Error Resume Next
        WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, CLng(1), vbNull
    End Sub
    Private Sub Command3_Click() 'Medium Button
    On Error Resume Next
        WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, CLng(2), vbNull
    End Sub
    Private Sub Command4_Click() 'Large Button
    On Error Resume Next
        WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, CLng(3), vbNull
    End Sub
    Private Sub Command5_Click() 'Largest Button
    On Error Resume Next
        WebBrowser1.ExecWB OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, CLng(4), vbNull
    End Sub
    Private Sub Form_Load()
        WebBrowser1.Navigate2 "www.google.com"
    End Sub


    페이지 목록의 함수 (뒤로/앞으로)
    버튼의 사용/사용안함과 열어본 페이지중 뒤/앞 페이지를 열 수 있다.

    
    visual basic code:
    

    Private Sub Command1_Click() 'Go Back Button
        WebBrowser1.GoBack 'Go Back
    End Sub
    Private Sub Command2_Click() 'Go Forward Button
        WebBrowser1.GoForward 'Go Forward
    End Sub
    Private Sub Form_Load()
        WebBrowser1.Navigate "www.google.com"
    End Sub
    Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
        Select Case Command
            Case 1 'Forward
                Command2.Enabled = Enable
            Case 2 'Back
                Command1.Enabled = Enable
        End Select
    End Sub


    인쇠 관련 함수 (페이지 설정/프린트 미리보기/프린터 설정)
    이함수는 어떻게 페이지 설정,미리보기,프린터 설정을 하는가를 보여준다.

    
    visual basic code:
    

    Private Sub Command1_Click() 'Print Button
        WebBrowser1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT 'Show Print Window
    End Sub
    Private Sub Command2_Click() 'Print Preview Button
        WebBrowser1.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT 'Show Print Preview Window
    End Sub
    Private Sub Command3_Click() 'Page Setup Button
        WebBrowser1.ExecWB OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT 'Show Page Setup Window
    End Sub
    Private Sub Form_Load()
        WebBrowser1.Navigate "www.google.com"
    End Sub
    Public Function Enable_or_Disable()
        If WebBrowser1.QueryStatusWB(OLECMDID_PRINT) = 0 Then
            Command1.Enabled = False
        Else
            Command1.Enabled = True
        End If
        If WebBrowser1.QueryStatusWB(OLECMDID_PRINTPREVIEW) = 0 Then
            Command2.Enabled = False
        Else
            Command2.Enabled = True
        End If
    
        If WebBrowser1.QueryStatusWB(OLECMDID_PAGESETUP) = 0 Then
            Command3.Enabled = False
        Else
            Command3.Enabled = True
        End If
    End Function
    Private Sub WebBrowser1_BeforeNavigate2 _
                        (ByVal pDisp As Object, _
                                    URL As Variant, _
                                    Flags As Variant, _
                            TargetFrameName As Variant, _
                                    PostData As Variant, _
                                        Headers As Variant, _
                                            Cancel As Boolean)
        Enable_or_Disable
    End Sub
    Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
        Enable_or_Disable
    End Sub


    Removing Right Click Menu From the browser control
    So you need to remove the right click menu from the control, right? well there are more then two ways one of them, which i knew but i won't bother telling is using lots of hooking, waist of thime since all you have to do is download a simple helper file.
    First you need to go to http://support.microsoft.com/kb/q183235/ and download the WBCustomizer.dll. once done go to the"Project Menu" and click on "Refrences" Click on browse and add the 'WBCustomizer.dll' to you app. once done just add this simple code.

    
    visual basic code:
    

    Option Explicit
        Dim CustomWB As WBCustomizer 'Deceler the CustomWB
    Private Sub Form_Load()
       Set CustomWB = New WBCustomizer
       With CustomWB
          .EnableContextMenus = False 'Disable The Menu
          .EnableAllAccelerators = True
          
          Set .WebBrowser = WebBrowser1
       End With
        WebBrowser1.Navigate "www.google.com"
            CustomWB.EnableContextMenus = False
    End Sub

    Grab all links on the page
    This code shows how to grab and list all the links on a page, this can be used a spider software for a search engine site.
    In order to get this code to load you must add the "Microsoft HTML Object Library" into your app refrences.

    
    visual basic code:
    

    Option Explicit
    Private Sub Form_Load()
        WebBrowser1.Navigate "www.vbforums.com"
    End Sub
    Private Sub WebBrowser1_DownloadComplete()
        'you must add the "Microsoft HTML Object Library"!!!!!!!!!
        Dim HTMLdoc As HTMLDocument
            Dim HTMLlinks As HTMLAnchorElement
                Dim STRtxt As String
        ' List the links.
        On Error Resume Next
            Set HTMLdoc = WebBrowser1.Document
                For Each HTMLlinks In HTMLdoc.links
                    STRtxt = STRtxt & HTMLlinks.href & vbCrLf
                Next HTMLlinks
            Text1.Text = STRtxt
    End Sub


    You can add this code in order to log this files.

    
    visual basic code:
    

    Open "C:\Documents and Settings\[YOU USERNAME]\Desktop\link log.txt" For Append As #1
    Print #1, STRtxt
    Close #1


    Save Page
    This code shows you how to save the browser's page.

    
    visual basic code:
    

    Option Explicit
    Private Sub Command1_Click()
    WebBrowser1.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT
    End Sub
    Private Sub Form_Load()
    WebBrowser1.Navigate2 "www.google.com"
    End Sub


    Open Page
    Here is how to load a webpage into the webbrowser.

    
    visual basic code:
    

    Private Sub Command2_Click()
        WebBrowser1.ExecWB OLECMDID_OPEN, OLECMDEXECOPT_PROMPTUSER
    End Sub


    This is how to open a page, using the comman dialog's way

    
    visual basic code:
    

    Option Explicit
    Private Sub Command1_Click()
    On Error Resume Next
        With CommonDialog1
            .DialogTitle = "Open File"
            .Filter = "Web page (*.htm;*.html) | *.htm;*.html|" & _
            "All Supported Picture formats|*.gif;*.tif;*.pcd;*.jpg;*.wmf;" & _
            "*.tga;*.jpeg;*.ras;*.png;*.eps;*.bmp;*.pcx|" & _
            "Text formats (*.txt;*.doc)|*.txt;*.doc|" & _
            "All files (*.*)|*.*|"
            .ShowOpen
            .Flags = 5
        WebBrowser1.Navigate2 .FileName
        End With
    End Sub
    Private Sub Form_Load()
        WebBrowser1.Navigate2 "www.google.com"
    End Sub


    Auto Submit
    This Simple Code I Made To show you how to make a submittion form. This code will autofill the need filled and submit it.

    
    visual basic code:
    

    Private Sub Command1_Click()
    Dim strwebsite As String
        Dim stremail As String
            strwebsite = "http://www.mysite.com"
                stremail = "myemail@host.com"
    WebBrowser1.Document.addurl.URL.Value = strwebsite
        WebBrowser1.Document.addurl.Email.Value = stremail
            WebBrowser1.Document.addurl.Submit
    End Sub
    Private Sub Form_Load()
        WebBrowser1.Navigate "http://www.scrubtheweb.com/addurl.html"
    End Sub


    Using A ProgressBar With The Webbrowser
    This is to show how to use a progressbar with a webbrowser control.

    
    visual basic code:
    

    Private Sub Form_Load()
        WebBrowser1.Navigate "www.msn.com"
        ProgressBar1.Appearance = ccFlat
        ProgressBar1.Scrolling = ccScrollingSmooth
    End Sub
    
    Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
    On Error Resume Next
        If Progress = -1 Then ProgressBar1.Value = 100
            Me.Caption = "100%"
        If Progress > 0 And ProgressMax > 0 Then
            ProgressBar1.Value = Progress * 100 / ProgressMax
            Me.Caption = Int(Progress * 100 / ProgressMax) & "%"
        End If
        Exit Sub
    End Sub


    Setting a Control in a Webbrowser to focus
    This shows how to set a control inside the webbrowser into focus.

    
    visual basic code:
    

    Private Sub Command1_Click()
        WebBrowser1.Document.All("q").focus 'Set the search text filed in focus
    End Sub
    
    Private Sub Command2_Click()
        WebBrowser1.Document.All("btnI").focus 'Set the google "I Am feeling lucky in focus button"
    End Sub
    
    Private Sub Form_Load()
        WebBrowser1.Navigate "http://www.google.com/"
    End Sub



    Or you can use:

    
    visual basic code:
    

    WebBrowser1.Document.getElementById("Object's Name").Focus


    Checkbox in a page, how to control it
    This is an example on how to check or uncheck the remember me checkbox on the google login page:

    
    visual basic code:
    

    Private Sub Form_Load()
    WebBrowser1.Navigate "https://www.google.com/accounts/ManageAccount"
    End Sub
    Private Sub Check1_Click()
        If Check1.Value = 0 Then
            WebBrowser1.Document.All.PersistentCookie.Checked = False 'unchecked
        Else
            WebBrowser1.Document.All.PersistentCookie.Checked = True 'checked
        End If
    End Sub


    Or

    
    visual basic code:
    

    Private Sub Form_Load()
    WebBrowser1.Navigate "https://www.google.com/accounts/ManageAccount"
    End Sub
    Private Sub Check1_Click()
        If Check1.Value = 0 Then
            WebBrowser1.Document.All.PersistentCookie.Checked = 0 'unchecked
        Else
            WebBrowser1.Document.All.PersistentCookie.Checked = 1 'checked
        End If
    End Sub


    Or

    
    visual basic code:
    

    Private Sub Form_Load()
    WebBrowser1.Navigate "https://www.google.com/accounts/ManageAccount"
    End Sub
    Private Sub Check1_Click()
        If Check1.Value = 0 Then
            WebBrowser1.Document.getElementById("PersistentCookie").Checked = False 'unchecked
        Else
            WebBrowser1.Document.getElementById("PersistentCookie").Checked = True 'checked
        End If
    End Sub


    Custom Right Click Menu
    This is an example show how to make your own custom right click menu. in order for this to work you must add the "Must Add Microsoft HTML Object Library" to your refrance.Also make your own custom menu using the menu editor I named my "mnu"
    Please Note it will effect all the context menus in the webbrowser.

    
    visual basic code:
    

    'Must Add Microsoft HTML Object Library
    Option Explicit
        Public WithEvents HTML As HTMLDocument
    
    Private Function HTML_oncontextmenu() As Boolean
       HTML_oncontextmenu = False
       PopupMenu mnu '<---Check the mnu to your own menu name
    End Function
    
    Private Sub Form_Load()
        WebBrowser1.Navigate "www.google.com"
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
       Set HTML = Nothing
    End Sub
    Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, _
                                                     URL As Variant)
       Set HTML = WebBrowser1.Document
    End Sub

    Copy the contents of the WebBrowser control to the Clipboard

    To programmatically copy text from the WebBrowser control you can use its ExecWB method, to which you must pass the OLECMDID_COPY constant as its first argument.
    
    WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT
    
    You can also select the entire WebBrowser's contents by invoking the ExecWB method with the OLECMDID_SELECTALL constant. For example, you can quickly copy the textual contents of the WebBrowser control (that is, plain text instead of HTML text) with the following statements:

    ' select the entire document WebBrowser1.ExecWB OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT ' copy the text to Clipboard WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT ' clear the selection WebBrowser1.ExecWB OLECMDID_CLEARSELECTION, OLECMDEXECOPT_DONTPROMPTUSER


    비주얼베이직 6.0  컴파일 할때 도움이 되는 링커

    비쥬얼베이직 6.0 에서 exe를 만들려면 컴파일을 해야합니다.

    그때 자체 컴파일을 하는것보다 이 링커를 쓰시면 
    오류도 해결할수도있고 (vb6ko.dll) 을 필요없게 한다던지 여러가지 좋은점이 있습니다.


    VB서비스링커.exe


     



    ※ VB Linker Helper의 특징:

     - VB6KO.DLL 요구하지 않게 패치 가능.

     - 일반 DLL 제작 가능.

     - 콘솔 응용 프로그램 제작 가능.

     - UPX/FSG 패커 내장 및 UPX 언팩 방지 기능.

     - 일반 링커가 수행하는 왠만한 기능 가능 (ImageBase 변경, MAP 파일 생성 등)

     - 링커 설정을 저장할 수 있음.

     - 비스타 이상의 PC에서 관리자 권한을 요구할 수 있음. (※ 기본 사항이 아니므로, 이 기능은 기본적으로 선택 해제되어 있음.)

     - 그 외 다수.

     

     ※ 설치 방법:

     첨부된 Setup.exe(알집 SFX) 파일을 실행 후 압축을 푸시면 됩니다.

    파일 경로는 c:\ - program files - Microsoft Visual Studio - VB98 << 기본 설치 경로 
    다른곳에설치하였다면 자기가 비쥬얼베이직을 설치한 경로에 압축을 풀어주세요

    비주얼베이직 경로에 Link.exe를 넣고, 기존에 있던 Link.exe의 이름을 LiNKWIN.EXE로 변경해주세요.

    그럼 정상적으로 작동될 것입니다.

     

    [TIP]

    EXE가 만들어 지지 않는다면?

    - 포터블 버젼이다.

    - 컴파일을 시도해보시고 exe를 만들어 보세요.

    - 프로젝트 저장하기 해서 비베를 끈후 다시 그 프로젝트를 실행해 시도해보세요.



    본 강좌는 내가 BHO를 만들기 위해 여러번의 실패를 되풀이 하지 않기 위해 작성한다.

    우선 BHO를 만들기 위해서 처음 프로젝트를 만들때 ATL COM AppWizard를 선택하여야 한다. 

     


     

     

    프로젝트 이름은 Test로...



    그 다음은 BHO는 DLL형식으로 배포가 이루어지기 때문에 Dynamic Link Libary DLL를 선택하고
    Finish를 눌러 프로젝트를 만든다.

     

     

     

    DLL로 제작하자!



    그 다음 아래 이미지와 같이 Class View에서 프로젝트에 우측 버튼을 눌러 New ATL Object를
    선택하도록 한다.


     

     

    ATL Object를 만들자!



    아래와 같은 모습이 나오게 되는데 Simple Object를 선택하고 Next를 누르자.


     

     

    여러 종류 중 그냥 제일 처음꺼!



    그럼 ATL Object의 Class이름을 정하는 부분이 나온다.
    Short Name에 적당한 Class를 이름을 입력해보자. Short Name에 이름을 입력하면 
    나머지 칸은 자동으로 채워지는 것을 볼 수 있을 것이다.
    (여기는 TestHelp라고 입력했다.)


     
     
     
     

    Short Name에 입력하면 나머진 자동으로~



    그럼 BHO를 위한 아주 간단한 ATL Object가 생성된 것이다.
    여기서 BHO를 작동시키기 위해서는 Register에 기록을 해주어야 한다.
    (이부분에서 많이 애 먹었었다.)

    아래 그림과 같이 Resource Files에 TestHelp.rgs라는 파일을 열어서
    아래의 내용을 빨간색 상자처럼 붙여 넣자.

    HKLM
    {
      SOFTWARE
      {
        Microsoft
        {    
         Windows
         {
           CurrentVersion
           {
             Explorer
             {
               'Browser Helper Objects'
               {
                  ForceRemove {        } = s 'TestHelp Helper'
               }
             }
           }
         }
        }
      }
    }



     

     

    이 부분 몰라서 계속 실행이 안됐었다.ㅜㅜ

     

     

    ==========================================================================================================================

     

     

    출처 : http://kongmks.cafe24.com/82





    그럼 Class View에 아래와 같이 CTestHelp라는 Class가 생길 것이다.
    그 곳을 더블 클릭하면 Class Header가 보이는데 private로 아래의 변수를 추가 하자.
    이 변수로 Internet Explorer를 컨트롤 하고, 핸들도 얻어 올 수가 있다.

    [CODE type=c]private:
        CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2;
        CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> m_spCPC;
        DWORD m_dwCookie;[/CODE]


     

     

     

    기본 변수를 추가 하자.


    그리고 아래 두 줄의 코드도 각 각 빨간 상자안에 위치 시켜야 한다.
    이것도 안 넣으면 실행 되지 않는다.
    (캡쳐 했던 이미지를 분실해서 제가 따로 만들었던 SlipCheck란 Project에서 가져왔음)
    CSLIPCHECK => CTestHelp랑 같음

    [CODE type=c]public IObjectWithSiteImpl<CTestHelp>,
    COM_INTERFACE_ENTRY(IObjectWithSite)[/CODE]


     

     

     

    IObjectWithSiteImpl라는 Instance를 추가하자.


    자! 이제 거의 다 끝나 간다.

    이제는 ATL Object에 Method 추가하는 법을 배워보자
    아래 이미지와 같이 CTestHelp라는 클래스 밑에 Interface TestHelp부분이 있다.
    우측 버튼을 눌러 Add Method...를 클릭해보자.

     

    Add Method...클릭!


    그리고 일반 함수 추가 하듯이 하면 된다.
    우선은 제일 기본이 될 SetSite라는 Method를 만들어보자.
    아래 이미지와 같이 Method 이름과 Parameter를 넣고  Ok를 누르자.

     

    메소드랑 파라메타를 넣고 Ok!


    그럼 SetSite라는 메소드가 생기고 코드 입력하는 곳에 아래 코드를 붙여넣도록 하자.

    [CODE type=c]STDMETHODIMP CTestHelp::SetSite(IUnknown *pUnkSite)
    {
        // TODO: Add your implementation code here
        m_spWebBrowser2 = pUnkSite;

        if( m_spWebBrowser2 == NULL )
            return E_INVALIDARG;

        m_spCPC = m_spWebBrowser2;

        if( m_spCPC == NULL )
            return E_POINTER;

        return Connect();
    }[/CODE]



    그리고 아래의 함수도 추가 시키자.(메소드가 아니라 함수다.)

    [CODE type=c]HRESULT CTestHelp::Connect()
    {
        HRESULT hr;
        CComPtr<IConnectionPoint> spCP;
        
        // Receives the connection point for WebBrowser events
        hr = m_spCPC->FindConnectionPoint(
            DIID_DWebBrowserEvents2, 
            &spCP);
       if (FAILED(hr))
            return hr;
        
        // Pass the event handlers to the container
        hr = spCP->Advise( 
            reinterpret_cast<IDispatch*>(this), 
            &m_dwCookie);
        
        return hr; 
    }[/CODE]


    그리고 종료하는 메소드도 추가하자

    [CODE type=c]STDMETHODIMP CTestHelp::OnQuit()
    {
        // TODO: Add your implementation code here
        Disconnect();

        return S_OK;
    }[/CODE]



    아래의 함수도 추가하자.

    [CODE type=c]HRESULT CTestHelp::Disconnect()
    {
        HRESULT hr;
        CComPtr<IConnectionPoint> spCP;
        
        // Receives the connection point for WebBrowser events
        hr = m_spCPC->FindConnectionPoint(
            DIID_DWebBrowserEvents2, 
            &spCP);
        if (FAILED(hr))
            return hr;
        
        // Stop getting event notifications
        hr = spCP->Unadvise(m_dwCookie);
        return hr;
    }[/CODE]


    여기까지 하면 이제 Internet Explorer로 부터 메세지를 받을 수 있게 된다.
    어디로 받는냐면 Invoke라는 메소드로 받게 된다.
    그렇다 이 메소드도 추가해야한다.

    Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)


     

    [CODE type=c]STDMETHODIMP CTestHelp::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
    {
        // TODO: Add your implementation code here

        //////////////////////////////////////////////////////////////////////////
        // 변화가 일어난 Explorer의 고유 핸들 얻기
        HWND h_exwnd;
        m_spWebBrowser2->get_HWND( (long *)&h_exwnd );
        /////////////////////////////////////////////////////////////////////////////

        if (!pDispParams)
            return E_INVALIDARG;

        // Document complete
        switch( dispidMember )
        {
        case DISPID_TITLECHANGE:
            BSTR strUrl;
            char *Msg;
            m_spWebBrowser2->get_LocationURL( &strUrl );

            Msg = new char[256];

            BSTRtoCHAR( &Msg, strUrl);
            MessageBox(h_exwnd, Msg, "Test", MB_OK );

            delete Msg;
            break;
        case DISPID_ONQUIT:
            OnQuit();
            break;
        }

        return S_OK;
    }[/CODE]


    dispidMember 변수로 Explorer의 이벤트가 넘어 오게 된다.
    위의 코드를 보면 DISPID_TITLECHANGE라는 이벤트(제목이 바뀌면...) 현재 URL을 가져와서
    메세지 박스를 출력하도록 했다.
    이벤트 상수 정의는 exdispid.h파일안에 있으므로 이 파일을 보면 어떤 이벤트들이 있는지 파악할 수가 있다.

    BSTRtoCHAR함수는 내가 만든 사용자 함수이다. 이 함수는 다른 게시글에 올리도록 하겠다.

    그리고 컴파일을 하게 되면 

    warning MIDL2039 : interface does not conform to [oleautomation] attribute : [ Parameter 'riid' of Procedure 'Invoke' ( Interface 'ITestHelp' ) ]


    와 같은 워링이 뜰 것이다.

    그럴 경우 아래와 같이 ITestHelp에서 빨간 상자안의 코드는 전부 주석 처리 시키면 된다.

     

    저 코드가 무슨 용도인지 아직도 모르겠음.



    이제 컴파일이 되면 Test.dll파일로 생성이 되게 된다.
    시작 - 실행에서 CMD를 쳐서 도스 모드로 들어가거나 아니면 바로 입력창에

    regsvr32 Test.dll


    을 입력하면 레지스트리에 저장이 되었다고 메세지가 뜰 것이다.
    그리고 익스플로워를 켜 보고 주소를 이동하다보면 메세지 박스가 뜰 것이다.

    해제 하는 방법은 시작 - 실행에서

    regsvr32 /u Test.dll


    을 입력하면 된다.

     

    ==========================================================================================================================

     

     

    출처 : http://kongmks.cafe24.com/83








    BHO 예제를 홈페이지에 쓴지 어언 1년이 다되갑니다~

    <a href="<a href="http://kongmks.cafe24.com/82">http://kongmks.cafe24.com/82</a>">BHO 간단한 예제 만들기 - 1</a><br /><a href="<a href="http://kongmks.cafe24.com/83">http://kongmks.cafe24.com/83</a>">BHO 간단한 예제 만들기 - 2</a>


    제가 작성한 이 글을 보고 저에게 질문을 주신분이 계셔서
    저 스스로도 예제글을 보면서 그대로 따라 해봤는데 몇가지 안되는 점이 발견되어 
    이 곳에서 추가로 설명드리도록 하겠습니다^^

    우선 컴파일을 할때 함수 선언에러가 발생할 경우 
    StdAfx.h파일에 아래의 헤더 파일을 포함해주시면 되겠습니다.

    #include <exdisp.h>
    #include <exdispid.h>


     

    에러나면 당황말고 이 두 헤더를 삽입하자


    그리고 Build 설정에 따라 익스플로워에 적용이 안되는 경우가 있는데
    Build방식은 Win32Debug 혹은 Win32 Release MinSize 중에 하나로 하셔야 합니다.
    Unicode 방식은 사실 제가 테스트를 못해봤습니다^^;;;

     

    Win32 Release MinDependency로 하면 적용이 안된다;;;



    안정우님께서 보내주신 문의 메일덕분에 오류를 수정하게 되었네요 감사합니다^^
    꼭 좋은 프로그램 만드시길 바랍니다^^

    추가로 실행 제대로 되는 예제 파일도 링크 해두겠습니다.
    이 파일 링크는 무단으로 링크걸지 말아주세요..
    돈 내고 쓰는 계정인데 하루 트래픽 제한이 있답니다..^^;;;
    그냥 파일을 받으신 다음에 따로 링크해주세요..^^;;;; 

     

     

    ========================================================================================================================

     

    출처 : http://kongmks.cafe24.com/273