Skip to content
컴퓨터잡담
2011.12.17 17:41

IE 훅킹 혹은 가로채기. 강좌

조회 수 13885 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

IE 훅킹 혹은 가로채기. 강좌

/*

윈도우 내 맘대로 다루기에서 잠깐 다루었지만 보충합니다.

 

먼저 강좌에서와 같이 오토핫키를 이용합니다.

http://www.autohotkey.com/

 

오토핫키는 사용해 보면 자바스크립트와 닮았습니다.

자바 스크립트가 웹페이지를 풍부하게 한다면 오토핫기키는 윈도우를 풍성하게 합니다.

 

오토핫키를 이용하여 오토핫키와 자바스크립트를 결합시켜 보겠습니다.

*/

 

#NoEnv
#Persistent
#SingleInstance, force 
DetectHiddenWindows, On
Process, Priority, , High  
SetBatchLines, -1
SetWinDelay, 0
SetControlDelay, 0

 

;창 생성 및 활성화 감시
Gui, +LastFound
DllCall( "RegisterShellHookWindow", UInt, WinExist() ) 
MsgNum := DllCall( "RegisterWindowMessage", Str, "SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" ) 
Return

 

ShellMessage( wParam,lParam ) 
{
  Global Url

  If wParam = 6
  {
    ControlGetText, Url, Edit1, ahk_id %lParam%
    If Url Contains http
    {
      Gosub, InjectScript
      ControlFocus, Internet Explorer_Server1, ahk_id %lParam%
    }

  }

}

 

;웹페이지 인터페이스하기
GetWebrouser()
{
  Static Msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
  SendMessage Msg, 0, 0, Internet Explorer_Server1, ahk_class IEFrame
  lResult := ErrorLevel
  DllCall("oleacc\ObjectFromLresult", "ptr", lResult
      , "ptr", GUID(IID_IHTMLDocument2,"{332C4425-26CB-11D0-B483-00C04FD90119}")
      , "ptr", 0, "ptr*", pdoc)
  ComObjError(false)
  Static IID_IHTMLWindow2 := "{332C4427-26CB-11D0-B483-00C04FD90119}"
  Pwin := ComObjQuery(pdoc, IID_IHTMLWindow2, IID_IHTMLWindow2)
  ObjRelease(pdoc)
  Static VT_DISPATCH := 9, F_OWNVALUE := 1
  Return ComObject(VT_DISPATCH, Pwin, F_OWNVALUE)
}

 

GUID(ByRef GUID, sGUID)
{
  VarSetCapacity(GUID, 16, 0)
  return DllCall("ole32\CLSIDFromString", "wstr", sGUID, "ptr", &GUID) >= 0 ? &GUID : ""
}

 

/*

ie유저 사용자를 위한 것입니다.

firefox 사용자라면 이미  웹페이지를 자유자재로 다룰 수 있으니 이런 과정이 필요없겠죠.

본인은 ie만 사용하므로 이런 과정이 필요합니다.
ie유저에게도 trixie ietoy ie7pro 등이 있어 웹페이지를 직접 다룰 수 있었지만 ie9를 사용하고부턴 전혀 사용해 본적이 없어 ie9에서도 적용되는지 여부는 모르겠습니다.

 

 

 

위의 코드를 짧게나마 설명합니다.

웹페이지 인터페이스하기 혹은 구하기는 함수입니다. 그래서 따로 독립시킨다음

#include 함수파일이름 해도 되고 오토핫키 디폴도 lib 파일에 저장해 놓으면 #include 필요없이 자동으로 읽어 들입니다.

 

 

9번째 줄 return까지 자동 실행영역입니다. 바로 위줄 onmessage에서 메세지 감시를 걸었습니다.

이 명령어에 의해서 조건 성립시 위 스크립트는 계속해서 함수 ShellMessage를 실행합니다.
이중에서  wParam = 6 조건 성립시 ie 인터페이스를 구해 사용자 것으로 만든 것입니다.
더 좋은 방법은 잘 모르겠습니다. 조건  wParam = 6으로 했을 경우 본인으로선 여태까지 불편이 없었으므로 현재까지도 사용합니다.

 

위 스크립트만으로 아무런 작업도 할 수 없거나 에러메시지가 발생할것입니다.
이유는 ShellMessage 함수내에 gosub,  InjectScript 명령줄에서 InjectScript을 만들지 않았기 때문입니다.

gosub 명령어는 함수와 유사합니다.

지정한 injectScript를 실행하고 돌아와서 다음 명령줄을 계속 이행합니다.

예시에서는 ControlFocus, Internet Explorer_Server1, ahk_id %lParam% 이 되겠네요.
이 명령어는 없어도 되는 것으로 무엇을 하냐면 간혹 어떤 웹사이트들이 로딩시 포커스를 자기 맘대로 주소표시줄이나 그런 것으로 하여 본인이 불편하여 항시 웹페이지에 포커스를 두도록 한 명령어입니다.

*/

 

;자 이제  InjectScript를 만듭니다.
;명령어와 주석(설명문)을 구분하기 위해 주석에는 오코핫키 주석처리 ;를 혹은 다중줄 /*주석*/덧붙이겠습니다.

 

InjectScript:

;여기와서 ie를 사용자 것으로 만들어 버립니다.

Pwin :=  GetWebrouser()


/*

Pwin이란 무엇이란 무엇이냐 하면 자바스크립트에서 윈도우 객체라고 생각하면 됩니다.

Pwin대신에 GetWebrouser()함수내에서 pweb구하여 pweb을 리턴시킬수도 있습니다.

여기서는 pwin이므로 pwin만 설명합니다

Pwin이 자바스크립트 윈도우 객체이므로 윈도우에 객체에 속한 모든 자바스크립트가 사용 가능하며 동일합니다.

http://www.w3schools.com/js/default.asp 자바스크립트 모든 것이 이용가능합니다.

단지 window 대신 Pwin이 쓰이는 것이죠.

window.alert("안녕");

대신

Pwin.alert("안녕")하면 되겠습니다.

*/

 

Pwin.alert("안녕")

Return ;여기서 리턴을 만나 최초 gosub으로 돌아가 그 다음줄을 실행해 나간다.

 

;자 여기까지 잘 따라 오셨다면 ie가 새로 실행되거나 혹은 로딩 될때마다  안녕이라는 메세지를 볼 수 있을 것입니다.

 


/*

이제 이 스크립트를 통해 다양한 웹페이지에 특화된 userscript를 사용하고 싶다면.

global Url이 이용하면 되겠습니다.

global 이 뭐냐면 전역변수선언입니다.

전역변수는 뭐냐면 변수를 어디에서나 사용할 수 있다는 말입니다.
오토핫키는 기본적으로 선언없이도 전역입니다. 함수내에서 사용하였기에 global 선언을 하여 전역화하였습니다.

웹브라우저가 새 페이지를 로딩할때마다 그 주소를 url이라는 변수에 담아 놓았습니다.

따라서 특정 페이지가 로딩될때 자바 스크립트를 삽입하고 싶으면 다음과 같이 하면 되겠습니다.

*/

 

 

Pwin := GetWebrouser()

If url contains daum.net

  {

  Pwin.alert(" 안녕 " )

  }

if Url Contains youtube.com/watch

  {

  Pwin.alert(" 나 압구정 날라리야")

  }

return

 

/*

몇가지 예시를 더 들자면.

Pwin.document.createStyleSheet().cssText := " [id^='nad_'] {dispay:none !important;}"

css삽입입니다.

css삽입 다른 방법

MyCSSFILE := "file:///D:/포터블 프로그램/MyCSSFILE.css"

Pwin.document.createStyleSheet(MyCSSFILE)

스크립트 언어 삽입

JSCODE =

(

  alert("이런 방법도 있어");

)

Pwin.execScript(JSCODE)

*/



로그인 후 댓글쓰기가 가능합니다.

?

List of Articles
번호 분류 제목 날짜 조회 수
863 프로세스 프로세스 2 3 2011.02.07 309944
862 WindowsTip 윈도우 DLL 오류 해결방법 2013.01.23 191823
861 컴퓨터잡담 자바스크립트로 전송(submit) 버튼 누르기 3 2010.10.10 103164
860 컴퓨터잡담 hMailServer - 설치시 주의 핵심사항 1 2010.08.24 102235
859 컴퓨터잡담 북마크 링크 주소모음 2010.10.30 96544
858 컴퓨터잡담 엑셀 색깔 지정 함수 1 2010.07.28 65220
857 컴퓨터잡담 MYSQL 미 해결 과제 : Can't connect to MySQL server on 'localhost'(10055) 3 3 2009.11.21 63323
856 컴퓨터잡담 php로 이미지를 mysql디비 저장하고 보여주는 소스 4 3 2009.10.17 59153
855 컴퓨터잡담 여러개의 엑셀파일을 하나로 합치기 2 2010.06.22 56453
854 AutoHotKey AHK) AUTOKEY 웹페이지 열지않고 소스 가져오기 또는 로그인 하기 14 2012.05.12 50565
853 Visual C++ VBS) VBScript Telnet log save 2013.09.21 50368
852 WindowsTip VBS) FTP.scriptlet and Shell.scriptlet 2013.09.21 48035
851 WindowsTip VBS) PostMessage or SendMessage to external program 2013.09.21 45401
850 AutoHotKey AHK) 보안프로그램 등으로 화면복사(Printscreen) 안될때 사용방법 1 12 file 2012.11.21 45020
849 컴퓨터잡담 오류 socket error #10061 connection 3 2 2010.09.25 45008
848 프로세스 pinomate.exe 프로세스 삭제방법 6 2011.02.13 44628
847 컴퓨터잡담 [PHP] 원격지의 이미지 사이즈 구하는 방법 2 2009.08.11 43984
846 컴퓨터잡담 emule 서버리스트 2010.11.10 42224
845 AutoHotKey Ahk) 웹페이지 감시결과에 따라 마이피플로 글 전송하기 12 file 2013.01.06 41542
844 컴퓨터잡담 안드로이드 동영상 재생시 파란색 물음표 박스만 나올때 조치방법 2 file 2013.04.26 39073
Board Pagination Prev 1 2 3 4 5 ... 44 Next
/ 44

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소