使用 AHK 获取 IE 中输入字段的值
Get the value of an input field in IE using AHK
我正在尝试使用自动热键获取 IE 中输入字段的值。
我在 windows 8.1 上使用 AHK 版本 1.1.19.01 使用 IE 11.0.9600.17498
我有一个简单的(本地)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
这是一个简单的工作示例 ( 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 接口和returns一个可用的 IE Comobject
SetTitleMatchMode, 2
wb := WBGet("Page1")
txt := wb.Document.All["area2"].value
MsgBox % txt
希望对您有所帮助
我正在尝试使用自动热键获取 IE 中输入字段的值。
我在 windows 8.1 上使用 AHK 版本 1.1.19.01 使用 IE 11.0.9600.17498
我有一个简单的(本地)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
这是一个简单的工作示例 ( 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 接口和returns一个可用的 IE Comobject
SetTitleMatchMode, 2
wb := WBGet("Page1")
txt := wb.Document.All["area2"].value
MsgBox % txt
希望对您有所帮助