Converting com script from v1 to v2

Get help with using AutoHotkey (v2 or newer) and its commands and hotkeys
Charon
Posts: 12
Joined: 20 Aug 2022, 07:34

Converting com script from v1 to v2

Post by Charon » 07 Jun 2023, 06:14

I still use an automation script using MS Edge in IE mode using COM from AHKv1. Can this be converted to v2?

Code: Select all

WBGet(WinTitle="ahk_class IEFrame", Svr#=1) {               ;// based on ComObjQuery docs
   static msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
        , IID := "{0002DF05-0000-0000-C000-000000000046}"   ;// IID_IWebBrowserApp
;//     , IID := "{332C4427-26CB-11D0-B483-00C04FD90119}"   ;// IID_IHTMLWindow2
   SendMessage msg, 0, 0, Internet Explorer_Server%Svr#%, %WinTitle%
   if (ErrorLevel != "FAIL") {
      lResult:=ErrorLevel, VarSetCapacity(GUID,16,0)
      if DllCall("ole32\CLSIDFromString", "wstr","{332C4425-26CB-11D0-B483-00C04FD90119}", "ptr",&GUID) >= 0 {
         DllCall("oleacc\ObjectFromLresult", "ptr",lResult, "ptr",&GUID, "ptr",0, "ptr*",pdoc)
         return ComObj(9,ComObjQuery(pdoc,IID,IID),1), ObjRelease(pdoc)
      }
   }
   
    wb := WBGet("IE page title")
    wb.document.getElementById("00N120000066oX1").value := TechNumb
    wb.document.getElementById("00N120000066sR7").selectedIndex := myRegion
    wb.document.getElementById("00N120000066sR7").focus()
    wb.document.getElementById("00N120000066oXG").selectedIndex := 2
    wb.document.getElementByID("00N120000066ucM").Click()
    wb.Document.getElementsByName("save_new")[0].click()

My Attempt to convert to v2: I get error: E:\Apps\AHKv2\testing\com.ahk (4) : ==> Expected ":="
Specifically: ="ahk_class IEFrame", Svr#=1) {

Code: Select all

WBGet(WinTitle="ahk_class IEFrame", Svr#=1) {    ; // based on ComObjQuery docs
   static msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
        , IID := "{0002DF05-0000-0000-C000-000000000046}"   ;// IID_IWebBrowserApp
;//     , IID := "{332C4427-26CB-11D0-B483-00C04FD90119}"   ;// IID_IHTMLWindow2
   SendMessage msg, 0, 0, Internet Explorer_ServerSvr#, WinTitle
   if (ErrorLevel != "FAIL") {
      lResult:=ErrorLevel, VarSetCapacity(GUID,16,0)
      if DllCall("ole32\CLSIDFromString", "wstr","{332C4425-26CB-11D0-B483-00C04FD90119}", "ptr",&GUID) >= 0 {
         DllCall("oleacc\ObjectFromLresult", "ptr",lResult, "ptr",&GUID, "ptr",0, "ptr*",pdoc)
         return ComObj(9,ComObjQuery(pdoc,IID,IID),1), ObjRelease(pdoc)
      }
   }

Return to “Ask for Help (v2)”