ComObjConnect() [v1.0.90+]
객체의 이벤트 소스를 주어진 접두사를 가진 함수에 연결합니다.
ComObjConnect(ComObject [, Prefix])
매개변변수
- ComObject
-
이벤트를 일으키는 객체.
객체가 IConnectionPointContainer 인터페이스를 지원하지 않거나 또는 객체의 클래스에 관한 유형정보를 열람할 수 없으면, 에러 메시지가 나타납니다. 이것은 ComObjError 또는 try/catch으로 억누르거나 처리할 수 있습니다.
[v1.1.22]+에서, IProvideClassInfo 인터페이스를 객체가 지원하면 그 클래스의 관한 유형정보를 열람하는 데 사용됩니다. 그렇지 않으면, ComObjConnect는 객체의 IDispatch 인터페이스를 통하 유형 정보를 열람하려고 시도하는데, 이것은 신뢰성이 떨어집니다.
- Prefix
-
이벤트 이름 앞에 붙일 문자열. 이벤트가 일어날 때 호출할 함수를 결정합니다.
생략하면, 객체가 "연결이 끊깁니다"; 즉, 스크립트는 더 이상 그의 이벤트 고지를 받지 않습니다.
[v1.1.01+]: 이 매개변수는 스크립트가 지정한 객체일 수 있습니다. 이벤트가 일어나면, 그에 상응하는 메쏘드가 호출됩니다. 첫 매개변수는 보통 숨은
this
매개변수입니다. 이 매개변수는 COM 객체 말고 스크립트에-정의된 객체를 참조합니다. 각 이벤트마다 메쏘드를 정의하지 않고 모든 이벤트를 나포하려면 __Call 메타-함수를 정의하십시오.
사용법
효과적으로 ComObjConnect를 사용하려면, 먼저 관심을 둔 이벤트를 처리할 함수를 스크립트에 작성해야 합니다. "이벤트-처리자"라고 하는 그런 함수는 구조가 다음과 같습니다:
PrefixEventName([Params..., ComObject]) { ... event-handling code ... return returnValue }
Prefix는 여러분이 고른 접두사입니다. 반면에 EventName은 함수가 처리해야 하는 이벤트의 이름입니다.
Params는 이벤트가 가진 매개변수에 상응합니다. 이벤트에 매개변수가 없으면, Params도 완전히 생략되어야 합니다. ComObject는 선택적입니다. 그리고 Params의 개수가 올바르게 정의되어 있을 경우에만 사용해야 합니다; 그 안에 ComObjConnect에 건넸던 원래 포장 객체를 가리키는 참조가 들어 있습니다. "ComObject"는 여러분의 스크립트 문맥에 맞게 보다 의미있는 이름으로 교체되어야 합니다.
이벤트 처리자는 반환 값이 있을 수 있다는 사실에 주목하십시오. COM-종속적 유형의 값을 돌려주려면, ComObject(type, value)를 사용하십시오. 예를 들어, return ComObject(0,0)
는 variant 유형의 VT_EMPTY를 돌려줍니다. 이것은 자바스크립트에서 undefined
를 돌려주는 것 (또는 아무것도 돌려주지 않는 것)과 동등합니다.
이벤트 처리를 켜려면 ComObjConnect(yourObject, "Prefix")
를 호출합니다.
객체와 연결을 끊으려면 (이벤트 처리를 중지하려면) ComObjConnect(yourObject)
를 호출합니다.
매개변수 개수를 알지 못하면, 가변 함수를 사용할 수 있습니다.
관련 항목
ComObjCreate, ComObjGet, ComObjActive, ComObjError, WScript.ConnectObject (MSDN)
예제
ie := ComObjCreate("InternetExplorer.Application") ; 상응하는 스크립트 함수에 접두사를 "IE_"로 하여 이벤트를 연결합니다. ComObjConnect(ie, "IE_") ie.Visible := true ; 이것은 IE7에서 제대로 작동하지 않는다고 알려져 있습니다. ie.Navigate("http://ahkscript.org/") #Persistent IE_DocumentComplete(ieEventParam, url, ieFinalParam) { global ie if (ie != ieEventParam) s .= "첫 매개변수는 새 포장 객체입니다.`n" if (ie == ieFinalParam) s .= "마지막 매개변수는 원래 포장 객체입니다.`n" if ((disp1:=ComObjUnwrap(ieEventParam)) == (disp2:=ComObjUnwrap(ieFinalParam))) s .= "두 포장 객체 모두 같은 IDispatch 실체를 가리킵니다.`n" ObjRelease(disp1), ObjRelease(disp2) MsgBox % s . "Finished loading " ie.Document.title " @ " url ie.Quit() ExitApp }