![]() |
eXeL@B —› Вопросы новичков —› как попасть на обработчик WM_CHAR |
Посл.ответ | Сообщение |
|
Создано: 26 мая 2007 21:49 · Личное сообщение · #1 как то я на WASMе наткнулся на Уроки Iczelion'а Win32 API. Урок 6. Клавиатура Ну так вот я решил в олли поисследовать эту прогу. Там программа реагирует на нажатие клавиш через ф-цию WM_CHAR соответственно вместо того чтобы проге перейти на обработчик WM_CHAR в коде программы она крутится здесь: 004010E2 |> 6A 00 /PUSH 0 ; /MsgFilterMax = 0 004010E4 |. 6A 00 |PUSH 0 ; |MsgFilterMin = 0 004010E6 |. 6A 00 |PUSH 0 ; |hWnd = NULL 004010E8 |. 8D45 B4 |LEA EAX,DWORD PTR SS:[EBP-4C] ; | 004010EB |. 50 |PUSH EAX ; |pMsg 004010EC |. E8 C3000000 |CALL <JMP.&user32.GetMessageA> ; \GetMessageA 004010F1 |. 0BC0 |OR EAX,EAX 004010F3 |. 74 14 |JE SHORT key.00401109 004010F5 |. 8D45 B4 |LEA EAX,DWORD PTR SS:[EBP-4C] 004010F8 |. 50 |PUSH EAX ; /pMsg 004010F9 |. E8 E0000000 |CALL <JMP.&user32.TranslateMessage> ; \TranslateMessage 004010FE |. 8D45 B4 |LEA EAX,DWORD PTR SS:[EBP-4C] 00401101 |. 50 |PUSH EAX ; /pMsg 00401102 |. E8 A1000000 |CALL <JMP.&user32.DispatchMessageA> ; \DispatchMessageA 00401107 |.^EB D9 \JMP SHORT key.004010E2 Я не понял это что баг олли ,что когда захожу по F7 внутрь юзера32 затем рет в код программы отладчик как будто не видит обработчика и крутится в этом цикле, а обработчик WM_CHAR стоит ниже в коде программы Как в общем случае попасть на обработчик WM_CHAR внутри программы не отлаживая user32.dll? И ещё как не нажимая кнопки на клавиатуре сделать так, чтобы программа думала, что я этут кнопку нажал? (в какой регистр проца и когда какое значение заносить?) Вот программа ![]() ![]() |
|
Создано: 26 мая 2007 22:57 · Поправил: _taha_ · Личное сообщение · #2 |
|
Создано: 29 мая 2007 21:39 · Личное сообщение · #3 |
|
Создано: 29 мая 2007 22:13 · Поправил: Sturgeon · Личное сообщение · #4 GodFather пишет: в каком регистре (или он в стеке?) можно посмотреть код нажатой клавиши Судя по исходнику (и MSDN) код нажатой клавиши возвращается в wParam. Как только брякнешься смотри в окно стека. GodFather пишет: сделать так чтобы прога думала что я её нажал а вот это уже сложно. Скорее всего надо эмулировать нажатие клавиши. Как сделать хз. Хотя в данном случае все очевидно Вместо PUSH [ARG.3] вставляешь PUSH то_что_тебе_надо 0040112E |. FF75 10 PUSH [ARG.3]
![]() |
|
Создано: 30 мая 2007 11:03 · Личное сообщение · #5 GodFather пишет: И ещё как не нажимая кнопки на клавиатуре сделать так, чтобы программа думала, что я этут кнопку нажал? Если из другой программы, то что тебе мешает послать тоже сообщение WM_CHAR?GodFather пишет: Как в общем случае попасть на обработчик WM_CHAR внутри программы не отлаживая user32.dll? Теоретически можно. Ставишь бряк на месте, где номер сообщения сравнивается с нужным (WM_CHAR). Но на деле в Ольке я думаю ты туда не попадешь, когда тебе надо. Если хочешь посмотреть коды клавиш - печатай на форме сам числовой код клавиши и узнаешь таким образом любой код. ----- radio uno in ibisa ... ![]() |
![]() |
eXeL@B —› Вопросы новичков —› как попасть на обработчик WM_CHAR |