Тема: AHK: Генератор QR кодов от Google
У Гугла, оказывается, есть бесплатное API для генерации QR кодов. Правда, написано, что this API is deprecated, однако функционал на данный момент поддерживается.
len := QrGenerator("https://forum.script-coding.com/viewtopic.php?id=17041", pngData, 200)
FileOpen(A_ScriptDir . "\qr.png", "w").RawWrite(pngData, len)
Gui, Margin, 0, 0
Gui, Add, Pic,, % A_ScriptDir . "\qr.png"
Gui, Show
Return
GuiClose() {
ExitApp
}
QrGenerator(text, ByRef pngData, qrSizePix := 300, correctionLevel := "M") {
; correctionLevel: L, M, Q, H
static url := "https://chart.googleapis.com/chart?cht=qr"
completeUrl := url . "&chl=" . EncodeDecodeURI(text) . "&chs=" . qrSizePix . "&chld=" . correctionLevel
dataLen := WebRequest(completeUrl, pngData,,,, error := "")
if (error != "")
throw error
Return dataLen
}
EncodeDecodeURI(str, encode := true, component := true) {
static Doc, JS
if !Doc {
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
JS := Doc.parentWindow
( Doc.documentMode < 9 && JS.execScript() )
}
Return JS[ (encode ? "en" : "de") . "codeURI" . (component ? "Component" : "") ](str)
}
WebRequest(url, ByRef data, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
Whr.Open(method, url, true)
for name, value in HeadersArray
Whr.SetRequestHeader(name, value)
Whr.Send(body)
Whr.WaitForResponse()
status := Whr.status
if (status != 200)
error := "HttpRequest error, status: " . status
Arr := Whr.responseBody
pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
length := Arr.MaxIndex() + 1
VarSetCapacity(data, length, 0)
DllCall("RtlMoveMemory", "Ptr", &data, "Ptr", pData, "Ptr", length)
Return length
}