Skript zum Erstellen und Drucken von QR Codes

Geschrieben von Eric Scheibler am 30.12.2010

Der QR Code ist ein zweidimensionaler Strichcode, in dem man ganze URLs oder andere Informationen unterbringen kann. Diese lassen sich dann bequem per Smartphone auslesen. Weitere Informationen gibts u.A. im zugehörigen Wikipedia Artikel.

Ich verwende QR Codes, um beispielsweise CD’s oder Dokumente (Rechnungen, Bedienungsanleitungen ect.) beschriften zu können. Zum Ausdrucken verwende ich einen alten Barcodedrucker, welcher auf 10 cm breites, an der Unterseite klebendes Endlospapier druckt.

Mit dem Skript ist es mir nun ganz einfach möglich, einen Code zu erstellen. Beim ersten Start fragt das programm nach dem Namen des Druckers, der für die Ausgabe der Codes verwendet werden soll. Den Namen findet man, indem man in der Systemsteuerung unter “Drucker und Faxgeräte” (Windows XP) nachschaut. Dort einfach den gewünschten Drucker auswählen, mit F2 editieren,mittels STRG + c kopieren und in das offene Eingabefeld einfügen. Anschließend öffnet sich das eigentlich selbsterklärende Fenster, indem man den Text für den QR Code eingeben kann. Der Code mit dem gewünschten Inhalt wird nun von QRServer.com erstellt, heruntergeladen und an den Drucker weitergeleitet. Danach sollte der Druck gestartet werden und man befindet sich erneut im Eingabefeld, um gleich den nächsten Code eingeben zu können. Mit “Labelliste” ruft man eine Textdatei auf, in der alle bisher gedruckten Label zu finden sind. “Druckername” enthält in einer weiteren Datei den vorher eingegebenen Namen des Druckers, für den Fall, dass man diesen im Nachhinein noch ändern möchte. Lässt man die Datei leer, so wird der Standarddrucker verwendet. Die beiden Dateien liegen im Ordner “C:Dokumente und EinstellungenUSERNAMEAnwendungsdatenQRCode”. Auch dieses Skript habe ich mit Autohotkey erstellt.

Code der CreateQRCode.ahk

;-- ein Skript zum Erstellen und drucken von QR Codes
;-- die Codes kommen von qrserver.com

;-- Variablen setzen
pfad_ordner = %A_AppData%QRCode
png = %A_AppData%QRCodeqr_temp.png
labelliste = %A_AppData%QRCodeqr_labelliste.txt
drucker = %A_AppData%QRCodeqrcode_drucker.ini

;-- sicherstellen, dass der Config Ordner und die Config Dateien vorhanden sind
IfNotExist, %pfad_ordner%
{
FileCreateDir, %pfad_ordner%
if(errorlevel != 0)
{
Msgbox, 0, Fehler, Der Ordner %pfad_ordner% konnte nicht erstellt werden.
exitapp
}
}
IfNotExist, %labelliste%
{
FileAppend, , %labelliste%
if(errorlevel != 0)
{
Msgbox, 0, Fehler, Die Datei %labelliste% konnte nicht erstellt werden.
exitapp
}
}
IfNotExist, %drucker%
{
inputbox, druckername, QR Code Drucker, Geben sie den Namen des Druckers ein`, mit dem die QR Codes gedruckt werden sollen.`nWenn nichts eingegeben wird`, verwendet das Programm den Standarddrucker.
FileAppend, %druckername%, %drucker%
if(errorlevel != 0)
{
Msgbox, 0, Fehler, Die Datei %drucker% konnte nicht erstellt werden.
exitapp
}
}
IfExist, %png%
{
FileDelete, %png%
if(errorlevel != 0)
{
Msgbox, 0, Fehler, Die Datei %png% existiert bereits und konnte nicht gelöscht werden.
exitapp
}
}

;-- GUI
Gui, add, text, section, Text für QR Code (max 60 zeichen):
Gui, add, edit, vqrtext ys w600,
Gui, add, Button, default section, Ok
Gui, Add, Button, ys, Labelliste
Gui, Add, Button, ys, Druckername
Gui, Show,, QR Code drucken
return

guiclose:
GuiEscape:
exitApp

ButtonLabelliste:
run, %labelliste%
return

ButtonDruckername:
run, %drucker%
return

ButtonOK:
;-- Inhalt der Variablen übergeben
guiControlGet, qrtext
;-- Druckernamen ermitteln
FileReadLine, druckername, %drucker%, 1

;-- Länge von QRText überprüfen
Stringlen, qrtext_length, qrtext
if((qrtext_length == 0) || (qrtext_length > 60))
{
if(qrtext_length == 0)
msgbox, 0, Text fehlt, Es wurde kein Text eingegeben.
else
msgbox, 0, Text zu lang, % "Der eingegebene Text ist um " . (qrtext_length-60) . "Zeichen zu lang (max 60 Zeichen erlaubt)."
}
else
{
URLDownloadToFile, http://api.qrserver.com/v1/create-qr-code/?data=%qrtext%, %png%
error := PrintImage(png, druckername)

if(error == -1)
msgbox, 0, QR_Temp.png, Die Datei wurde nicht gefunden oder beim Download ist ein Fehler aufgetreten.
if(error > 0)
msgbox, 0, Fehler, Beim Drucken ist ein Fehler aufgetreten`nFehlercode = %error%
if(error == 0) ;-- wenn alles in Ordnung ist
{
;-- lösche das Eingabefeld, bewege den Fokus wieder auf das Feld und warte auf eine neue Eingabe
GuiControl, , qrtext,
GuiControl, focus, qrtext
}

;-- temporäres PNG löschen und das Label zur Labelliste (Textfile) hinzufügen
filedelete, %png%
fileappend, %qrtext%`n, %labelliste%
}
return

;-- Funktionen
PrintImage(image, printer)
{
If !FileExist(image)
Return, -1
If (printer = "")
printer := GetDefaultPrinter()

;-- drucken
RunWait, %comspec% /c "rundll32.exe shimgvw.dll`,ImageView_PrintTo /pt "%image%" "%printer%"", UseErrorLevel, Hide
Return, Errorlevel
}

;-- GetDefaultPrinter() & SetDefaultPrinter() by SKAN
;-- http://www.autohotkey.com/forum/viewtopic.php?t=18321p=115806#115806
;-- SetDefaultPrinter wird in diesem Skript zwar nicht benötigt, ich lasse es aber der Vollständigkeit halber mal stehen
GetDefaultPrinter()
{
nSize := VarSetCapacity(sPrinter, 256)
DllCall("winspool.drvGetDefaultPrinterA", "Str", sPrinter, "UintP", nSize)
Return, sPrinter
}

SetDefaultPrinter(sPrinter)
{
Return, DllCall("winspool.drvSetDefaultPrinterA", "str", sPrinter)
}

Download

Hier gibts Das Archiv mit den beschriebenen Dateien zum Download: CreateQRCode.zip