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

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


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 13 декабря 2008 17:40
· Личное сообщение · #1

Есть такая проблема. В некоторой прогамме есть меню, в котором один из пунктов
обозначен как "Пересчитать"(допустим, файл->пересчитать). Но это пункт, в отличие от других идет бех горячей клавиши (ну например). Что в такой ситуации лучше всего сделать для добавления клавиши?
Можно, конечно посмотреть как организован соседний пункт. Это пока что единственная идея.




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

Создано: 13 декабря 2008 17:49 · Поправил: coderess
· Личное сообщение · #2

Находишь окно с помощью, (предварительно узнав имя/класс через Spy++)
Code:
  1. ; Находим окно
  2. push szClassWindow
  3. push szWindowName
  4. call FindWindow
  5. mov hWnd,eax
  6. cmp eax,0
  7. jz error
  8. ; Получаем доступ к его меню
  9. push hWnd
  10. call GetMenu
  11. mov hMenu,eax
  12. cmp eax,0
  13. jz error
  14. ; Теперь можешь: добавлять/удалять/пересчитать пункты меню
  15. push hWnd
  16. push hMenu
  17. call SetMenu
  18. cmp eax,0
  19. jz error
  20. ; сообщение о успешном редактировании меню
  21. push 0
  22. push szText
  23. push szMsg
  24. push 0
  25. call MessageBox
  26. ; При ошибки в регистре EAX=0
  27. error: 
  28. xor eax,eax
  29. ret


О функциях для работы с меню и против ;)
http://msdn.microsoft.com/en-us/library/ms646977(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms646977(VS.85).aspx

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





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

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

2coderess
Это-то понятно. А где такой код нужно исполнить-то? Мне нужно конкретную прогу исправлять, а значит не обойдется без поиска по адресам внутри проге при ее патчинге и т.п...
Хм..скорее всего этот код(что привел ты) будет работать, но это не совсем то, что нужно.
Мне нужно к существующему пункту добавить возможность выполнения эитого пкункта по горячей клавиши.

Видимо я думаю в другом направлении. Я пока что пытаюсь выйти на обработчик сообщений WM_COMMAND. Делаю это через бряк на DispatchMessageA. А далее как-то выйти к конкретной процедуре... (Забыл я всё уже). Конкретный код привести не могу, я на него еще не вышел....
Может я вообще не так думаю и не в нужном русле?! ....



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 13 декабря 2008 18:59
· Личное сообщение · #4

а на чем написана прога? если делфи, то проще код формы поправить в ресурсах




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 13 декабря 2008 19:24
· Личное сообщение · #5

Azur1d
Была бы делфи, я бы, наверное, не спрашивал. На Microsoft Visual C++ 6.0.
Я пока никак не могу выйти на обработку пункта этого.



Ранг: 22.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 13 декабря 2008 19:47
· Личное сообщение · #6

Может стоит смотреть в сторону ресурсов -> Accelerators?




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 13 декабря 2008 20:32 · Поправил: Mavlyudov
· Личное сообщение · #7

Myk
Может и так, но что это мне даст, кроме как список используемых клавиш.
.........................
-7899: "Ctrl+V"
507: "F9"
535: "Shift+F9"
и т.п. ......
А если я туда и введу новую комбинацию и смогу как-то связавть с пунктом, то будет ли работать? я что-то сомневаюсь..

[Edited]
Я вроде разобрался. Через ресторатор получилось присвоить ссылки на идентификаторы с нужной клавишей. Хоть и не на программном уровне, но и то хорошо
[Edited again]
А вот начал я патч собирать через dup2 и после создания, патчик весит 2 МБ. Всего изменений в файле около 302 тысяч. Странно довольно. Вот я и думаю, что программно изменить может было бы рациональней.


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


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