Что нового

Работа со сканером штрих кодов

Xenomorph

Новичок
Сообщения
4
Репутация
0
Здравствуйте. Есть такой вопрос какой функцией я бы мог реализовать перехват данных со сканера штрихкодов ? Объясню для чего , мне нужно, что бы скрипт отлавливал определенные штрихкоды товара которые одинаково начинаются типа 232323ХХХХХХХ и сохранял из в файл а потом нужно , что бы эти сирийки он списал на определённом сайте.
 

Sergio

Новичок
Сообщения
41
Репутация
3
Задача нетривиальная. Если сканер запрограммирован на нажатие enter в конце ввода то скорее всего простыми средствами не получится. Вам бы узнать куда приложение сохраняет данные о продажах и могли бы прям из базы подтягивать.
 
Автор
X

Xenomorph

Новичок
Сообщения
4
Репутация
0
Задача нетривиальная. Если сканер запрограммирован на нажатие enter в конце ввода то скорее всего простыми средствами не получится. Вам бы узнать куда приложение сохраняет данные о продажах и могли бы прям из базы подтягивать.
Дело все в том , что товар бьётся в 1с на удаленном сервере , своего рода перехват не получится сделать?
Сообщение автоматически объединено:

Задача нетривиальная. Если сканер запрограммирован на нажатие enter в конце ввода то скорее всего простыми средствами не получится. Вам бы узнать куда приложение сохраняет данные о продажах и могли бы прям из базы подтягивать.
Ну и если я правильно понял , то нет enter он не нажимает.
 

All2khoff

Продвинутый
Сообщения
351
Репутация
65
Со сканером шк все не однозначно, если он работает в режиме эмуляции com(RS-232) порта, то тут один подход, если эмулирует клавиатуру то другой, опять же 1с на удаленном сервере можно понять по разному, вы подключаетесь через RDP? через публикацию на веб сервере? или может каким нибудь экзотическим способом типа teamviewer или anydesk?
На тему эмуляции клавиатуры то тут шансы довольно высоки, хватай все номера (сканер шк все цифры считаные с шк меньше чем за секунду выдает) фильтруй подходящее, да пиши в файл.
А вот с эмуляцией com порта будет посложнее, по сути надо будет перехватывать данные с условного com1 порта обрабатывать их если есть нужные записываем в файл, а так же не важно подходящие данные или нет отправлять в условный com2 порт. При этом в 1с надо будет изменить настройки, что сканер шк теперь не на условном com1, а на com2.
Немного сумбурно, но надеюсь мысль свою смог рассказать.
 
Автор
X

Xenomorph

Новичок
Сообщения
4
Репутация
0
Со сканером шк все не однозначно, если он работает в режиме эмуляции com(RS-232) порта, то тут один подход, если эмулирует клавиатуру то другой, опять же 1с на удаленном сервере можно понять по разному, вы подключаетесь через RDP? через публикацию на веб сервере? или может каким нибудь экзотическим способом типа teamviewer или anydesk?
На тему эмуляции клавиатуры то тут шансы довольно высоки, хватай все номера (сканер шк все цифры считаные с шк меньше чем за секунду выдает) фильтруй подходящее, да пиши в файл.
А вот с эмуляцией com порта будет посложнее, по сути надо будет перехватывать данные с условного com1 порта обрабатывать их если есть нужные записываем в файл, а так же не важно подходящие данные или нет отправлять в условный com2 порт. При этом в 1с надо будет изменить настройки, что сканер шк теперь не на условном com1, а на com2.
Немного сумбурно, но надеюсь мысль свою смог рассказать.
Подключение к 1 с идёт через RDP. Спасибо за мысль , сейчас глянуть что по сканеру.
Сообщение автоматически объединено:

Со сканером шк все не однозначно, если он работает в режиме эмуляции com(RS-232) порта, то тут один подход, если эмулирует клавиатуру то другой, опять же 1с на удаленном сервере можно понять по разному, вы подключаетесь через RDP? через публикацию на веб сервере? или может каким нибудь экзотическим способом типа teamviewer или anydesk?
На тему эмуляции клавиатуры то тут шансы довольно высоки, хватай все номера (сканер шк все цифры считаные с шк меньше чем за секунду выдает) фильтруй подходящее, да пиши в файл.
А вот с эмуляцией com порта будет посложнее, по сути надо будет перехватывать данные с условного com1 порта обрабатывать их если есть нужные записываем в файл, а так же не важно подходящие данные или нет отправлять в условный com2 порт. При этом в 1с надо будет изменить настройки, что сканер шк теперь не на условном com1, а на com2.
Немного сумбурно, но надеюсь мысль свою смог рассказать.
Подключается как клавиатура HID сканер шк
Сообщение автоматически объединено:

Все нашёл подходящий код, добавил путь для сохранения в текстовый файл и в выводе на экран (отметил красным) вводит верный код а в текстовом( так же на скрине ) дублирует несколько раз начало , не пойму что не так((
ссылка на скриншот https://ibb.co/JpKJc1z
сам скрипт вот

Код:
HotKeySet("{ESC}", "OnAutoItExit")

Global Const $WH_KEYBOARD_LL    = 13

Global $sBuffer                 = ""
Global $hStub_KeyProc           = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
Global $hMod                    = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
Global $hHook                   = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", _
    $WH_KEYBOARD_LL, "ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0)

MsgBox(4096, "", "Type anything anywhere and it will appear in the top left corner of the screen.")

While 1
    Sleep(10)
WEnd

Func EvaluateKey($nKeyCode)
    If (($nKeyCode > 22) And ($nKeyCode < 91)) _
        Or (($nKeyCode > 47) And ($nKeyCode < 58)) Then
        $sBuffer &= Chr($nKeyCode)
        ToolTip($sBuffer, 0, 0)
        FileWrite("D:\sts\FileSTS.txt", $sBuffer)
    ElseIf ($nKeyCode > 159) And ($nKeyCode < 164) Then
        Return
    EndIf
EndFunc

Func _KeyProc($nCode, $wParam, $lParam)
    Local $aRet, $KEYHOOKSTRUCT

    If $nCode < 0 Then
        $aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
        Return $aRet[0]
    EndIf

    If $wParam = 256 Then
        $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
        EvaluateKey(DllStructGetData($KEYHOOKSTRUCT, 1))
    EndIf

    $aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)

    Return $aRet[0]
EndFunc

Func OnAutoItExit()
    If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
    $hStub_KeyProc = 0
    DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
    If @HotKeyPressed <> "" Then Exit
EndFunc
 
Последнее редактирование:

All2khoff

Продвинутый
Сообщения
351
Репутация
65
Код:
FileWrite("D:\sts\FileSTS.txt", $sBuffer&@CRLF)

Перенос новой записи шк на новую строку поможет легче читать.
Еще можно попробовать сразу определять соответствует ли шк необходимой маске и если да то писать в файл иначе пропустить.
 
Автор
X

Xenomorph

Новичок
Сообщения
4
Репутация
0
Код:
FileWrite("D:\sts\FileSTS.txt", $sBuffer&@CRLF)

Перенос новой записи шк на новую строку поможет легче читать.
Еще можно попробовать сразу определять соответствует ли шк необходимой маске и если да то писать в файл иначе пропустить.
ToolTip на скриншоте выводит верный шк а вот в текстовый документ шк записывает неверный т.е копирует по несколько раз начальные символы . Если с клавиатура ввожу такая же проблема типа пишу 123 ToolTip выдаёт 123 а в текстовом 1121121123 вроде такого
 
Верх