![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переключение раскладки клавиатуры в консоли [WinXP]
ganj © (2008-08-19 18:44:00)Как переключить раскладку в консоли? И узнать текущую?
Следующий код не работает (на С++):
LoadKeyboardLayout( StrCopy(Layout,"00000419"),KLF_ACTIVATE);
и
int i= (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
white_hat (2009-07-27 11:24:00) [1]Удалено модератором
Leonid Troyanovsky (2008-08-22 13:37:00) [2]
> ganj (22.08.08 10:45) [12]
> Я же написал на примере код, он не работает.
А ты не объяснил, где работает оный код.
Я ж привел рабочий код для собс-ного консольного приложения.
Если ты хочешь следить за чужими консолями, то и про это
был разговор - ставь хук WH_SHELL.
> к узнать текущую раскладку в окне консоли?
WH_SHELL, он, кстати, следит и за активацией окон.
Если же ты хочешь поменять активной консоли раскладку,
то шли ей SendInput той комбинации, что переключает оную.
--
Regards, LVT.
ganj (2008-08-22 10:45:00) [3]
> > ganj (20.08.08 16:45) [7]
>
> > Можете написать, как это должно быть?
>
> Чего тебе надобно, старче?
Я же написал на примере код, он не работает.
> Окно консоли создается другим процессом, AFAIK, csrss.
>
Я смотрел. csrss-10 потоков, открываю несколько консолей - 11 потоков. И непонятно что делать дальше. Так вопрос не решил пока. Как узнать текущую раскладку в окне консоли?
Leonid Troyanovsky (2008-08-20 17:59:00) [4]
> ganj (20.08.08 16:45) [7]
> Можете написать, как это должно быть?
Чего тебе надобно, старче?
--
Regards, LVT.
Leonid Troyanovsky (2008-08-20 17:57:00) [5]
> clickmaker © (20.08.08 16:56) [9]
> AlienThreadId := GetWindowThreadProcessId(GetForegroundWindow(),
> NULL);
Окно консоли создается другим процессом, AFAIK, csrss.
--
Regards, LVT.
clickmaker (2008-08-20 16:56:00) [6]а так?
MyThreadId := GetWindowThreadProcessId(this->Handle,NULL);
AlienThreadId := GetWindowThreadProcessId(GetForegroundWindow(),NULL);
AttachThreadInput(MyThreadId, AlienThreadId, true);
kl := GetKeyboardLayout(AlienThreadId);
AttachThreadInput(MyThreadId, AlienThreadId, false);
ganj (2008-08-20 16:45:00) [7]
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто.
AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
ganj (2008-08-20 16:45:00) [8]
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто.
AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
ganj (2008-08-20 16:44:00) [9]
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто.
AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
ganj (2008-08-20 16:44:00) [10]
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто.
AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
Leonid Troyanovsky (2008-08-20 16:42:00) [11]
> ganj (20.08.08 16:09) [2]
> > hkl := GetKeyboardLayout(0);
> Это не для активного окна. А как для активного окна.
Это, понятно, для текущего потока.
А чего, тебя интересуют чужие консоли?
Ставь системный WH_SHELL, там есть и про раскладку.
--
Regards, LVT.
clickmaker (2008-08-20 16:24:00) [12]AttachThreadInput
GetKeyboardLayout?
ganj (2008-08-20 16:09:00) [13]
> Узнать это:
> hkl := GetKeyboardLayout(0);
>
Это не для активного окна. А как для активного окна.
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));не помогает
Leonid Troyanovsky (2008-08-20 14:05:00) [14]
> ganj (19.08.08 18:44)
> Как переключить раскладку в консоли? И узнать текущую?
Узнать это:
hkl := GetKeyboardLayout(0);
А установить (если окно консоли активно):
ActivateKeyboardLayout(hkl, 0);
PostMessage(GetForegroundWindow, WM_INPUTLANGCHANGEREQUEST, 1, hkl);
--
Regards, LVT.