pywinauto
pywinautoを使用してWindowsデスクトップアプリケーションを自動操作します。ウィンドウの検出やコントロールの検査、ボタンのクリック、テキスト入力など、Win32/UIAアプリケーションをプログラムから自在に制御できます。
description の原文を見る
Automate Windows desktop applications using pywinauto. Discover windows, inspect controls, click buttons, type text, and drive any Win32/UIA application programmatically.
SKILL.md 本文
Windows UI オートメーション (pywinauto)
pywinauto を使用して任意の Windows デスクトップアプリケーションを操作します:ウィンドウの発見、コントロールの検査、ボタンのクリック、テキストの入力、コンテンツの読み取りが可能です。 2つのバックエンドをサポートしています:Win32 API(従来型アプリケーション)と MS UI Automation(モダンアプリケーション)。
ユースケース
- ユーザーが「XX アプリのそのボタンをクリックして」「このフォームを自動入力して」と依頼
- API のないデスクトップアプリケーション(ERP システム、社内管理システムなど)を操作する必要がある
- GUI アプリケーションをバッチ操作する(データの自動入力など)
- 他のアプリケーションのインターフェース上のテキストコンテンツを読み取る必要がある
バックエンドの選択
| バックエンド | パラメータ | 対応アプリケーション |
|---|---|---|
| Win32 API | backend="win32" | MFC、VB6、VCL、シンプルな WinForms |
| MS UI Automation | backend="uia" | WinForms、WPF、UWP Store アプリケーション、Qt5、ブラウザ |
どちらを使うか不確定な場合は、まず uia を試してください。コントロールが見つからない場合は win32 に切り替えてください。
コマンドリファレンス
既存のアプリケーションに接続
from pywinauto import Application
# 方法 1:ウィンドウタイトルで接続
app = Application(backend="uia").connect(title="記事本", timeout=10)
# 方法 2:プロセス名で接続
app = Application(backend="uia").connect(path="notepad.exe")
# 方法 3:プロセス ID で接続
app = Application(backend="uia").connect(process=12345)
新しいアプリケーションを起動
from pywinauto import Application
app = Application(backend="uia").start("notepad.exe")
# ウィンドウが表示されるまで待機
app.window(title_re=".*記事本.*").wait("ready", timeout=10)
ウィンドウとコントロールの発見
# すべてのトップレベルウィンドウをリストアップ
from pywinauto import Desktop
windows = Desktop(backend="uia").windows()
for w in windows:
print(f"{w.window_text()} — {w.class_name()}")
# ウィンドウコントロールツリーを出力(デバッグ用)
dlg = app.window(title_re=".*記事本.*")
dlg.print_control_identifiers()
ボタンとメニューのクリック
dlg = app.window(title="記事本")
# メニューをクリック
dlg.menu_select("ファイル->開く")
# ボタンをクリック(テキストマッチングによる)
dlg.child_window(title="OK", control_type="Button").click()
# ボタンをクリック(auto_id による)
dlg.child_window(auto_id="btnSubmit").click()
テキストの入力
dlg = app.window(title="記事本")
# 編集ボックスに入力
edit = dlg.child_window(control_type="Edit")
edit.set_text("入力するコンテンツ")
# キーボード入力をシミュレート(特殊キーをサポート)
edit.type_keys("Hello{ENTER}World", with_spaces=True)
# 特殊キー:{ENTER} {TAB} {ESC} {DELETE} {BACKSPACE}
# 修飾キー:^ = Ctrl、% = Alt、+ = Shift
# 例:Ctrl+A = ^a、Ctrl+Shift+S = ^+s
インターフェースコンテンツの読み取り
dlg = app.window(title="記事本")
# テキストボックスの内容を読み取る
content = dlg.child_window(control_type="Edit").window_text()
# リストアイテムを読み取る
listbox = dlg.child_window(control_type="List")
items = [item.window_text() for item in listbox.children()]
# テーブルを読み取る
table = dlg.child_window(control_type="Table")
for row in table.children():
cells = [c.window_text() for c in row.children()]
print(" | ".join(cells))
待機と同期
# ウィンドウが表示されるまで待機
dlg = app.window(title="保存").wait("visible", timeout=10)
# ウィンドウが非表示になるまで待機
app.window(title="読み込み中...").wait_not("visible", timeout=30)
# コントロールが有効になるまで待機
dlg.child_window(title="送信").wait("enabled", timeout=5)
ウィンドウ管理
dlg = app.window(title="記事本")
# 最大化 / 最小化 / 復元
dlg.maximize()
dlg.minimize()
dlg.restore()
# 移動とサイズ変更
dlg.move_window(x=100, y=100, width=800, height=600)
# 前面に設定
dlg.set_focus()
# 閉じる
dlg.close()
スクロール
from pywinauto import mouse
# 指定座標で 3 行下にスクロール
mouse.scroll(coords=(500, 400), wheel_dist=-3)
# 5 行上にスクロール
mouse.scroll(coords=(500, 400), wheel_dist=5)
# コントロール内でスクロール(先にコントロール位置を取得)
rect = dlg.child_window(control_type="List").rectangle()
mouse.scroll(coords=(rect.mid_point()), wheel_dist=-3)
マウス座標操作
from pywinauto import mouse
# マウスを座標に移動
mouse.move(coords=(500, 300))
# 指定座標で左クリック
mouse.click(coords=(500, 300))
# 右クリック
mouse.right_click(coords=(500, 300))
# ダブルクリック
mouse.double_click(coords=(500, 300))
ドラッグ
from pywinauto import mouse
# ドラッグ:(100,200) から (300,400) へ
mouse.press(coords=(100, 200))
mouse.move(coords=(300, 400))
mouse.release(coords=(300, 400))
典型的なワークフロー
1. Desktop().windows() でオープンしているウィンドウをリストアップ
2. app.connect() でターゲットアプリケーションに接続
3. dlg.print_control_identifiers() でコントロールツリーを確認
4. コントロールタイプと属性に基づいてターゲット要素を特定
5. 操作を実行(click / set_text / type_keys / scroll)
6. 結果を読み取るか、操作完了を待機
セーフティルール
- 操作前に必ず HITL 確認:どのアプリケーションのどのコントロールを操作するかをユーザーに通知
- ユーザー文書を自動的に閉じない:保存されていない文書の close() を呼び出さない
- 管理者ウィンドウを操作しない:UAC ポップアップとシステム設定をスキップ
- 操作失敗時にスクリーンショットをフィードバック:ユーザーに現在のインターフェース状態を見せる
- 各操作ステップ間に 0.5 秒の間隔を設ける:UI が応答しないほど操作が速くなるのを回避
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- malue-ai
- リポジトリ
- malue-ai/dazee-small
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/malue-ai/dazee-small / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。