@DavidHeffernanがあなたの質問に答えましたが、正しい質問をしていない可能性があります。
ユーザーがいくつかのアプリケーションを実行していて、ホットキーを検出し、メニューを表示してから、選択したメニュー項目に基づいて何らかのアクションを実行できるようにしたいとします。カーソルの下の単語など、ユーザーのコンテキスト)。これは、単に任意の画面座標にメニューを表示するよりも複雑です。
他のプログラミング言語でこれを複製しようとするのではなく、AutoHotKeyを使用することをお勧めします。あなたがこれを認識していない場合、あなたのコードがAutoHotKeyスクリプトを実行することは可能です。 IIRCを使用すると、AHKスクリプトをコンパイルできるので、コンパイルされたスクリプトだけでAHKをインストールする必要はありません。 AHKは最も洗練されたソリューションではないかもしれませんが、深みと成熟しています。
これができない場合は、Windows HooksとDLL Injectionを調べることをお勧めします。既存のコードやフレームワークを見つけることができない限り、これはかなりの労力を必要とします。
この複雑さの理由は?他のプログラムをスムーズに増やすには(フォーカスなどの問題にぶつかることなく)、コードを他のプログラムの一部として実行したいと思っています。これの仕組みはDLL注入を介して行うことができます。しかし、これは最初のステップにすぎません。コードが適切なコンテキストで実行されると、コードは「ホスト」プログラムと相互運用する必要があります。これは難しいことがあります(WindowsメッセージングとWindows APIについて深い経験があれば役に立ちます)。これを任意のプログラムでスムーズに動作させたい場合は、さらに難しくなります。
しかし、この方法でメニューを表示してもキーボードフォーカスは得られません。それがなければ、マウス以外でメニューを操作することはできません。 –
どのように表示するか教えてください。ホットキーから? –
はい、ホットキーから、Popup()メソッドを使用します。私は、メニューを表示する直前にSetForegroundWindow(self.Handle)と言うと、ポップアップメニューにキーボードフォーカスが得られることを発見しました。私のアプリが最小化されている場合、これはアプリケーションのウィンドウには影響がなく、メニューの問題を修正します。しかし、私のアプリが**最小化されていない**場合、それはフォアグラウンドにプッシュされ、メニューが閉じられた後にフォーカスを取得します。これは私が排除する必要がある(またはこの副作用を持たない別の回避策を見つける)必要な行動です。 –