QR scan => в клиента

A

alexas1

Lotus team
10.04.2014
1 129
225
Возврвщаясь к ранее поставленному вопросу "Как, собственно??"...
Стояла задача передать штрихкод с QR сканера в клиента со следующими требованиями:
1 стандартный USB сканер без доп настроек и эмуляций - купил, воткнул, работаешь. На отдельном порту (сканер в "разрыв клавиатуры" не прокатит)
2 цифровой сканкод любой длины, без настройки префикса на сканере, стандартный суффикс - Enter
3 активация агента нотуса, принимающего скан, из любого окна\программы винды (чел работает в нескольких прогах одновременно)
4 никаких дополнительных телодвижений, типа, открыть базу\нажать кнопу\открыть форму и проч. просто нажал кнопу на сканере. если пискнул (т.е. прочёл) - всё случилось, чонада))

получилась вот такая штука, типа драйвер:
запуск без параметров - краткий хелп
с парамертами "файл базы", через пробел "Имя формы-агента"
открывает в базе указанную форму-агента, принимающего скан из клипборды винды (такам образом ShellExecute("Notes:///"&$sParam1&"/"&$sParam2&"?OpenForm"))
что там внутри:
детектит и показывает ТрейТип "отключился" "подключился" (оказалось нужно, всвязи с хреновыми разъёмами дешманских сканеров)))
детектит откуда пришли цифры и, если сканер, пишет в клипборду и по Энтеру гонит в нотус
особенности: цифры с главной клавы ремапит в Numpad, пришлось так сделать для автоопределения откуда инфа, поскольку vkey приорететней, чем info-keyboard (( по "NumberOfKeysTotal", стандартная клава отдаёт 264 символа, а почти все сканеры 101, вот так и определяем ( < 200, так захотелось)))
по нажатию кнопки - ремап в нумпад и детект, по отжатию - печать, если "не сканер", иначе - в клипборду
детект по скорости ввода не прокатил - профи с нумпада фигачут со скоростью сканера, оказывается)))
форма-агент - как стандартный "ВЕБ агент" (или xpage agent), ток в клиенте - открылась, всё обработала и тут же закрылась (в postopen), вкладка моргнёт канешна.
если нужен ток бэк, то вся обработка в Queryopen & continue = false и не моргнёт)
двухмесячная работа прошла без нареканий (регистрация прихода-ухода клиентов), все довольны, как слоны)
в конечном варианте вообще без оператора - клиенты сами тычут карточки прихода/ухода в щелку и всё регицца само)

ЗЫ тестилось на десятке 64
ЗЗЫ забрать из клипборды

Код:
Declare Function GetClipboardData Lib "user32"(Byval wFormat As Long) As String
Declare Function OpenClipboard Lib "user32"(Byval hwnd As Long) As Long
Declare Function EmptyClipboard Lib "user32"() As Long
Declare Function CloseClipboard Lib "user32"() As Long
Public Const CF_TEXT = 1

Function RetrieveClipboard () As String
    Dim hClipMemory As Variant
    Dim MyString As String
    If OpenClipboard(0&) = 0 Then
        Msgbox "Cannot open Clipboard. Another app. may have it open"
    End If
    
    Call OpenClipboard(0)
    
    hClipMemory = GetClipboardData (CF_TEXT)
    If Isnull(hClipMemory) Then
        Msgbox "Could not allocate memory"
        Exit Function
    End If
    
    Call closeclipboard
    RetrieveClipboard = hClipMemory
End Function

Dim clip As String, code As String
    clip = RetrieveClipboard
 

Вложения

Последнее редактирование:
  • Нравится
Реакции: DarkDepth, 1984 и lmike
A

alexas1

Lotus team
10.04.2014
1 129
225
ещё нюанс, мож не заметили, положительный)
если, при загруженной проге, выдернуть сканер, прога просто болтается в памяти и ток следит за появлением девайса в системе, больше ничего не делает и на ввод с клавы не влияет никак, как будто её и нету
соотв., почти всегда, можно ваще не париться с её принудительной выгрузкой
и, ещё отмечу, что два экземпляра проги в памяти (с одним именем) исключены, такшта, тож можно не волноваться на этот счёт.
 
Мы в соцсетях: