Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.26;
Скачать: CL | DM;

Вниз

Переключение раскладки клавиатуры в консоли   Найти похожие ветки 

 
ganj   (2008-08-19 18:44) [0]

Как переключить раскладку в консоли? И узнать текущую?
Следующий код не работает (на С++):
LoadKeyboardLayout( StrCopy(Layout,"00000419"),KLF_ACTIVATE);
и
int i= (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));


 
Leonid Troyanovsky ©   (2008-08-20 14:05) [1]


> ganj   (19.08.08 18:44)  

> Как переключить раскладку в консоли? И узнать текущую?

Узнать это:
hkl := GetKeyboardLayout(0);

А установить (если окно консоли активно):
ActivateKeyboardLayout(hkl, 0);
PostMessage(GetForegroundWindow, WM_INPUTLANGCHANGEREQUEST, 1, hkl);

--
Regards, LVT.


 
ganj   (2008-08-20 16:09) [2]


> Узнать это:
> hkl := GetKeyboardLayout(0);
>

Это не для активного окна. А как для активного окна.
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL)); не помогает


 
clickmaker ©   (2008-08-20 16:24) [3]

AttachThreadInput
GetKeyboardLayout?


 
Leonid Troyanovsky ©   (2008-08-20 16:42) [4]


> ganj   (20.08.08 16:09) [2]

> > hkl := GetKeyboardLayout(0);

> Это не для активного окна. А как для активного окна.

Это, понятно, для текущего потока.

А чего, тебя интересуют чужие консоли?
Ставь системный WH_SHELL, там есть и про раскладку.

--
Regards, LVT.


 
ganj   (2008-08-20 16:44) [5]


> AttachThreadInput


Можете написать, как это должно быть? Не понимаю просто.

AttachThreadInput(
                 GetWindowThreadProcessId(GetForegroundWindow(),NULL),
                 GetWindowThreadProcessId(this->Handle,NULL),
                 true
                 );
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));

Так не получается


 
ganj   (2008-08-20 16:44) [6]


> AttachThreadInput


Можете написать, как это должно быть? Не понимаю просто.

AttachThreadInput(
                 GetWindowThreadProcessId(GetForegroundWindow(),NULL),
                 GetWindowThreadProcessId(this->Handle,NULL),
                 true
                 );
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));

Так не получается


 
ganj   (2008-08-20 16:45) [7]


> AttachThreadInput


Можете написать, как это должно быть? Не понимаю просто.

AttachThreadInput(
                 GetWindowThreadProcessId(GetForegroundWindow(),NULL),
                 GetWindowThreadProcessId(this->Handle,NULL),
                 true
                 );
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));

Так не получается


 
ganj   (2008-08-20 16:45) [8]


> AttachThreadInput


Можете написать, как это должно быть? Не понимаю просто.

AttachThreadInput(
                 GetWindowThreadProcessId(GetForegroundWindow(),NULL),
                 GetWindowThreadProcessId(this->Handle,NULL),
                 true
                 );
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));

Так не получается


 
clickmaker ©   (2008-08-20 16:56) [9]

а так?
MyThreadId := GetWindowThreadProcessId(this->Handle,NULL);
AlienThreadId := GetWindowThreadProcessId(GetForegroundWindow(),NULL);
AttachThreadInput(MyThreadId, AlienThreadId, true);
kl := GetKeyboardLayout(AlienThreadId);
AttachThreadInput(MyThreadId, AlienThreadId, false);


 
Leonid Troyanovsky ©   (2008-08-20 17:57) [10]


> clickmaker ©   (20.08.08 16:56) [9]

> AlienThreadId := GetWindowThreadProcessId(GetForegroundWindow(),
> NULL);

Окно консоли создается другим процессом, AFAIK, csrss.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-08-20 17:59) [11]


> ganj   (20.08.08 16:45) [7]

> Можете написать, как это должно быть?

Чего тебе надобно, старче?

--
Regards, LVT.


 
ganj   (2008-08-22 10:45) [12]


> > ganj   (20.08.08 16:45) [7]
>
> > Можете написать, как это должно быть?
>
> Чего тебе надобно, старче?


Я же написал на примере код, он не работает.


> Окно консоли создается другим процессом, AFAIK, csrss.
>


Я смотрел. csrss-10 потоков, открываю несколько консолей - 11 потоков. И непонятно что делать дальше. Так вопрос не решил пока. Как узнать текущую раскладку в окне консоли?


 
Leonid Troyanovsky ©   (2008-08-22 13:37) [13]


> ganj   (22.08.08 10:45) [12]

> Я же написал на примере код, он не работает.

А ты не объяснил, где работает оный код.
Я ж привел рабочий код для собс-ного консольного приложения.

Если ты хочешь следить за чужими консолями, то и про это
был разговор - ставь хук WH_SHELL.

> к узнать текущую раскладку в окне консоли?

WH_SHELL, он, кстати, следит и за активацией окон.

Если же ты хочешь поменять активной консоли раскладку,
то шли ей SendInput той комбинации, что переключает оную.

--
Regards, LVT.


 
white_hat   (2009-07-27 11:24) [14]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2011.06.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
2-1300355834
nameziz
2011-03-17 12:57
2011.06.26
скачивание файлов http


2-1300644733
inslave
2011-03-20 21:12
2011.06.26
многопоточность


15-1299187799
Юрий
2011-03-04 00:29
2011.06.26
С днем рождения ! 4 марта 2011 пятница


2-1300995313
grigor
2011-03-24 22:35
2011.06.26
Не работает двойная буфернизация ((


2-1300534060
Labor
2011-03-19 14:27
2011.06.26
Tsplitter и Timage