![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Консольное приложение [D6, Win95/98, Win2k, WinXP]
s999 © (2005-07-14 20:42:00)Может быть кто-нибудь с этим сталкивался. Собственно, проблемы:
Как в консольном приложении узнать текущий Layout(ENG/RUS)?
Можно ли поставить Ноок в консольном приложении? (SetWindowsHookEx ставится, но не работает "нормально" )
И попутно, можно ли "перебрать" (Enum) потоки текущего процесса (приложение консольное, окон нет)?.
Leonid Troyanovsky (2005-08-16 21:15:00) [1]
> s999 (16.08.05 17:18) [7]
>
> > Очень даже попадает. Именно WH_SHELL.
Действительно, я погнал.
Sorry.
--
Regards, LVT.
s999 (2005-08-16 17:18:00) [2]
> Очень даже попадает. Именно WH_SHELL.
> На ем же работает индикатор клавиатуры.
Дело в том, что в 95/98/me переключение языков в консоли производится Ctrl+Shift-левый/Ctrl+Shift-правый и никак не завязано на индикатор около часиков. Более того, для выполнения консольных приложений существует программа conagent.exe, которая инициализирует некий KEYBOARD.DRV (по-моему 16-ти разрядный), который, насколько я понял, ничего в системную очередь сообщений не кладет. Поэтому хуки и не работают.
Leonid Troyanovsky (2005-08-16 16:59:00) [3]
> Пробовал. Все, что касается консольного окна, ни в какие
> хуки не попадает (в 95/98/me).
Очень даже попадает. Именно WH_SHELL.
На ем же работает индикатор клавиатуры.
Или ты про полноэкранные?
Ну, эдесь, врать не буду, не пробывал.
--
Regards, LVT.
s999 (2005-08-16 16:54:00) [4]
> Можно и менее кардинально.
> Т.е., сделать отдельное оконное (скрытое), приложение
> которое установит WH_SHELL хук,
Пробовал. Все, что касается консольного окна, ни в какие хуки не попадает (в 95/98/me). В nt/2000/xp, конечно, будет работать. Но там просто GetKeyState и GetKeyboardLayout работают нормально.
Leonid Troyanovsky (2005-08-16 16:33:00) [5]
> s999 (16.08.05 16:19) [3]
> Решение нашлось только абсолютно кардинальное. "Обволакивание"
> консольного окна своими новыми окнами, и перенаправление
> их ввода в WriteConsoleInput.
Можно и менее кардинально.
Т.е., сделать отдельное оконное (скрытое), приложение
которое установит WH_SHELL хук, и будет отвечать на запросы
(SendMessage) хендла активного окна, текущей раскладки и т.д.
И необязательно exe, можно dll & rundll.
--
Regards, LVT.
s999 (2005-08-16 16:19:00) [6]>SetWindowsHookEx - должен быть во внешней библиотеке.
Вот только под Win95/98/ME ловиться в этот Hook будет все что угодно, но только не относящееся к самой консоли. Все "клавиатурные" функции, типа GetKeyState и т.д., будут откровенно врать. Да, практически, весь API, касающийся ввода-вывода, здесь абсолютно бесполезен.
Решение нашлось только абсолютно кардинальное. "Обволакивание" консольного окна своими новыми окнами, и перенаправление их ввода в WriteConsoleInput.
tesseract (2005-07-19 10:27:00) [7]Мдя - консольное приложение отличается только осутствием графичечкого окна.
SetWindowsHookEx - должен быть во внешней библиотеке.
(2005-07-14 22:18:00) [8]Удалено модератором