2016-02-29 2 views
2

Мне нравится автоматизировать ежедневные задачи с помощью AutoHotKey и Python. Мне нравится использовать мою клавиатуру вместо мыши, поэтому я предпочитаю делать горячие клавиши с AutoHotKey, которые выполняют различные действия, которые вам в противном случае нужно использовать для мыши, или что вам нужно будет использовать слишком много действий клавиатуры.Автоматизация Windows: события эмуляции событий меню

Но есть некоторые действия, которые мне не удается автоматизировать. Например, выпадающее меню для изменения количества мониторов, используемых виртуальной машиной в VMWare Workstation. Я думаю, что одна вещь, которая действительно поможет мне с этой задачей автоматизации и, возможно, с большим количеством в будущем, - это , чтобы смоделировать щелчки элементов меню.

Возможно ли это? Я хочу обмануть программу, подумав, что один из ее пунктов меню был нажат. Я знаю, чтобы программировать в Python и AutoHotKey. Возможно ли это вообще, и конкретно на этих двух языках?

+0

Это должно быть возможно с помощью 'postMessage' и соответствующего' WM_COMMAND', я думаю, – Blauhirn

ответ

0

Предположив, что это Windows, если приложение использует стандартные элементы HMenu вы можете сделать одну из двух вещей с (относительно) минимальными усилиями

  1. Если есть горячие клавиши, как Ctrl + S для Сохранить , вы можете просто отправить Ctrl + S в окно с помощью API SendKeys (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx)

  2. Если этого не произошло, вы можете попытаться найти, какой WM_COMMAND отправлен в окно после выбора элемента. Вы можете использовать Spy ++ от Microsoft (https://msdn.microsoft.com/en-us/library/dd460756.aspx), чтобы получить код, а затем сделать PostMessage в это окно с кодом.

Помните, что вам нужно убедиться, что вы используете FindWindow, чтобы получить правильную ручку HWND для ее отправки.

удачи :)

Edit Followup: Краткое руководство о том, чтобы использовать Spy ++ с Notepad.exe

  1. Start Spy ++
    • Примечание: Есть два из них, spyxx. exe и spyxx_amd64.exe. Если вы не регистрируете сообщения - используйте другие
    • ПРИМЕЧАНИЕ. Если вы сначала запустили Spy ++, нажмите F5, чтобы обновить список окон ПОСЛЕ «Блокнот».ехе начинает
  2. Spy ++ Главное меню> Поиск> Найти окно
  3. на «поиск окна» диалог, нажмите и удерживайте значок «целевой» рядом с «искателя инструмент»
  4. перетащить курсор над Блокнот заголовка
  5. Spy ++ покажет Надпись: «Без названия - Блокнот» и класс: «Блокнот»
  6. нажмите кнопку «OK»
  7. Теперь вы будете видеть Блокнот в списке окон
  8. правой кнопкой мыши на этом предприя Ry и выберите «Сообщения»
  9. Для управления потоком, Главное меню> Сообщения> Logging Параметры, сообщения Tab
  10. Очистить все, только выберите WM_COMMAND, нажмите ОК
  11. в блокноте, перейдите в Главное меню> Правка> Перейти к
  12. в Spy ++, вы увидите строку с надписью "WM_COMMAND wNotifyCode: 0 (отправлено из меню) WID: 24"

Результат: Теперь мы знаем, что если бы вы были PostMessage (WM_COMMAND, MAKE_WPARAM (0,24), HWND любого Notepad.exe в системе), появится окно «Перейти к».

+0

Я пытался использовать Spy ++ для прослушивания сообщений WM_COMMAND, но я не вижу, где в программе это сделать. Есть идеи? –

+0

Надеюсь, что это поможет :) –

Смежные вопросы