Плагин KBDLayout.spf (раскладка клавиатуры)

Обсуждение программ nnCron и nnCron LITE

Плагин KBDLayout.spf (раскладка клавиатуры)

Postby dothen » Sun, 25 Nov 2018, 17:59

Code: Select all
\ Файл:       kbdlayout.spf
\ Автор:      dothen
\ Дата:       25.11.2018
\ Версия:     1.0
\ Описание: Определяет текущую раскладку клавиатуры для указанного окна.
\ Слова из плагина kbd_layout.spf CUR-KBLT WIN-KBLT ARA? и т.д. теперь работают и для консольных окон.
\ Можно сразу получить буквенное обозначение раскладки клавиатуры (как в языковой панели) для большинства языков.

\ Подключать вместо или после плагина kbd_layout.spf.

\ New words:    CONSOLE-KBLT ( hwnd -- n )
\               GUI-KBLT ( hwnd -- n )
\               GETKBLTNAME ( n -- a u ) \ RU EN DE ...

\ Example:    CUR-KBLT GETKBLTNAME MsgBox
\ ---------------------------------------

REQUIRE WIN-KBLT plugins\kbd_layout.spf

WINAPI: FreeConsole Kernel32.dll
WINAPI: AttachConsole Kernel32.dll
WINAPI: GetConsoleKeyboardLayoutNameA Kernel32.dll
\ WINAPI: GetClassNameA User32.dll

\ "Процесс может быть присоединен к одной консоли.
\ Если вызывающий процесс уже присоединен к консоли,
\ AttachConsole завершается с ошибкой ERROR_ACCESS_DENIED."
\ Т.е. если в nnCron запущена локальная консоль, тогда будет ошибка.
\ Если в nnCron запущена удаленная консоль или нет консоли, тогда нет ошибки.
: CONSOLE-KBLT ( hwnd -- n )
    [ ModuleName ONLYNAME S" nncron.exe" COMPARE 0= ] \ Если nncron.exe то добавляем проверку если tm.exe то нет.
    [IF] Z" nnCron console" Z" ConsoleWindowClass" FindWindowA IF S" Error CONSOLE-KBLT, Local console barrier!" CRON-LOG DROP 1024 EXIT THEN [THEN]
    >R 0 SP@ R> GetWindowThreadProcessId DROP
    AttachConsole DROP
    PAD GetConsoleKeyboardLayoutNameA DROP
    FreeConsole DROP
    PAD ASCIIZ> BASE @ >R HEX S>NUM R> BASE !
;

: GUI-KBLT ( hwnd -- n )
  0 SWAP GetWindowThreadProcessId GetKeyboardLayout
  0xFFFF AND
;

: WINCONSOLE? ( hwnd -- ? )
    DUP 256 PAD ROT GetClassNameA PAD SWAP
    S" ConsoleWindowClass" COMPARE 0=
;

\ Хак: В скомпилированное слово WIN-KBLT (kbd_layout.spf) вставляем переход на новое слово.
:NONAME ( hwnd -- n )
    WINCONSOLE?
    IF
      CONSOLE-KBLT
    ELSE
      GUI-KBLT
    THEN
;

' WIN-KBLT JMP


CREATE KBLTNAMES
C" $$ARBGCAZHCSDADEELENESFIFRHEHUISITJAKONLNBPLPTRMRORUHRSKSQSVTHTRURIDUKBESLETLVLTTGFAVIHYAZEU$$MK$$$$TN$$XHZUAFKAFOHIMTSE$$$$MSKKKYSWTKUZTT$$"
COUNT SZ",
\ Там понятнее... http://autoit-script.ru/autoit3_docs/appendix/OSLangCodes.htm

VARIABLE kbltname

: GETKBLTNAME ( n -- a u )
    1093 MIN 1024 MAX 1024 - 2* KBLTNAMES + W@ kbltname W! kbltname 2
;


dothen
 
Posts: 196
Joined: Mon, 16 Mar 2015, 04:58

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Google [Bot], Raistlin and 4 guests