web-dev-qa-db-ja.com

Python Windowsでのデスクトップアクティビティを自動化するコード

Pythonを使用して、Windows環境でデスクトップアクティビティを自動化したい。どうすればできますか?いくつかの例も役立ちます。

デスクトップアクティビティとは、マウスとキーボードの制御、アクティブウィンドウのプロパティへのアクセス、デスクトップ上のアイコンのダブルクリック、ウィンドウの最小化と最大化、キーボードを介した入力ポップアップウィンドウへのデータ入力などのアクションを意味します。

22
stallion

[〜#〜] sikuli [〜#〜] をご覧ください。

Sikuliは、画像(スクリーンショット)を使用してグラフィカルユーザーインターフェイス(GUI)を自動化およびテストするための視覚的なテクノロジです。

SIKULIは、スクリーンショットを取得し、python(実際には jython の)スクリプトに埋め込む)の非常に巧妙な組み合わせを使用します。


スクリーンショットを撮る:

enter image description here

コードでそれらを使用します。

enter image description here

18
sloth

Python(ctypesまたはいくつかのPython windowsバインディングを使用)経由でアクセスできるWindowsのユーザーインターフェイスを自動化するさまざまな方法があります。 :

  1. Raw Windows API-マウス用のGet/SetCursorPosGetFocusGetForegroundWindowなどのHWND API

  2. AutoIt-自動化スクリプト言語: PythonでAutoIt関数を呼び出す

  3. Microsoft Active Accessibility(MSAA)/ WinEvent-Win95のアクセシビリティAPIを介してUIに問い合わせるためのAPI。

  4. 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_accChildCountIAccessibleのみを使用するため、childIdが0でない場合、get_accChildCountを呼び出す代わりに0を返す必要があります) !

IAccessible呼び出しは、"this object does not support this property"を示すさまざまなエラーコードを返すことができます。 DISP_E_MEMBERNOTFOUNDまたはE_NOTIMPL

ウィンドウの状態に注意してください。ウィンドウが最大化されてから最小化された場合、復元はウィンドウを最大化された状態に復元します。そのため、通常のウィンドウ状態に戻すには、再度復元する必要があります。

MSAAおよびUIA AP​​Iはマウスの右クリックをサポートしていないため、Win32 APIを使用してトリガーする必要があります。

MSAAモデルは、ツリービューの階層情報をサポートしていません。フラットリストとして表示します。一方、UIAは、表示されている要素のみを列挙するため、折りたたまれたUIAツリー内の要素にアクセスすることはできません。

8
reece

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の開発者の一人です。

8
Tytus

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オートメーションライブラリ

2
kenorb

PCをロックできます(Win + L)

import ctypes
ctypes.windll.user32.LockWorkStation()

ごみ箱をクリアできます

import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)
0
Abhinav Anand