#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")