私はpython 2.6しか持っていません。外部ライブラリを使用せずにこれを行うことはできますか? 現在カーソルがある場所で左クリックを実行したいだけです。
1 に答える
わかりました。まず、user32 windll を 経由ctypesで開く方法を知っておく必要があります。これは簡単です。
from ctypes import *
user32 = windll.user32
次に、呼び出したい Win32 関数はおそらくSendInputですが、比較対照するために (mouse_eventおよびSendMessageWM_* メッセージがマウス クリックに対応するドキュメント) を参照することをお勧めします。
を使用すると仮定すると、 以外のすべてのパラメーターに対して 0 を指定して、 を1 つ送信し、続いて 1SendInputつを送信します。MOUSEEVENTF_LEFTDOWNMOUSEEVENTF_LEFTUPdwFlags
それで、あなたはこれをどのように呼びますか?さて、ここにC APIがあります:
UINT WINAPI SendInput(
_In_ UINT nInputs,
_In_ LPINPUT pInputs,
_In_ int cbSize
);
これは、構造体LPINPUTの配列へのポインターを取得したことを意味します。構造自体には、、およびの和集合があるINPUTため、それらも定義する必要があります (ただし、最初のものだけを定義し、他のものは存在しないふりをするだけで済みます。必要なのは最初のものだけなので)。 .INPUTMOUSEINPUTKBDINPUTHARDWAREINPUT
したがって、これを行う手順は次のctypesとおりです。
- とのを定義し
Structureます。MOUSEINPUTINPUT user32Windll をロードします。- を設定
argtypesしuser32.SendInputます。 - で最初の
MOUSEINPUTインスタンスを作成しdwFlags= MOUSEEVENTF_LEFTDOWN、それにINPUT付随するインスタンスを作成します。 user32.SendInput(1, [myinput], len(INPUT))または何でも呼び出しuser32.SendInput(1, addressof(myinput), len(INPUT))ます( をどのように定義したかによって異なりますargtypes)。- で 2 番目の
MOUSEINPUTインスタンスを作成しdwFlags= MOUSEEVENTF_LEFT、それにINPUT付随するインスタンスを作成します。 user32.SendInput()もう一度電話してください。
最後の注意: Vista 以降では、これを行うには適切な「整合性レベル」が必要です。たとえば、通常のアプリは、「昇格された」アプリ (インストーラーなど) にクリックを送信できません。うまくいけば、これはあなたにとって問題ではありません。そうであれば、UIPI と UAC について調べる必要があります。最悪の場合は、下位レベルのトリックにフォールバックする必要があるかもしれません。
これで十分ですか、それとも特定の部分についてサポートが必要ですか?