-
Как переключить раскладку в консоли? И узнать текущую? Следующий код не работает (на С++): LoadKeyboardLayout( StrCopy(Layout,"00000419"),KLF_ACTIVATE); и int i= (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
-
> ganj (19.08.08 18:44)
> Как переключить раскладку в консоли? И узнать текущую?
Узнать это: hkl := GetKeyboardLayout(0);
А установить (если окно консоли активно): ActivateKeyboardLayout(hkl, 0); PostMessage(GetForegroundWindow, WM_INPUTLANGCHANGEREQUEST, 1, hkl);
-- Regards, LVT.
-
> Узнать это: > hkl := GetKeyboardLayout(0); >
Это не для активного окна. А как для активного окна. GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL)); не помогает
-
AttachThreadInput GetKeyboardLayout?
-
> ganj (20.08.08 16:09) [2]
> > hkl := GetKeyboardLayout(0);
> Это не для активного окна. А как для активного окна.
Это, понятно, для текущего потока.
А чего, тебя интересуют чужие консоли? Ставь системный WH_SHELL, там есть и про раскладку.
-- Regards, LVT.
-
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто. AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
-
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто. AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
-
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто. AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
-
> AttachThreadInput
Можете написать, как это должно быть? Не понимаю просто. AttachThreadInput(
GetWindowThreadProcessId(GetForegroundWindow(),NULL),
GetWindowThreadProcessId(this->Handle,NULL),
true
);
GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(),NULL));
Так не получается
-
а так? MyThreadId := GetWindowThreadProcessId(this->Handle,NULL); AlienThreadId := GetWindowThreadProcessId(GetForegroundWindow(),NULL); AttachThreadInput(MyThreadId, AlienThreadId, true); kl := GetKeyboardLayout(AlienThreadId); AttachThreadInput(MyThreadId, AlienThreadId, false);
-
> clickmaker © (20.08.08 16:56) [9] > AlienThreadId := GetWindowThreadProcessId(GetForegroundWindow(), > NULL);
Окно консоли создается другим процессом, AFAIK, csrss.
-- Regards, LVT.
-
> ganj (20.08.08 16:45) [7]
> Можете написать, как это должно быть?
Чего тебе надобно, старче?
-- Regards, LVT.
-
> > ganj (20.08.08 16:45) [7] > > > Можете написать, как это должно быть? > > Чего тебе надобно, старче?
Я же написал на примере код, он не работает.
> Окно консоли создается другим процессом, AFAIK, csrss. >
Я смотрел. csrss-10 потоков, открываю несколько консолей - 11 потоков. И непонятно что делать дальше. Так вопрос не решил пока. Как узнать текущую раскладку в окне консоли?
-
> ganj (22.08.08 10:45) [12]
> Я же написал на примере код, он не работает.
А ты не объяснил, где работает оный код. Я ж привел рабочий код для собс-ного консольного приложения.
Если ты хочешь следить за чужими консолями, то и про это был разговор - ставь хук WH_SHELL.
> к узнать текущую раскладку в окне консоли?
WH_SHELL, он, кстати, следит и за активацией окон.
Если же ты хочешь поменять активной консоли раскладку, то шли ей SendInput той комбинации, что переключает оную.
-- Regards, LVT.
-
Удалено модератором
|