com

Author: Sean Last Modified: 20100206


AutoHotkey does not provide native support for COM. With these functions it is possible to work with the COM. Now it is possible to automate the Internet Explorer.

From Wikipedia, the free encyclopedia:
(http://en.wikipedia.org/wiki/Component_Object_Model)

"Component Object Model (COM) is a binary-interface standard for software componentry introduced by Microsoft in 1993. It is used to enable interprocess communication and dynamic object creation in a large range of programming languages. The term COM is often used in the Microsoft software development industry as an umbrella term that encompasses the OLE, OLE Automation, ActiveX, COM+ and DCOM technologies."

COM_AccessibleChildren(pacc, cChildren, ByRef varChildren)
COM_AccessibleObjectFromEvent(hWnd, idObject, idChild, ByRef _idChild_="")
COM_AccessibleObjectFromPoint(x, y, ByRef _idChild_="")
COM_AccessibleObjectFromWindow(hWnd, idObject=-4, IID = "")
COM_AccInit()
COM_AccTerm()
COM_ActiveXObject(ProgID)
COM_AddRef(ppv)
COM_Advise(pcp, psink)
COM_Ansi2Unicode(ByRef sString, ByRef wString, nSize = "")
COM_Ansi4Unicode(pString, nSize = "")
COM_AtlAxAttachControl(pdsp, hWnd, Version = "")
COM_AtlAxCreateContainer(hWnd, l, t, w, h, Name = "", Version = "")
COM_AtlAxCreateControl(hWnd, Name, Version = "")
COM_AtlAxGetContainer(pdsp, bCtrl = "")
COM_AtlAxGetControl(hWnd, Version = "")
COM_AtlAxGetHost(hWnd, Version = "")
COM_AtlAxWinInit(Version = "")
COM_AtlAxWinTerm(Version = "")
COM_CLSID4ProgID(ByRef CLSID, ProgID)
COM_CoCreateGuid()
COM_CoInitialize()
COM_ConnectObject(psource, prefix = "", DIID = "")
COM_CoTaskMemAlloc(cb)
COM_CoTaskMemFree(pv)
COM_CoUninitialize()
COM_CreateIDispatch()
COM_CreateObject(CLSID, IID = "", CLSCTX = 5)
COM_DisconnectObject(psink)
COM_DispGetParam(pDispParams, Position = 0, vt = 8)
COM_DispInterface(this, prm1="", prm2="", prm3="", prm4="", prm5="", prm6="", prm7="", prm8="")
COM_DispSetParam(val, pDispParams, Position = 0, vt = 8)
COM_Enumerate(penum, ByRef Result, ByRef vt = "")
COM_Error(hr = "", lr = "", pei = "", name = "")
COM_FindConnectionPoint(pdp, DIID)
COM_GetActiveObject(ProgID)
COM_GetConnectionInterface(pcp)
COM_GetDefaultEvents(pdisp)
COM_GetDefaultInterface(pdisp)
COM_GetGuidOfName(pdisp, Name)
COM_GetObject(Moniker)
COM_GetRoleText(nRole)
COM_GetStateText(nState)
COM_GetTypeInfoOfGuid(pdisp, GUID)
COM_GUID4String(ByRef CLSID, String)
COM_Init()
COM_Invoke(pdsp,name="",prm0="vT_NoNe",prm1="vT_NoNe",prm2="vT_NoNe",prm3="vT_NoNe",prm4="vT_NoNe",prm5="vT_NoNe",prm6="vT_NoNe",prm7="vT_NoNe",prm8="vT_NoNe",prm9="vT_NoNe")
COM_Invoke_(pdsp,name,typ0="",prm0="",typ1="",prm1="",typ2="",prm2="",typ3="",prm3="",typ4="",prm4="",typ5="",prm5="",typ6="",prm6="",typ7="",prm7="",typ8="",prm8="",typ9="",prm9="")
COM_IsEqualGUID(this+24,prm1)
COM_ProgID4CLSID(pCLSID)
COM_QueryInterface(ppv, IID = "")
COM_QueryService(ppv, SID, IID = "")
COM_Release(ppv)
COM_SafeArrayDestroy(psar)
COM_ScriptControl(sCode, sLang = "", bEval = False, sFunc = "", sName = "", pdisp = 0, bGlobal = False)
COM_String4GUID(pGUID)
COM_SysAllocString(astr)
COM_SysFreeString(bstr)
COM_SysString(ByRef wString, sString)
COM_SysStringLen(bstr)
COM_Term()
COM_Unadvise(pcp, nCookie)
COM_Unicode2Ansi(ByRef wString, ByRef sString, nSize = "")
COM_Unicode4Ansi(ByRef wString, sString, nSize = "")
COM_VariantChangeType(pvarDst, pvarSrc, vt = 8)
COM_VariantClear(pvar)
COM_VTable(ppv, idx)
COM_WindowFromAccessibleObject(pacc)

For the functions's parameters and return value, please see it's source code or the document.

Remarks

Requires Ahk Version 1.0.47.00.

Some tutorials:
o http://www.autohotkey.com/forum/viewtopic.php?t=34972 (by tank)
o http://www.autohotkey.com/forum/viewtopic.php?t=51020 (by jethrow)

For update's details and remarks related to the functions, please see the AutoHotkey Forum: http://www.autohotkey.com/forum/topic22923.html

License

nonexistent

Example

; #Include com.ahk
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

COM_Init()
pwb := COM_CreateObject("InternetExplorer.Application")
COM_Invoke(pwb , "Visible=", "True") ;"False" ;"True" ;
url:="http://www.google.com"
COM_Invoke(pwb, "Navigate", url)
loop
      If (rdy:=COM_Invoke(pwb,"readyState") = 4)
         break
url:="http://www.Yahoo.com"
COM_Invoke(pwb, "Navigate", url)
loop
      If (rdy:=COM_Invoke(pwb,"readyState") = 4)
         break
MsgBox, 262208, Done, Goodbye,5
COM_Invoke(pwb, "Quit")
COM_Term()