Frage

Ich habe eine Anwendung, die ich für einen kleinen Assistenten mich schreibe. Es automatisiert ein kleiner Teil der App durch Bewegen der Maus Buttons, Menüs aneignen und klicken sie damit der Benutzer sehen kann.

Bisher bewegt er die Maus an einen Baum Element und sendet einen Rechtsklick. Das erscheint ein Menü, über TrackPopupMenu auf. Als nächstes gehe ich die Maus auf den entsprechenden Eintrag im Popup-Menü. Was ich kann nicht herausfinden, wie man den Menüpunkt auszuwählen.

Ich habe versucht zu senden linke Klicks zu kontaktieren Fenster-Menü, versuchte WM_COMMAND auf das Menü des Besitzer zu senden, usw. Nichts funktioniert.

Ich nehme an, das Menü ist ein Fenster an und für sich, aber ich weiß nicht, wie das HWND dafür bekommen von dem HMENU, die ich habe.

Alle Gedanken darüber, wie ein Klick auf das Popup-Menü Postmessage?

PS Ich bin einen separaten Thread mit der Maus und Post-Nachrichten zu fahren, so dass keine Probleme mit TrackPopupMenu synchron zu sein.

War es hilfreich?

Lösung

Ich habe keinen Präfekten Weg finden, es zu tun, aber die folgenden Arbeiten ziemlich gut:

//in my case, the menu is a popup from a tree control created with:
CMenu menu;
menu.CreatePopupMenu();
//add stuff to the menu...
pTreeCtrl->SetMenu(&menu);
m_hMenu = menu.GetSafeHmenu();
CPoint  pt;
GetCursorPos(&pt);
menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, _pTreeCtrl);
menu.Detach();
m_hMenu = NULL;

Die obige Funktion wurde auf einem Rechtsklick des Baumes Artikel genannt. Das untere Code wird in einem separaten Thread ausführen, den Klick zu tun

CRect rc;
GetMenuItemRect(pTreeCtrl->GetSafeHwnd(), m_hMenu, targetMenuItemIndex, &rc);
if(FALSE == rc.IsRectEmpty())
{
   CPoint target = rc.CenterPoint();
   //this closes the menu
  ::PostMessage(pTreeCtrl->GetSafeHwnd(), WM_CANCELMODE, 0, 0);
  DestroyMenu(m_hMenu);
  m_hMenu = NULL;
  //now simulate the menu click
  ::PostMessage(pTreeCtrl->GetSafeHwnd(), WM_COMMAND, targetMenuItemID, 0);
}

Andere Tipps

Ich erwarte, dass Sie könnten die notwendigen Klick-Nachrichten durch den Aufruf SendInput . Bewegen Sie die Maus über, wo das Menü ist, und klicken Sie dann auf.

Sie können einen Blick auf die WH_JOURNALPLAYBACK Haken nehmen wollen . Ich denke, es ist entworfen, genau das zu tun, was Sie scheinen manuell zu tun, um zu versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top