参考一些英文网站,使用以下代码可以了
Code: Select all
For wo in ComObjCreate("Shell.Application").Windows
if InStr(wo.FullName, "iexplore.exe") {
WinActivate, % "ahk_id " wo.hwnd
wo.Navigate("about:blank", 2048) ; navOpenInNewTab = 2048
WinWaitActive, 空白页 - Windows Internet Explorer
pwb := WBGet()
pwb.Navigate("http://mail.163.com")
ieload(pwb)
break
}
pwb.document.getElementById("idInput").value:="yw987258"
pwb.document.getElementById("pwdInput").value:="xxxxxx"
pwb.document.getElementById("loginBtn").Click()
IELoad(wb) ;You need to send the IE handle to the function unless you define it as global.
{
if !wb ;If wb is not a valid pointer then quit
return False
Loop ;Otherwise Sleep for .1 seconds untill the page starts loading
Sleep,100
until (wb.busy)
Loop ;Once it starts loading wait until completes
Sleep,100
until (!wb.busy)
Loop ;optional check to wait for the page to completely load
Sleep,100
until (wb.Document.Readystate = "Complete")
return True
}
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)
}
}
}