Рекурсивный просмотр меню. Получение строк и id.

Тема в разделе "WASM.WIN32", создана пользователем DarkWanderer, 12 июн 2007.

  1. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Пытаюсь просмотреть пункты меню и подпункты с целью получения string и id.
    В тестовой программке работает как задумано. Меню там создается из ресурсов.
    Нужно использовать что-либо подобное для создания AddIn'а к WinAsm, там меню создается динамически, OWERDRAW.
    Удается получить лишь основные пункты, т.е. file, edit и т.п.
    Приattachен код полностью, функцию отдельно не приведу, она здесь неудобно смотрится.
     
  2. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Попробуй перебрать все подменю.
    Код (Text):
    1.         invoke  GetMenu,[hWnd]
    2.         mov     [hMenu],    eax
    3.         invoke  GetMenuItemCount,[hMenu]
    4.         mov [MenuCNT],  eax     ;Кол-во пунктов меню
    5.         invoke  GetMenuItemID,[hMenu],0 ;Получим первую (0) и т.д.
    6.         mov     [MenuID],   eax
    7.         invoke  GetMenuString,[hMenu],0,ADDR    Buf260,MAX_PATH,MF_BYPOSITION
    Это берет только первый элемент меню
     
  3. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    S_Alex
    Примерно так я и сделал, а не работает.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    GetMenuItemCount, GetMenuItemInfo, GetSubMenu (или MENUITEMINFO.hSubMenu) и т.д.
    Просто ты получаешь основные элементы главного меню, а далее нужно получать элементы подменю каждого из них.
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Ну лабно. Достали. Вот вам
    Код (Text):
    1. EnumMenu    proc    hMenu:DWORD
    2. LOCAL   MenuCNT :DWORD
    3. LOCAL   MenuID  :DWORD
    4. LOCAL   CNT     :DWORD
    5. LOCAL   Buf[32]:BYTE  ;макс. длина меню ну чем меньше - тем больше меню можно обработать.
    6.         invoke  GetMenuItemCount,[hMenu]
    7.         .if eax==-1
    8.             xor eax,    eax
    9.             ret
    10.         .endif
    11.         mov     [MenuCNT],  eax
    12.         xor     eax,    eax
    13.         mov     [CNT],  eax
    14.        
    15.         .while  eax<[MenuCNT]
    16.             invoke  GetMenuItemID,[hMenu],[CNT]
    17.             mov     [MenuID],   eax
    18.             invoke  GetMenuString,[hMenu],[CNT],ADDR Buf,sizeof Buf,MF_BYPOSITION
    19.            
    20.             lea eax,    [Buf]
    21.             PrintStringByAddr   eax
    22.             PrintDec    MenuID
    23.        
    24.             invoke  GetSubMenu,[hMenu],[CNT]
    25.             .if eax
    26.                 ;PrintLine
    27.                 invoke  EnumMenu,eax
    28.                 PrintLine
    29.  
    30.             .endif
    31.             inc     [CNT]
    32.             mov     eax,    [CNT]  
    33.         .endw
    34.     ret
    35. EnumMenu endp
    Есть одно но.
    Рекурсия нужно стека и по-больше или меню по-меньше.

    А вот вам меню RadAsma
    Код (Text):
    1. eax =
    2. MenuID = -1 (Menu.asm, 105)
    3. eax = &Восстановить
    4. MenuID = 61728 (Menu.asm, 105)
    5. eax = &Переместить
    6. MenuID = 61456 (Menu.asm, 105)
    7. eax = Раз&мер
    8. MenuID = 61440 (Menu.asm, 105)
    9. eax = &Свернуть
    10. MenuID = 61472 (Menu.asm, 105)
    11. eax = &Развернуть
    12. MenuID = 61488 (Menu.asm, 105)
    13. eax =
    14. MenuID = 0 (Menu.asm, 105)
    15. eax = &Закрыть   Ctrl+F4
    16. MenuID = 61536 (Menu.asm, 105)
    17. eax =
    18. MenuID = 0 (Menu.asm, 105)
    19. eax = С&ледующее окно  Ctrl+F6
    20. MenuID = 61504 (Menu.asm, 105)
    21. ----------------------------------------
    22. eax = &Файл
    23. MenuID = -1 (Menu.asm, 105)
    24. eax = &Новый проект  Ctrl+Shift+N
    25. MenuID = 40001 (Menu.asm, 105)
    26. eax = &Открыть проект  Ctrl+Shift+O
    27. MenuID = 40002 (Menu.asm, 105)
    28. eax = &Закрыть проект  Ctrl+Shift+C
    29. MenuID = 40003 (Menu.asm, 105)
    30. eax = &Удалить проект  Ctrl+Shift+D
    31. MenuID = 40013 (Menu.asm, 105)
    32. eax =
    33. MenuID = 0 (Menu.asm, 105)
    34. eax = Но&вый файл  Ctrl+N
    35. MenuID = 40004 (Menu.asm, 105)
    36. eax = О&ткрыть файл  Ctrl+O
    37. MenuID = 40005 (Menu.asm, 105)
    38. eax = Открыть как &Hex    Ctrl+H
    39. MenuID = 40014 (Menu.asm, 105)
    40. eax = &Открыть файл заново Ctrl+Shift
    41. MenuID = 41021 (Menu.asm, 105)
    42. eax = Закрыть файл   Ctrl+F4
    43. MenuID = 40006 (Menu.asm, 105)
    44. eax = &Сохранить файл  Ctrl+S
    45. MenuID = 40007 (Menu.asm, 105)
    46. eax = Сохранить как Ctrl+Shift+A
    47. MenuID = 40008 (Menu.asm, 105)
    48. eax = Сохранить все файлы  Ctrl+Shift+
    49. MenuID = 40009 (Menu.asm, 105)
    50. eax = &Последние файлы
    51. MenuID = -1 (Menu.asm, 105)
    52. eax = (Empty)
    53. MenuID = 21000 (Menu.asm, 105)
    54. ----------------------------------------
    55. eax =
    56. MenuID = 0 (Menu.asm, 105)
    57. eax = Настройки страницы
    58. MenuID = 40010 (Menu.asm, 105)
    59. eax = Печать                Ctrl+P
    60. MenuID = 40011 (Menu.asm, 105)
    61. eax =
    62. MenuID = 0 (Menu.asm, 105)
    63. eax = В&ыход                 Alt+F4
    64. MenuID = 40012 (Menu.asm, 105)
    65. eax =
    66. MenuID = 0 (Menu.asm, 105)
    67. eax = &1 menu
    68. MenuID = 20010 (Menu.asm, 105)
    69. eax = &2 Pdf2Bmp
    70. MenuID = 20011 (Menu.asm, 105)
    71. eax = &3 MapXep
    72. MenuID = 20012 (Menu.asm, 105)
    73. eax = &4 Функция для MathCad
    74. MenuID = 20013 (Menu.asm, 105)
    75. ----------------------------------------
    76. eax = &Правка
    77. MenuID = -1 (Menu.asm, 105)
    78. eax = &Отменить Ctrl+Z
    79. MenuID = 41001 (Menu.asm, 105)
    80. eax = &Повторить   Ctrl+Y
    81. MenuID = 41002 (Menu.asm, 105)
    82. eax = Очистить буфер отмены  Ctrl+Shif
    83. MenuID = 41022 (Menu.asm, 105)
    84. eax =
    85. MenuID = 0 (Menu.asm, 105)
    86. eax = В&ырезать Ctrl+X
    87. MenuID = 41003 (Menu.asm, 105)
    88. eax = &Копировать Ctrl+C
    89. MenuID = 41004 (Menu.asm, 105)
    90. eax = &Вставить Ctrl+V
    91. MenuID = 41005 (Menu.asm, 105)
    92. eax = &Удалить   Del
    93. MenuID = 41006 (Menu.asm, 105)
    94. eax =
    95. MenuID = 0 (Menu.asm, 105)
    96. eax = &Выделить все  Ctrl+A
    97. MenuID = 41007 (Menu.asm, 105)
    98. eax =
    99. MenuID = 0 (Menu.asm, 105)
    100. eax = &Найти   Ctrl+F
    101. MenuID = 41008 (Menu.asm, 105)
    102. eax = Найти далее F3
    103. MenuID = 41009 (Menu.asm, 105)
    104. eax = Найти &ранее    Ctrl+F3
    105. MenuID = 41010 (Menu.asm, 105)
    106. eax = &Заменить     Ctrl+R
    107. MenuID = 41011 (Menu.asm, 105)
    108. eax =
    109. MenuID = 0 (Menu.asm, 105)
    110. eax = &Перейти на строку Ctrl+G
    111. MenuID = 41012 (Menu.asm, 105)
    112. eax = Найти &слово под кареткой    Shift
    113. MenuID = 41101 (Menu.asm, 105)
    114. eax = Найти следующее слово  Ctrl+Shif
    115. MenuID = 41020 (Menu.asm, 105)
    116. eax = Find Previous Word    Alt+F2
    117. MenuID = 44023 (Menu.asm, 105)
    118. eax =
    119. MenuID = 0 (Menu.asm, 105)
    120. eax = Перейти к обьявлению F2
    121. MenuID = 41102 (Menu.asm, 105)
    122. eax = В&ернуться   Ctrl+F2
    123. MenuID = 41103 (Menu.asm, 105)
    124. eax =
    125. MenuID = 0 (Menu.asm, 105)
    126. eax = Разделитель страницы
    127. MenuID = 30002 (Menu.asm, 105)
    128. eax = Блок
    129. MenuID = -1 (Menu.asm, 105)
    130. eax = &Отступ F9
    131. MenuID = 43001 (Menu.asm, 105)
    132. eax = &Убрать отступ    Ctrl+F9
    133. MenuID = 43002 (Menu.asm, 105)
    134. eax = &Комментировать Alt+F9
    135. MenuID = 43003 (Menu.asm, 105)
    136. eax = &Убрать комментарии  Alt+Ctrl+F9
    137. MenuID = 43004 (Menu.asm, 105)
    138. eax = Конвертировать
    139. MenuID = -1 (Menu.asm, 105)
    140. eax = Пробелы в &cимволы табуляции
    141. MenuID = 43501 (Menu.asm, 105)
    142. eax = Символы табуляции в &пробелы
    143. MenuID = 43502 (Menu.asm, 105)
    144. eax = &Верхний регистр
    145. MenuID = 43503 (Menu.asm, 105)
    146. eax = &Нижний регистр
    147. MenuID = 43504 (Menu.asm, 105)
    148. eax = Инвертировать регистр символов
    149. MenuID = 30001 (Menu.asm, 105)
    150. eax = П&ривести в порядок замыкающие
    151. MenuID = 43505 (Menu.asm, 105)
    152. ----------------------------------------
    153. eax = &Обычные/прямоугольные блоки Ct
    154. MenuID = 44015 (Menu.asm, 105)
    155. eax = Блок вставить/&заменить
    156. MenuID = 44020 (Menu.asm, 105)
    157. eax = &Развернуть блок    Ctrl+E
    158. MenuID = 41018 (Menu.asm, 105)
    159. eax = &Скрыть блок
    160. MenuID = 43009 (Menu.asm, 105)
    161. ----------------------------------------
    162. eax = Закладка
    163. MenuID = -1 (Menu.asm, 105)
    164. eax = &Поставить/убрать закладку Shif
    165. MenuID = 41104 (Menu.asm, 105)
    166. eax = &Следующая закладка  F8
    167. MenuID = 41105 (Menu.asm, 105)
    168. eax = &Предыдущая закладка    Ctrl+F8
    169. MenuID = 41106 (Menu.asm, 105)
    170. eax = &Убрать все закладки Ctrl+Shift
    171. MenuID = 41107 (Menu.asm, 105)
    172. eax = Названия закладок Ctrl+0..9
    173. MenuID = -1 (Menu.asm, 105)
    174. eax = Закладка &0   Ctrl+0
    175. MenuID = 41300 (Menu.asm, 105)
    176. eax = Закладка &1   Ctrl+1
    177. MenuID = 41301 (Menu.asm, 105)
    178. eax = Закладка &2   Ctrl+2
    179. MenuID = 41302 (Menu.asm, 105)
    180. eax = Закладка &3   Ctrl+3
    181. MenuID = 41303 (Menu.asm, 105)
    182. eax = Закладка &4   Ctrl+4
    183. MenuID = 41304 (Menu.asm, 105)
    184. eax = Закладка &5   Ctrl+5
    185. MenuID = 41305 (Menu.asm, 105)
    186. eax = Закладка &6   Ctrl+6
    187. MenuID = 41306 (Menu.asm, 105)
    188. eax = Закладка &7   Ctrl+7
    189. MenuID = 41307 (Menu.asm, 105)
    190. eax = Закладка &8   Ctrl+8
    191. MenuID = 41308 (Menu.asm, 105)
    192. eax = Закладка &9   Ctrl+9
    193. MenuID = 41309 (Menu.asm, 105)
    194. ----------------------------------------
    195. ----------------------------------------
    196. eax = Контрольные точки
    197. MenuID = -1 (Menu.asm, 105)
    198. eax = &Поставить/убрать брэкпоинт   Alt
    199. MenuID = 41013 (Menu.asm, 105)
    200. eax = &Убрать брэкпоинты    Alt+Ctrl+F8
    201. MenuID = 41014 (Menu.asm, 105)
    202. eax = Добавить &переменную    Alt+Shift+
    203. MenuID = 41015 (Menu.asm, 105)
    204. ----------------------------------------
    205. eax = Ошибка
    206. MenuID = -1 (Menu.asm, 105)
    207. eax = &Следующая ошибка  Shift+F3
    208. MenuID = 41016 (Menu.asm, 105)
    209. eax = &Очистить ошибки    Ctrl+Shift+F3
    210. MenuID = 41017 (Menu.asm, 105)
    211. ----------------------------------------
    212. eax =
    213. MenuID = 0 (Menu.asm, 105)
    214. eax = &Открыть   Alt+Ctrl+O
    215. MenuID = 41019 (Menu.asm, 105)
    216. eax = &Advanced
    217. MenuID = -1 (Menu.asm, 105)
    218. eax = Get current &Path
    219. MenuID = 31059 (Menu.asm, 105)
    220. eax = Copy &All
    221. MenuID = 31060 (Menu.asm, 105)
    222. eax = &Copy current line
    223. MenuID = 31061 (Menu.asm, 105)
    224. eax = &Delete current line
    225. MenuID = 31062 (Menu.asm, 105)
    226. eax = &Select current line
    227. MenuID = 31063 (Menu.asm, 105)
    228. eax = Delete to start of line   Ctrl+Sh
    229. MenuID = 31064 (Menu.asm, 105)
    230. eax = Delete to end of line Ctrl+Shif
    231. MenuID = 31065 (Menu.asm, 105)
    232. eax = Delete to start of word   Ctrl+Ba
    233. MenuID = 31066 (Menu.asm, 105)
    234. eax = Delete to end of word Ctrl+Dele
    235. MenuID = 31067 (Menu.asm, 105)
    236. ----------------------------------------
    237. ----------------------------------------
    238. eax = &Вид
    239. MenuID = -1 (Menu.asm, 105)
    240. eax = &Панель инструментов
    241. MenuID = 42001 (Menu.asm, 105)
    242. eax = Окно& инструментария
    243. MenuID = 42002 (Menu.asm, 105)
    244. eax = &Окно вывода
    245. MenuID = 42003 (Menu.asm, 105)
    246. eax = &Браузер проектов
    247. MenuID = 42004 (Menu.asm, 105)
    248. eax = С&войства
    249. MenuID = 42005 (Menu.asm, 105)
    250. eax = Tab S&elect
    251. MenuID = 42006 (Menu.asm, 105)
    252. eax = &Info Tool
    253. MenuID = 42008 (Menu.asm, 105)
    254. eax = &Строка статуса
    255. MenuID = 42007 (Menu.asm, 105)
    256. eax = &Full Screen  Ctrl+W
    257. MenuID = 44026 (Menu.asm, 105)
    258. eax = Lancome tools
    259. MenuID = 31069 (Menu.asm, 105)
    260. ----------------------------------------
    261. eax = Ф&ормат
    262. MenuID = -1 (Menu.asm, 105)
    263. eax = &Заблокировать элементы управле
    264. MenuID = 43005 (Menu.asm, 105)
    265. eax = &Передвинуть назад
    266. MenuID = 43006 (Menu.asm, 105)
    267. eax = &Передвинуть в перед
    268. MenuID = 43007 (Menu.asm, 105)
    269. eax = Показать &сетку
    270. MenuID = 43008 (Menu.asm, 105)
    271. eax =
    272. MenuID = 0 (Menu.asm, 105)
    273. eax = &Выравнивание
    274. MenuID = -1 (Menu.asm, 105)
    275. eax = &Налево
    276. MenuID = 43901 (Menu.asm, 105)
    277. eax = &По центру
    278. MenuID = 43902 (Menu.asm, 105)
    279. eax = &Направо
    280. MenuID = 43903 (Menu.asm, 105)
    281. eax =
    282. MenuID = 0 (Menu.asm, 105)
    283. eax = &Вверху
    284. MenuID = 43904 (Menu.asm, 105)
    285. eax = &Середина
    286. MenuID = 43905 (Menu.asm, 105)
    287. eax = &По низу
    288. MenuID = 43906 (Menu.asm, 105)
    289. ----------------------------------------
    290. eax = Одинаковый размер
    291. MenuID = -1 (Menu.asm, 105)
    292. eax = &Ширина
    293. MenuID = 43911 (Menu.asm, 105)
    294. eax = &Высота
    295. MenuID = 43912 (Menu.asm, 105)
    296. eax = &Оба
    297. MenuID = 43913 (Menu.asm, 105)
    298. ----------------------------------------
    299. eax = &Center in Dialog
    300. MenuID = -1 (Menu.asm, 105)
    301. eax = &Horizontal
    302. MenuID = 44029 (Menu.asm, 105)
    303. eax = &Vertical
    304. MenuID = 44030 (Menu.asm, 105)
    305. ----------------------------------------
    306. eax = Set tabindexes
    307. MenuID = 44031 (Menu.asm, 105)
    308. ----------------------------------------
    309. eax = &Проект
    310. MenuID = -1 (Menu.asm, 105)
    311. eax = Добавить &новый
    312. MenuID = -1 (Menu.asm, 105)
    313. eax = &Файл исходного кода на ассембл
    314. MenuID = 44101 (Menu.asm, 105)
    315. eax = &Header / Inc файл
    316. MenuID = 44102 (Menu.asm, 105)
    317. eax = &Файл ресурсов (.rc)
    318. MenuID = 44103 (Menu.asm, 105)
    319. eax = &Текстовый файл (.txt)
    320. MenuID = 44104 (Menu.asm, 105)
    321. eax = &Диалог
    322. MenuID = 44105 (Menu.asm, 105)
    323. eax = &Меню
    324. MenuID = 44106 (Menu.asm, 105)
    325. eax = Мо&дуль
    326. MenuID = 44107 (Menu.asm, 105)
    327. eax = &Файл
    328. MenuID = 44108 (Menu.asm, 105)
    329. eax = New Installer Script
    330. MenuID = 31050 (Menu.asm, 105)
    331. ----------------------------------------
    332. eax = Добавить &сущесвующие
    333. MenuID = -1 (Menu.asm, 105)
    334. eax = &Файлы
    335. MenuID = 44201 (Menu.asm, 105)
    336. eax = &Диалоги
    337. MenuID = 44202 (Menu.asm, 105)
    338. eax = &Меню
    339. MenuID = 44203 (Menu.asm, 105)
    340. eax = &Обьектные файлы
    341. MenuID = 44205 (Menu.asm, 105)
    342. eax = Мод&ули
    343. MenuID = 44206 (Menu.asm, 105)
    344. eax = Open Installer Script
    345. MenuID = 31051 (Menu.asm, 105)
    346. ----------------------------------------
    347. eax = &Горячие клавиши
    348. MenuID = 44011 (Menu.asm, 105)
    349. eax = &Ресурс
    350. MenuID = 44001 (Menu.asm, 105)
    351. eax = &Таблица строк
    352. MenuID = 44007 (Menu.asm, 105)
    353. eax = &Информация о версии
    354. MenuID = 44002 (Menu.asm, 105)
    355. eax = &Язык
    356. MenuID = 44013 (Menu.asm, 105)
    357. eax = Удалить &из проекта
    358. MenuID = 44004 (Menu.asm, 105)
    359. eax = Compile installer
    360. MenuID = 31052 (Menu.asm, 105)
    361. eax =
    362. MenuID = 0 (Menu.asm, 105)
    363. eax = Выбрать Ассемблер
    364. MenuID = -1 (Menu.asm, 105)
    365. eax = html
    366. MenuID = 23000 (Menu.asm, 105)
    367. eax = masm
    368. MenuID = 23001 (Menu.asm, 105)
    369. eax = fasm
    370. MenuID = 23002 (Menu.asm, 105)
    371. ----------------------------------------
    372. eax = Группы &проектов
    373. MenuID = 44010 (Menu.asm, 105)
    374. eax = &Настройки проекта
    375. MenuID = 44006 (Menu.asm, 105)
    376. eax = &Файлы проекта
    377. MenuID = 44009 (Menu.asm, 105)
    378. eax =
    379. MenuID = 124 (Menu.asm, 105)
    380. eax = Настроить второстепенные файлы
    381. MenuID = 30010 (Menu.asm, 105)
    382. eax = Удалить второстепенные файлы
    383. MenuID = 30009 (Menu.asm, 105)
    384. eax =
    385. MenuID = 123 (Menu.asm, 105)
    386. eax = Открыть папку файлов проекта
    387. MenuID = 30008 (Menu.asm, 105)
    388. eax = Обновить &свойства
    389. MenuID = 44008 (Menu.asm, 105)
    390. eax = Сканировать проект
    391. MenuID = 44012 (Menu.asm, 105)
    392. eax = Экспортировать в &окно вывода
    393. MenuID = 44003 (Menu.asm, 105)
    394. eax =
    395. MenuID = 0 (Menu.asm, 105)
    396. eax = &Создать шаблон
    397. MenuID = 44005 (Menu.asm, 105)
    398. eax = Создать &ссылку на текст
    399. MenuID = -1 (Menu.asm, 105)
    400. eax = &Заметка
    401. MenuID = 44701 (Menu.asm, 105)
    402. eax = &Ошибка в программе
    403. MenuID = 44702 (Menu.asm, 105)
    404. eax = &Сделать в будущем
    405. MenuID = 44703 (Menu.asm, 105)
    406. ----------------------------------------
    407. eax = Version Control
    408. MenuID = 30011 (Menu.asm, 105)
    409. eax = Переменные асма
    410. MenuID = 30012 (Menu.asm, 105)
    411. eax = Res2Dlg
    412. MenuID = 30013 (Menu.asm, 105)
    413. eax = Архиватор проектов
    414. MenuID = 30020 (Menu.asm, 105)
    415. eax = Создание шрифтов
    416. MenuID = 30021 (Menu.asm, 105)
    417. eax = Windows Error Descriptions
    418. MenuID = 31049 (Menu.asm, 105)
    419. eax = KSresizer
    420. MenuID = 31071 (Menu.asm, 105)
    421. ----------------------------------------
    422. eax = &Создать
    423. MenuID = -1 (Menu.asm, 105)
    424. eax = &Compile RC   Shift+F5
    425. MenuID = 20001 (Menu.asm, 105)
    426. eax = &Assemble F5
    427. MenuID = 20002 (Menu.asm, 105)
    428. eax = &Link Alt+Ctrl+F5
    429. MenuID = 20003 (Menu.asm, 105)
    430. eax = &Build    Alt+Shift+F5
    431. MenuID = 20004 (Menu.asm, 105)
    432. eax =
    433. MenuID = 0 (Menu.asm, 105)
    434. eax = &Go   Ctrl+F5
    435. MenuID = 20005 (Menu.asm, 105)
    436. eax =
    437. MenuID = 0 (Menu.asm, 105)
    438. eax = &Run  Ctrl+Shift+F5
    439. MenuID = 20006 (Menu.asm, 105)
    440. eax = Run w/&Debug  Ctrl+D
    441. MenuID = 20007 (Menu.asm, 105)
    442. eax =
    443. MenuID = 0 (Menu.asm, 105)
    444. eax = Go &All   Alt+F5
    445. MenuID = 20008 (Menu.asm, 105)
    446. eax =
    447. MenuID = 0 (Menu.asm, 105)
    448. eax = Assemble &Modules
    449. MenuID = 20009 (Menu.asm, 105)
    450. ----------------------------------------
    451. eax = &Инструменты
    452. MenuID = -1 (Menu.asm, 105)
    453. eax = &Sniplets F11
    454. MenuID = 46001 (Menu.asm, 105)
    455. eax = &Экспортировать ID Equ's    Ctrl+F
    456. MenuID = 46002 (Menu.asm, 105)
    457. eax =
    458. MenuID = 0 (Menu.asm, 105)
    459. eax = &Notepad
    460. MenuID = 20014 (Menu.asm, 105)
    461. eax = &Calculator
    462. MenuID = 20015 (Menu.asm, 105)
    463. eax = Note&pad (.rap)
    464. MenuID = 20016 (Menu.asm, 105)
    465. eax =
    466. MenuID = 0 (Menu.asm, 105)
    467. eax = &Masm32
    468. MenuID = -1 (Menu.asm, 105)
    469. eax = &Build
    470. MenuID = 20018 (Menu.asm, 105)
    471. eax = &Run
    472. MenuID = 20019 (Menu.asm, 105)
    473. ----------------------------------------
    474. eax = &Goto Dos
    475. MenuID = 20020 (Menu.asm, 105)
    476. eax =
    477. MenuID = 0 (Menu.asm, 105)
    478. eax = Toolbar creator
    479. MenuID = 20021 (Menu.asm, 105)
    480. eax = Таблица ASCII
    481. MenuID = 30003 (Menu.asm, 105)
    482. eax = Dialog to window
    483. MenuID = 30004 (Menu.asm, 105)
    484. eax = GBitMask
    485. MenuID = 30014 (Menu.asm, 105)
    486. eax = Colref
    487. MenuID = 30015 (Menu.asm, 105)
    488. eax = Create Protos
    489. MenuID = 31054 (Menu.asm, 105)
    490. eax = G_ASCII Table
    491. MenuID = 31056 (Menu.asm, 105)
    492. eax = GColor
    493. MenuID = 31057 (Menu.asm, 105)
    494. eax = Text Links Manager
    495. MenuID = 31068 (Menu.asm, 105)
    496. eax = Get code size
    497. MenuID = 31070 (Menu.asm, 105)
    498. ----------------------------------------
    499. eax = &Окно
    500. MenuID = -1 (Menu.asm, 105)
    501. eax = &Разделить / Закрыть разделение
    502. MenuID = 47009 (Menu.asm, 105)
    503. eax = Закрыть &окно  Ctrl+F4
    504. MenuID = 47001 (Menu.asm, 105)
    505. eax = Закрыть все Ctrl+Shift+F4
    506. MenuID = 47002 (Menu.asm, 105)
    507. eax =
    508. MenuID = 0 (Menu.asm, 105)
    509. eax = &Следующее окно  F6
    510. MenuID = 47003 (Menu.asm, 105)
    511. eax = &Предыдущее окно    Ctrl+F6
    512. MenuID = 47004 (Menu.asm, 105)
    513. eax = Перейти к окну    Alt+0..9
    514. MenuID = 41401 (Menu.asm, 105)
    515. eax = Перейти в редактор    F12
    516. MenuID = 47013 (Menu.asm, 105)
    517. eax = Перейти к окну проекта Ctrl+F12
    518. MenuID = 47014 (Menu.asm, 105)
    519. eax = Перейти к свойствам  Shift+F12
    520. MenuID = 47015 (Menu.asm, 105)
    521. eax = Перейти в окно окно вывода  Ctrl
    522. MenuID = 47016 (Menu.asm, 105)
    523. eax =
    524. MenuID = 0 (Menu.asm, 105)
    525. eax = Мозаикой &горизонтально  F7
    526. MenuID = 47005 (Menu.asm, 105)
    527. eax = Мозаикой &вертикально  Ctrl+F7
    528. MenuID = 47006 (Menu.asm, 105)
    529. eax = &Каскадом     Shift+F7
    530. MenuID = 47007 (Menu.asm, 105)
    531. eax = Упорядочить &иконки  Ctrl+Shift+
    532. MenuID = 47008 (Menu.asm, 105)
    533. eax =
    534. MenuID = 0 (Menu.asm, 105)
    535. eax = Развернуть Alt+F7
    536. MenuID = 47010 (Menu.asm, 105)
    537. eax = &Восстановить Alt+Ctrl+F7
    538. MenuID = 47011 (Menu.asm, 105)
    539. eax = Свернуть Alt+Shift+F7
    540. MenuID = 47012 (Menu.asm, 105)
    541. eax =
    542. MenuID = 0 (Menu.asm, 105)
    543. eax = &1 C:\ALx86\Menu\Menu.Asm
    544. MenuID = 65001 (Menu.asm, 105)
    545. ----------------------------------------
    546. eax = &Настройки
    547. MenuID = -1 (Menu.asm, 105)
    548. eax = &Язык
    549. MenuID = 44022 (Menu.asm, 105)
    550. eax = &Programming Languages
    551. MenuID = 44024 (Menu.asm, 105)
    552. eax = Настройки редактора кода
    553. MenuID = 48003 (Menu.asm, 105)
    554. eax = &Цвета и ключевые слова
    555. MenuID = 48001 (Menu.asm, 105)
    556. eax = &Настройки редактора диалогов
    557. MenuID = 48004 (Menu.asm, 105)
    558. eax = C&ustom Controls
    559. MenuID = 44025 (Menu.asm, 105)
    560. eax = Настройки принтера
    561. MenuID = 48015 (Menu.asm, 105)
    562. eax = &Настройки шрифтов
    563. MenuID = 44014 (Menu.asm, 105)
    564. eax = &Горячие клавиши
    565. MenuID = 48017 (Menu.asm, 105)
    566. eax = Nullsoft Scriptable Install Sys
    567. MenuID = 31053 (Menu.asm, 105)
    568. eax =
    569. MenuID = 0 (Menu.asm, 105)
    570. eax = Ассоциации файлов
    571. MenuID = 44021 (Menu.asm, 105)
    572. eax = Браузер& файлов
    573. MenuID = 48012 (Menu.asm, 105)
    574. eax = &Внешние типы файлов
    575. MenuID = 48013 (Menu.asm, 105)
    576. eax = &Sniplets
    577. MenuID = 48005 (Menu.asm, 105)
    578. eax = Установить &пути
    579. MenuID = 48006 (Menu.asm, 105)
    580. eax = Environment &Variables
    581. MenuID = 44027 (Menu.asm, 105)
    582. eax = Tool &Windows
    583. MenuID = 48011 (Menu.asm, 105)
    584. eax =
    585. MenuID = 0 (Menu.asm, 105)
    586. eax = &Меню создания
    587. MenuID = 48007 (Menu.asm, 105)
    588. eax = &Меню инструментов
    589. MenuID = 48008 (Menu.asm, 105)
    590. eax = &Меню помощиа
    591. MenuID = 48009 (Menu.asm, 105)
    592. eax = Менеджер дополнений RadASM
    593. MenuID = 30000 (Menu.asm, 105)
    594. eax = ReallyRad
    595. MenuID = 30005 (Menu.asm, 105)
    596. eax = RadHelp options
    597. MenuID = 30007 (Menu.asm, 105)
    598. ----------------------------------------
    599. eax = М&акросы
    600. MenuID = -1 (Menu.asm, 105)
    601. eax = &Записать
    602. MenuID = 46301 (Menu.asm, 105)
    603. eax = &Управлять
    604. MenuID = 46303 (Menu.asm, 105)
    605. eax =
    606. MenuID = 0 (Menu.asm, 105)
    607. ----------------------------------------
    608. eax = &Файл помощи
    609. MenuID = -1 (Menu.asm, 105)
    610. eax = &О программе
    611. MenuID = 49001 (Menu.asm, 105)
    612. eax =
    613. MenuID = 0 (Menu.asm, 105)
    614. eax = &Win32 Api
    615. MenuID = 20022 (Menu.asm, 105)
    616. eax = &X86 Op Codes
    617. MenuID = 20023 (Menu.asm, 105)
    618. eax = &Masm32
    619. MenuID = 20024 (Menu.asm, 105)
    620. eax = &Resource
    621. MenuID = 20025 (Menu.asm, 105)
    622. eax = A&gner
    623. MenuID = 20026 (Menu.asm, 105)
    624. eax = &RadASM
    625. MenuID = 20027 (Menu.asm, 105)
    626. ----------------------------------------
    627. eax = Favourites
    628. MenuID = -1 (Menu.asm, 105)
    629. eax = Add to favourites
    630. MenuID = 30023 (Menu.asm, 105)
    631. eax = Manage favourites
    632. MenuID = 30024 (Menu.asm, 105)
    633. eax =
    634. MenuID = 0 (Menu.asm, 105)
    635. ----------------------------------------
    636. eax =
    637. MenuID = 61472 (Menu.asm, 105)
    638. eax =
    639. MenuID = 61728 (Menu.asm, 105)
    640. eax =
    641. MenuID = 61536 (Menu.asm, 105)
    это так на быструю руку.
    Юзай на ...
     
  6. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Ну, ели руки золотые, то не важно откуда они растут. :)
     
  7. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Стоп. Стоп. Проблема не в том, что я не могу сделать рекурсию и не в том, что не могу вызвать GetMenuItemInfo и т.п.
    Проблема в том, что с помощью GetMenuString не удается получить caption подменю. Получаются только заголовки основных элементов. И дело не в кривых руках, правильно сказал S_Alex, на другом меню, не WinAsm все работает как задумано. Качайте пример, зря я его что-ли выкладывал.
    Каким-то другим путем отрисовываются элементы меню.
    Вот и вопрос, какие еще могут быть способы.
    S_Alex
    Спасибо за пример, он таки полнее чем мое решение.
    Как рисуется меню в RadAsm?
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    DarkWanderer
    Если подменю там ownerdraw, то строка не обязательно должна храниться в самом меню, поэтому ты и не можешь её получить.

    В радасме по умолчанию меню обычное, частично из ресурсов, частично создаётся динамически.
     
  9. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    IceStudent
    Т.е. от ОС мне ответа не дождаться и нужно копать внутреннюю архитектуру winasm?
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Надо смотреть сорцы WinAsm, как он создал такое меню.
     
  11. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    IceStudent
    Ага. Смотрю сорцы в Olly, не так уж и понятно;).
     
  12. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    вопрос задан автору студии - ждем-с ответ... ;)
     
  13. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Хм. Не так уж и сложно там делается.
    -загружаются строки из dll по фиксированным адресам без всяких циклов.
    -создаются popup menu (CreatePopupMenu).
    -с помощью AppendMenu без всяких циклов вставляются пункты
    т.е. формируются выпадающие меню.
    -CreateMenu, InsertMenuItem, SetMenu,- создается панель и устанавливается на окно.
    Длиинная такая функция. (смещение 00411948 в памяти).
    Возможно, в обработке сообщений по выбору основного отображается всплывающее.
    Вот только что из этого следует?
     
  14. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Не-а. Предположение не верно. При InsertMenuItem указывается hSubMenu.
    Иначе как бы получались submenu handle and id;).

    Разве есть разница для GetMenuString, нормальное меню или всплывающее?
    Тогда вопрос сводится к тому, как получить caption popup menu.
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    DarkWanderer
    А ты ID подэлементов как получаешь? По первому коду только главные элементы перечисляются.
     
  16. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    IceStudent
    Получить подменю и снова вызвать функцию. Потом еще и еще, пока не станет без подменю.
     
  17. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Ответ получен.
    Вот, что пишет Антонис, может кому пригодится.
    Должно работать для любого OWERDRAW (может и не только) меню.
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    хе, у меня dwItemData указывал на структуру, где в начале лежала не строка, а dword.
    так что про любой OwnerDraw вы с Антонисом переувеличили.
     
  19. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    n0name
    Не-а. Вы же помните, что там за dword лежит, значит он и нужен. А в dwItemData и должны возвращаться data item. В нем можно и handle файла хранить, а в файле строку.
    Написанное Антонисом выделено в комментарий, остальное от меня.