Контекстное меню 64-битных окон внутри 32-битного приложения (как пройти через меню, нарисованное владельцем?) - PullRequest
2 голосов
/ 17 июня 2011

Я хочу встроить 64-битное контекстное меню Windows в 32-битное приложение (что-то вроде подменю X64 в TotalCommander).Для этого мне нужно смоделировать содержимое 64-битного меню на 32-битной стороне.Моя идея состоит в том, чтобы просмотреть 64-битное меню внутри 64-битного вспомогательного процесса и заново создать такой контент на 32-битной стороне (я также пытался показать такое меню напрямую из 64-битного помощника, но в Windows было удивительно иметь два контекстных меню, каждоеиз другого процесса, и не правильно рисует второе меню).Скажите, если у вас есть другие идеи.

У меня есть одна проблема: некоторые нарисованные владельцем меню показывают больше элементов, чем возвращает GetMenuItemCount () (обычно GetMenuItemCount () возвращает 1 в таком случае).

Интересно, что я могу использовать GetMenuItemInfo () для нарисованного владельцем элемента меню, используя идентификатор элемента (который возвращается из TrackPopupMenuEx ()), поэтому такое меню может генерировать правильную информацию для каждого конкретного элемента.Но, к сожалению, я не могу использовать идентификаторы для итерации пунктов меню (идентификаторы пунктов неупорядочены).

Есть идеи?

1 Ответ

4 голосов
/ 19 июня 2011

Не уверен, как TotalCommand это делает. Но я нашел это:

  • Запустить TOTALCMD.EXE (32-разрядный процесс)
  • Убедитесь, что он работает в TaskManager (оставьте его работать справа / слева и следите за процессами / счетчик процессов.
  • Теперь запустите меню, процессы все те же.
  • Наведите указатель мыши на X64 меню, и вы увидите, что для этого нужно время. На этот раз, когда вы видите в TaskManager, еще один процесс с именем TCMDX64.EXE только что запустился, и это 64-битный процесс.
  • Насколько я понимаю, этот порожденный процесс получает меню и отправляет обратно в 32-разрядное приложение TotalCommander.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...