Сейчас на форуме: Rio, CDK123, zds, tyns777, tihiy_grom, morgot, rmn (+5 невидимых)

 eXeL@B —› Программирование —› Борьба с консолью
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2008 16:23
· Личное сообщение · #1

Помогите пожалуйста решить один маленький вопросик.
Не получается получить раскладку клавиатуры и её же смену из консольных окон, аля ConsoleWindowClass.
Инструмент SPY++ с ними официально тоже работать отказывается.
С остальными окнами проблем не возникает, в ДЛЛ ставлю ловушки на WM_SETFOCUS+GetKeyboardLayout и на WM_INPUTLANGCHANGEREQUEST|WM_INPUTLANGCHANGE.
Проблемы получается 2.
1. GetKeyboardLayout с консольным окном возвращает постоянно раскладку поумолчанию.
2. события по смене языка оттуда не приходят.



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2008 18:39
· Личное сообщение · #2

Скажем так - лезть во внутренности программы PUNTO SWITCHER, которая нормально всё "хавает" не охота.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 ноября 2008 18:49
· Личное сообщение · #3

Code:
  1. get_keybord_layout:
  2. ;Узнаем текущую раскладку
  3. push 0
  4. call GetKeyboardLayout
  5. mov hKl,eax
  6. ;При активном окне консоли
  7. push 0
  8. push hKl
  9. call ActivateKeyboardLayout
  10. call GetForegroundWindow
  11. push hKl
  12. push 1
  13. push WM_INPUTLANGCHANGEREQUEST
  14. push eax
  15. call PostMessage


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2008 19:08
· Личное сообщение · #4

ну да - я меня окно консоли активно
допустим код
---
CurApp:=GetForegroundWindow();
idthd:=GetWindowThreadProcessId(CurApp,NIL);
kbl:=GetKeyboardLayout(idthd);
----
и с консольным окном не работает




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 ноября 2008 20:56
· Личное сообщение · #5

Code:
  1. call GetCurrentThread
  2. push eax
  3. call GetKeyboardLayout


попробуй получать идентификатор потока через GetCurrentThread/GetCurrentThreadId

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2008 21:00
· Личное сообщение · #6

пробовал через SPY++ смотреть ID и потока и процесса
подставлял ручками в вызов GetKeyboardLayout
отрабатывает но возвращает неверное значение.
Больше вопрос интересует почему же одни сообщения ловятся ловушками от консольных окошек, а другие нет. ведь по сути WM_CHAR и WM_INPUTLANGCHANGEREQUEST это 2 числа и разницы быть не должно



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2008 21:00
· Личное сообщение · #7

в этой ветке если что просить или в другой, чтоб помогли глянуть какую ловушку ставит PUNTO ?



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 ноября 2008 21:21
· Личное сообщение · #8

Вот 2 проекта - программа и библиотека.
Не судите строго

47aa_04.11.2008_CRACKLAB.rU.tgz - work.rar


 eXeL@B —› Программирование —› Борьба с консолью
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати