Форум » Clipper » программно переключать РУС/ЛАТ в консоли » Ответить

программно переключать РУС/ЛАТ в консоли

Sergy: Вот думаю, как сделать программный переключатель в консольном окне: при вводе пароля нужен LAT, при поиске фамилии клиента - однозначно RUS, ну и так, по мелочи... Пока работаем, используя RKM.COM - никаких проблем, все очень удобно, правый Ctrl переключает, в правом верхнем углу консольного окна отображается текущая раскладка. Хочется добавить взаимодействия Задача работает на разношерстном парке ОС и железа: Win98SE, Win2K, WinXP, Win2003 (terminal) - Clipper 5.2e + Blinker 6 + CT + Nanforum Может, у кого был опыт - чтобы имеющийся функционал не пострадал? Спасибо.

Ответов - 1

Петр: Когда-то давно написал для работы с keyrus.com, связка Clipper 5.3b + Exospace, где-то был вариант для Blinker и CauseWay, но что-то не могу найти, наверное утерял, так как давно не пользуюсь keyrus.com в связи с известными проблемами последнего под WinXP, да и Clipper очень редко использую. На Win9* все работало без проблем. О RKM.COM ничего не скажу, не встречались, но может быть он, как и keyrus.com, тоже имеет свой програмный интерфейс? /*** */ FUNCTION KeybMode( mode) local bitstr, lp, rp, cm // IF !keyRus() RETURN "U" END bitstr := PADL(BaseToBase(LTRIM(STR(KeyMode())),10,2),8,"0") lp := LEFT( bitstr, 6) rp := RIGHT( bitstr,2) IF VALTYPE( mode) == "C" cm := UPPER(LEFT( mode, 1)) IF cm == "R" KeyMode(VAL(BaseToBase(lp+"00",2,10))) ELSEIF cm == "E" KeyMode(VAL(BaseToBase(lp+"01",2,10))) ELSEIF cm == "A" KeyMode(VAL(BaseToBase(lp+"10",2,10))) END END IF rp == "00" cm := "R" ELSEIF rp == "01" cm := "E" ELSEIF rp == "10" cm := "A" END RETURN cm #include "dos.h" #include "string.h" #include "extend.api" #include "exospace.api" #include "filesys.api" #include "fm.api" int ExoIsExoSpace(void); CLIPPER KeyRus() { EXOREGS inreg, outreg; if (!ExoIsExoSpace()) return; inreg.ax = 0x4100; ExoRMInterrupt (0x16, &inreg, &outreg); if ( outreg.ax == 0xAAAA) _retl( TRUE); else _retl( FALSE); } // // CLIPPER KeyScreen() { EXOREGS inreg, outreg; if (!ExoIsExoSpace() || PCOUNT > 1 || !ISLOG(1)) return; if ( _parl(1)) inreg.ax = 0x4103; else inreg.ax = 0x4104; ExoRMInterrupt (0x16, &inreg, &outreg); } // // CLIPPER KeyMode() { EXOREGS inreg, outreg; BYTE cstatus; if (!ExoIsExoSpace()) return; inreg.ax = 0x4101; // get status ExoRMInterrupt(0x16, &inreg, &outreg); cstatus = (BYTE) outreg.bx; if( PCOUNT>1 || !ISNUM(1)) // get status mode { _retni( cstatus); return; } inreg.ax = 0x4102; // get status inreg.bx = (BYTE) _parni(1); ExoRMInterrupt (0x16, &inreg, &outreg); _retni( cstatus); } Для компиляции .с файла сначала использовал BCC++ 3.1 c ключами компляции -ml -c -2 -G -K-



полная версия страницы