Pythonを使用して、Windows環境でデスクトップアクティビティを自動化したい。どうすればできますか?いくつかの例も役立ちます。
デスクトップアクティビティとは、マウスとキーボードの制御、アクティブウィンドウのプロパティへのアクセス、デスクトップ上のアイコンのダブルクリック、ウィンドウの最小化と最大化、キーボードを介した入力ポップアップウィンドウへのデータ入力などのアクションを意味します。
[〜#〜] sikuli [〜#〜] をご覧ください。
Sikuliは、画像(スクリーンショット)を使用してグラフィカルユーザーインターフェイス(GUI)を自動化およびテストするための視覚的なテクノロジです。
SIKULIは、スクリーンショットを取得し、python(実際には jython の)スクリプトに埋め込む)の非常に巧妙な組み合わせを使用します。
スクリーンショットを撮る:
コードでそれらを使用します。
Python(ctypes
またはいくつかのPython windowsバインディングを使用)経由でアクセスできるWindowsのユーザーインターフェイスを自動化するさまざまな方法があります。 :
Raw Windows API-マウス用のGet/SetCursorPos
、GetFocus
やGetForegroundWindow
などのHWND API
AutoIt
-自動化スクリプト言語: PythonでAutoIt関数を呼び出す
Microsoft Active Accessibility(MSAA
)/ WinEvent-Win95のアクセシビリティAPIを介してUIに問い合わせるためのAPI。
UI /自動化(UIA
)-Vistaで導入されたMSAA
の代替(XP SP3 IIRCで利用可能)。
ユーザーインターフェイスを自動化してテストするのは簡単な作業ではありません。あなたをつまずかせることができる落とし穴がたくさんあります。
自動化フレームワークを自動化された方法でテストして、テストしているプラットフォームで機能することを確認することをお勧めします(自動化の失敗API
対アプリケーションの失敗を識別するため)。
もう1つの考慮事項は、ローカライズの処理方法です。また、Minimize/Maximize/...の名前もローカライズされており、アプリケーションとは異なる言語(システムロケールとユーザーロケール)にすることができます。
擬似コードでは、アプリケーションを最小化するMSAA
プログラムは次のようになります。
window = AccessibleObjectFromWindow(FindWindow("My Window"))
titlebar = [x for x in window.AccessibleChildren if x.accRole == TitleBar]
minimize = [x for x in titlebar[0].AccessibleChildren if x.Name == "Minimize"]
if len(minimize) != 0: # may already be minimized
mimimize[0].accDoDefaultAction()
MSAA
のアクセス可能なアイテムは、(object: IAccessible, childId: int)
のペアとして保存されます。ここで呼び出しを正しく行うには注意が必要です(たとえば、get_accChildCount
はIAccessible
のみを使用するため、childId
が0でない場合、get_accChildCount
を呼び出す代わりに0を返す必要があります) !
IAccessible
呼び出しは、"this object does not support this property"
を示すさまざまなエラーコードを返すことができます。 DISP_E_MEMBERNOTFOUND
またはE_NOTIMPL
。
ウィンドウの状態に注意してください。ウィンドウが最大化されてから最小化された場合、復元はウィンドウを最大化された状態に復元します。そのため、通常のウィンドウ状態に戻すには、再度復元する必要があります。
MSAA
およびUIA
APIはマウスの右クリックをサポートしていないため、Win32 API
を使用してトリガーする必要があります。
MSAA
モデルは、ツリービューの階層情報をサポートしていません。フラットリストとして表示します。一方、UIA
は、表示されている要素のみを列挙するため、折りたたまれたUIA
ツリー内の要素にアクセスすることはできません。
Automa を試すことができます。
これは、Pythonで記述されたWindows GUIオートメーションツールです。これは非常に簡単に使用できます。たとえば、次のことができます。
# to double click on an icon on the desktop
doubleclick("Recycle Bin")
# to maximize
click("Maximize")
# to input some text and press ENTER
write("Some text", into="Label of the text field")
press(ENTER)
使用可能なコマンドの完全なリストは here にあります。
免責事項:私はAutomaの開発者の一人です。
PyAutoGUI を使用できます。これは、クロスプラットフォームPython GUI自動化を実行する方法を提供します。
以下は、画面の中央にマウスを移動する簡単なコードです。
import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
関連する質問: Pythonでマウスを制御する 。
例:
pyautogui.typewrite('Hello world!') # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25) # prints out "Hello world!" with a quarter second delay after each character
JavaScriptスタイルのメッセージボックスを提供します。
その他。
他の提案については、次を確認してください: アプリでのユーザーインタラクションをシミュレートするためのPython GUIオートメーションライブラリ 。
PCをロックできます(Win + L)
import ctypes
ctypes.windll.user32.LockWorkStation()
ごみ箱をクリアできます
import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)