Пост #281428

     
сохранен 09.11.2025 16:12
  • Редактировать пост
  • Печать
  • Скачать
  • Сравнить с постом
    #  
  • Нумерация строк
  • Подсветка синтаксиса  
Текст поста
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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")
Добавить комментарий
Автор