2015-04-17 7 views
5

Wie öffnen Sie das Kontextmenü eines Fensters (der normale Windows-Kontext, der erscheint, wenn Sie Klicken Sie mit der rechten Maustaste die Titelleiste eines Fensters).Wie öffne ich das Kontextmenü eines Fensters?

Things I (auf eine Schaltfläche klicken)

ReleaseCapture(); 
SendMessage(this.Handle, WM_NCRBUTTONDOWN, 0, 0); 
SendMessage(this.Handle, WM_RBUTTONUP, 0, 0); 
SendMessage(this.Handle, WM_CONTEXTMENU, 0, 0); 

Und das versucht haben:

ReleaseCapture(); 
SendMessage(this.Handle, WM_NCRBUTTONDOWN, HT_CAPTION, 0); 
SendMessage(this.Handle, WM_RBUTTONUP, HT_CAPTION, 0); 
SendMessage(this.Handle, WM_CONTEXTMENU, HT_CAPTION, 0); 
+1

Auf welchem ​​Fenster möchten Sie das Kontextmenü öffnen? Ist es immer bei Ihnen oder auch bei anderen Prozessen? Haben Sie tatsächlich ein Kontextmenü definiert, das geöffnet werden kann, wenn es sich um ein eigenes Fenster handelt? Wenn dieses Steuerelement, von dem Sie das Kontextmenü öffnen möchten, kein Steuerelement enthält, können Sie keines öffnen. –

+0

GetSystemMenu -> TrackPopupMenu vielleicht –

+1

Legen Sie Fokus auf das Fenster fest und senden Sie ALT + Leerzeichen an es. Mit Winforms SendKeys.Send ("%") – Ralf

Antwort

4

So öffnen Sie das System-Kontextmenü auf einem Fenster, das Sie Alt + Leertaste drücken. In Ihrem Fall könnten Sie also die Schlüssel zu diesem Fenster senden, das das Kontextmenü für Sie öffnen sollte.

Der Teil, den Sie mit SendMessage gemacht haben, sendet eigentlich nur eine Benachrichtigung, dass das angegebene Fenster die richtigen Klicks simuliert. Aber es ist immer noch wichtig, wo die Maus ist.

Auch wichtig: Wenn Sie "SendKeys.Send" (für Windows-Formulare) verwenden, betrifft dies nur das Fenster, das gerade aktiv ist.