1

Тема: 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
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder