UrlDownloadToVar()
스크립트에 대한 설명: If (Proxy != "") io_hInternet := DllCall("wininet\InternetOpenA" iou := DllCall("wininet\InternetOpenUrlA" If (ErrorLevel != 0 or iou = 0) { VarSetCapacity(buffer, 512, 0) DllCall("wininet\InternetCloseHandle", "uint", iou)
제목 그대로 UrlDownloadToFile 명령을 확장시켜준 함수입니다.
당연히 공식 포럼에서 퍼온 자료입니다.
http://www.autohotkey.com/forum/topic10466.html
보통 웹페이지의 소스에서 원하는 내용을 추출할때
UrlDownloadToFile 명령으로 해당 소스를 파일로 다운로드후
FileRead 명령등으로 내용을 변수에 읽어들여 String 처리를 하게 됩니다.
UrlDownloadToVar()명령을 사용하면 변수로 해당 내용을 바로 받을 수 있습니다.
아래 예제는 IE의 주소창의 주소를 사용해서 해당 페이지의 소스를 출력해 줍니다.
^RButton::
WinGetTitle,Title,A
SetTitleMatchMode,3
ControlGetText,url,Edit1,%Title%
res:=UrlDownloadToVar(url,src)
msgbox,%src%
reload
return
<--------------------------------------------- AHK 스크립트 내용 --------------------------------------------->
;http://www.autohotkey.com/forum/topic10466.html
UrlDownloadToVar(URL, Proxy="", ProxyBypass="") {
AutoTrim, Off
hModule := DllCall("LoadLibrary", "str", "wininet.dll")
AccessType=3
Else
AccessType=1
;INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
;INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
;INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
;INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
, "str", "" ;lpszAgent
, "uint", AccessType
, "str", Proxy
, "str", ProxyBypass
, "uint", 0) ;dwFlags
, "uint", io_hInternet
, "str", url
, "str", "" ;lpszHeaders
, "uint", 0 ;dwHeadersLength
, "uint", 0x80000000 ;dwFlags: INTERNET_FLAG_RELOAD = 0x80000000 // retrieve the original item
, "uint", 0) ;dwContext
DllCall("FreeLibrary", "uint", hModule)
return 0
}
VarSetCapacity(NumberOfBytesRead, 4, 0)
Loop
{
irf := DllCall("wininet\InternetReadFile", "uint", iou, "uint", &buffer, "uint", 512, "uint", &NumberOfBytesRead)
NOBR = 0
Loop 4 ; Build the integer by adding up its bytes. - ExtractInteger
NOBR += *(&NumberOfBytesRead + A_Index-1) << 8*(A_Index-1)
IfEqual, NOBR, 0, break
;BytesReadTotal += NOBR
DllCall("lstrcpy", "str", buffer, "uint", &buffer)
res = %res%%buffer%
}
StringTrimRight, res, res, 2
DllCall("wininet\InternetCloseHandle", "uint", io_hInternet)
DllCall("FreeLibrary", "uint", hModule)
AutoTrim, on
return, res
}