使用AHK获取IE中输入字段的值

时间:2015-01-22 15:12:18

标签: autohotkey

我正在尝试使用自动热键获取IE中输入字段的值。

我使用IE 11.0.9600.17498在Windows 8.1上使用AHK版本1.1.19.01

我有一个简单的(本地)html页面:

<!DOCTYPE html>
<html>
<head>
    <title>Page1</title>
</head>
<body>
    <input type="text" name="area2" id="area2" />
</body>
</html>

我在文本框中键入内容然后运行ahk脚本(应该告诉我输入的值)。

这是我的ahk脚本:

wb := IEGet("Page1")
WinActivate Page1
txt := wb.Document.All.area2.Value
MsgBox % txt

IEGet(Name="")        ;Retrieve pointer to existing IE window/tab
{
    IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame
    {
        Name := ( Name="New Tab - Windows Internet Explorer" ) ? "about:Tabs" : RegExReplace( Name, " - (Windows|Microsoft) Internet Explorer" )
    }

    For wb in ComObjCreate( "Shell.Application" ).Windows
    {
        If ( wb.LocationName = Name ) && InStr( wb.FullName, "iexplore.exe" )
        {
            Return wb
        }
    }
}

消息框为空白。

我尝试了各种语法无济于事。我做错了什么?

IEGet功能是从某个网页复制的 - 它不是我的,但它确实有效。

注意: 找到ahk版本:

msgbox % "my ahk version: " A_AhkVersion

1 个答案:

答案 0 :(得分:1)

这是一个简单的工作示例(win7 v1.1.19.01 IE11)

FileSelectFile, path

wb := ComObjCreate("InternetExplorer.Application")
wb.visible := true
wb.navigate(path)

while wb.readyState!=4 || wb.document.readyState != "complete" || wb.busy
    continue
return

f6::
msgbox % wb.document.all["area2"].value
return

我有时也遇到过IEGet()和IE9 +

的问题

但这是我用来获取活动IE对象的函数

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)
      }
   }
}

它查询IWebBrowserApp接口并返回一个可用的IE Comobject

SetTitleMatchMode, 2

wb := WBGet("Page1")
txt := wb.Document.All["area2"].value
MsgBox % txt

希望有所帮助