#Requires AutoHotkey v2.0
#SingleInstance Force
EN_LAYOUT := 0x0409 ; US English
isScanning := false
prevLayout := 0 ; Для сохранения предыдущей раскладки
; Перехват префикса Ctrl+B (от сканнера)
^b::
{
global isScanning, prevLayout
; Сохраняем текущую раскладку перед переключением
prevLayout := DllCall("GetKeyboardLayout", "UInt", DllCall("GetWindowThreadProcessId", "Ptr", WinExist("A"), "UInt", 0), "UInt")
SwitchToEnglish()
isScanning := true
ToolTip("Сканнер детектирован: EN включён")
SetTimer(RemoveTooltip, -2000)
; Пропускаем Ctrl+B, данные штрихкода пойдут дальше
}
; Сброс по суффиксу Enter
$Enter::
{
global isScanning, prevLayout
if (isScanning) {
isScanning := false
; Возврат предыдущей раскладки (раскомментируйте, если нужно вернуть RU после ввода)
; PostMessage(0x50, 0, prevLayout, , "A")
ToolTip("Сканирование завершено: флаг сброшен")
SetTimer(RemoveTooltip, -2000)
Send("{Enter}")
} else {
Send("{Enter}")
}
}
SwitchToEnglish() {
PostMessage(0x50, 0, EN_LAYOUT, , "A") ; Переключает на EN для активного окна
}
RemoveTooltip() {
ToolTip()
}
TrayTip("Scanner Fix", "Скрипт запущен: EN по префиксу Ctrl+B")