Буває дивишся на комп’ютері відео. І там замість посилання на матеріал під відео просто демонструють QR код, який містить посилання чи назву Telegram аккаунта. Приходиться згадувати де лежить телефон, сканувати QR код, і він зразу переходить по посиланні, чого можливо не хотілось робити з телефона. Тому я вирішив навчити свій ZennoPoster зчитувати інформацію з QR кодів.
Ідея в мене така – коли я побачу QR код, і захочу його прочитати – я просто натисну кнопку Print Screen на своїй клавіатурі. Після чого виберу область на екрані де знаходиться QR код. В цей момент операційна система помістить зображення в буфер обміну. Дальше я запущу на виконання проект ZennoPoster, який візьме зображення з буферу обміну, прочитає інформацію з QR кода і помістить її назад в буфер обміну. Таким чином я зможу натиснути Ctrl+V в адресному рядку браузер, тим самим вставивши одержане посилання на сайт, і при необхідності зможу на нього перейти.
Для зчитування QR кодів Google рекомендує Zebra Crossing (ZXing):
http://code.google.com/p/zxing
https://github.com/zxing/zxing
– в результаті попадаю в репозиторій проєкту.
Там знаходжу посилання на репозиторій проєкту ZXing.NET – власне він мені і потрібен для написання рішення мовою C#:
https://github.com/micjahn/ZXing.Net
На стрінці знаходжу розділ з версіями:
https://github.com/micjahn/ZXing.Net/releases/tag/v0.16.9.0
Завантажую файл: ZXing.Net.0.16.9.0.zip
Всередині знаходжу версії фреймворків, вибираю 4.5 і там уже файл zxing.dll.
Копіюю цей файл бібліотеки в папку ExternalAssemblies: “C:\ZP\RU\ZennoPoster Pro\5.47.0.0\Progs\ExternalAssemblies\zxing.dll”
Тепер в проекті ZennoPoster у розділі GAS добавляю посилання на бібліотеку, вибравши її в папці ExternalAssemblies.
Тепер можна добавити блок Свій C# Код, і вставити в нього такий фрагмент коду:
string out_data = string.Empty; try { using (var qr = new Bitmap(System.Windows.Forms.Clipboard.GetImage())){ var scanner = new ZXing.BarcodeReader(); out_data = scanner.Decode(qr).ToString(); } } catch { project.SendInfoToLog("Bad QR", true); } if(out_data.Length > 0) { project.SendInfoToLog(out_data.Length.ToString(), true); project.SendInfoToLog(out_data, true); System.Windows.Forms.Clipboard.SetText(out_data); }
Логіка його виконання така – зчитується зображення з буферу обміну у перемінну qr.
Результат розпізнавання QR коду поміщається в перемінну out_data.
Якщо в буфері обміну не було зображення, або на зображенні QR код не знайдено – то виводиться повідомлення в лог ZennoPoster: Bad QR.
Якщо QR код знайдено і успішно прочитано, тоді виводиться інформація в лог, і добавляється в буфер обміну.
Таким чином проблема вирішена – можна добавляти проект в ZennoPoster і використовувати його для зчитування QR кодів.