Форум » [x]Harbour » Нужна помощь - вывести на консольиндикатор расскладки калавиатуры » Ответить

Нужна помощь - вывести на консольиндикатор расскладки калавиатуры

Просто Вася: Есть ли возможность (пример программы) вывести индикатор какая течущая расскладка клавиатуры. Роботаю в Harbour

Ответов - 44, стр: 1 2 3 All

fil: rvu и PSP к ночи из дома перешлю на работе инет подох

PSP: Ok. Пасиб.

rvu: Спасибо!


rvu: Не могу разобраться. Насколько я понял, нужно это прописать в программе: DLL32 FUNCTION GetLangState() AS _INT ; PASCAL LIB "SUPP\Langenru.DLL" Компилятор выдает "syntax error at 'FUNCTION'".

fil: rvu В любом .prg Вашего проекта вне всяких процедур. Тока SUPP\ убрать(это путь где лежит DLL)

rvu: fil пишет: В любом .prg Вашего проекта вне всяких процедур. Тока SUPP\ убрать(это путь где лежит DLL) Так и делал. Не пойму почему не работает. При компиляции пишет: Error E0030 Syntax error: "syntax error at 'FUNCTION'"

Петр: Вызов функции из dll в стиле FWH #include "hbdll.ch" делали?

rvu: Петр, спасибо! Я догадывался что чего-то не хватает, только не знал чего.

rvu: fil пишет: Getlangstate(). Если возвращает 0 - русский Возвращает и при английском и при русском 1. Может она тоже в консоли не работает?

fil: rvu Не знаю, в консоли не работал

fil: rvu Смотри регисстр HKEY_CURRENT_USER PowerCfg sLanguage RUS/ENG

Dima: Петр пишет: #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" HB_FUNC( ACTIVATEKEYBOARDLAYOUT ) { HKL kbl; kbl = ActivateKeyboardLayout( (HKL) hb_parni(1), 0 ); hb_retni(LOWORD(kbl)); } #pragma ENDDUMP Действительно что то не то ;) Можешь нормально эту функцию написать ?

Loach: Изините, а мона своих 2 копейки? У мну вот так работает: HB_FUNC( SMENKL ) { TCHAR m_PreviousLayout[KL_NAMELENGTH] ; LPSTR szMsg = ""; GetKeyboardLayoutName(m_PreviousLayout); if( PCOUNT() ) { szMsg = _parc( 1 ); if ( ( *(szMsg) == 'R' ) { LoadKeyboardLayout( "00000419", KLF_ACTIVATE ) ; } else if ( ( *(szMsg) == 'E' ) { LoadKeyboardLayout( "00000409", KLF_ACTIVATE ) ; } } _retc(m_PreviousLayout); } Правда переключаю только RUS-ENG, но мну больше и не надо...

Dima: Loach пишет: У мну вот так работает у мну это собрать не получилось.....

Loach: Dima пишет: у мну это собрать не получилось.. Ооойй... посыпаю голову пеплом... Как-то скушался кусок кода... Вот так должно собраться: #PRAGMA BEGINDUMP #include "Windows.h" #include "ClipApi.h" HB_FUNC( SMENKL ) { TCHAR m_PreviousLayout[KL_NAMELENGTH] ; LPSTR szMsg = ""; GetKeyboardLayoutName(m_PreviousLayout); if( PCOUNT() ) { szMsg = _parc( 1 ); if ( ( *(szMsg) == 'R' ) && ( *(m_PreviousLayout+7)!='1' ) ) { LoadKeyboardLayout( "00000419", KLF_ACTIVATE ) ; } else if ( ( *(szMsg) == 'E' ) && ( *(m_PreviousLayout+7)!='0' ) ) { LoadKeyboardLayout( "00000409", KLF_ACTIVATE ) ; } } _retc(m_PreviousLayout); } #PRAGMA ENDDUMP А вызываю функцию примерно так: if !(smenkl()=='00000419') smenkl("RUS") endif

Dima: Loach Собралось. Применение ей пока не вижу. У меня в фоне крутится функция , откуда я и думал вызывать SMENKL Хотелось бы находясь в любом месте задачи при смене раскладки клавы отображать ее статус (rus/eng) , с помощью SMENKL я не вижу пока способа реализации.

Loach: Знасицца так. По поводу применения, так я применяю ету штуку несколько для другого: У меня бровзится база, в которой например 2 поля, если конкретно, то код болезни (латиница) и наименование заболевания (рус). Я пользую эту функцию, чтобы при смене сортировки для пользователя сразу менялась раскладка клавиатуры (для последующего seekа). Все для народа... По поводу Вашей задачи, то вызывая Smenkl() без параметров, обратно получаете текущую раскладку: если '00000419', то русская, если '00000409', - более английская. Ну и соответственно, вызываете из фоновой функции периодически Smenkl и отображаете полученное.... Или я чего-то не понял в постановке задачи...

Dima: Loach пишет: По поводу Вашей задачи, то вызывая Smenkl() без параметров Так и сделал , все время кажет 00000409

Pasha: Dima пишет: Хотелось бы находясь в любом месте задачи при смене раскладки клавы отображать ее статус (rus/eng) , Дима, а зачем дублировать функции windows ? Пусть она сама и показывает раскладку. А программу запускать не в полноэкранном, а в оконном режиме, чтобы была видна нижняя строка taskbar

Dima: Pasha Дело в том что программа консольная и запускается на мини ноуте , экран там очень маленький (ноты фирмы ASUS) Если еще и в окне сделать то будет мелковато ;) Да и не каждому объяснишь как настроить окно как надо. Впрочем подумаю , спасибо !!!



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