質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

pyautogui ウィンド外でのbind 操作の再生ソフト

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 415

Untitled_Sample

score 176

pyautogui ウィンド外でのbind方法
マウスやキーボードの操作を記録した後に再生できるソフトを作ろうと思ったのですが、
マウスなどの操作を管理が難しく、ウィンド内の操作しか記録できておりません。

現状では全体画面にした後に、タスクバーを入れ替えながら、操作を記録して居ます。
これをウィンド外でも検出できる様にするには、どうすれば良いでしょうか?

 環境

Linux Mint
リリース Linux Mint 19.1 Tessa 64 ビット
カーネル Linux 4.15.0-60-generic x86_64
MATE 1.20.1

記録コード

# クリック場所
Hacka_Doll=[]



# インポート
import pyautogui
import tkinter as tk


# マウスの座標表示
def timer():
    px,py = pyautogui.position() 
    label['text'] = '{},{}'.format(px,py)
    root.after(10, timer)


# 左クリックの検出 と Hacka_Doll 配列に追加
def click(event):
    print(
    pyautogui.position()
    )

    # クリック場所をHacka_Dollに追加
    Hacka_Doll.append([pyautogui.position()[0],
    pyautogui.position()[1]])

    #print(Hacka_Doll)

# 右クリックの検出 と Hacka_Doll 配列に追加
def click02(event):
    print(
    pyautogui.position(),'Button-3'
    )

    # クリック場所をHacka_Dollに追加
    Hacka_Doll.append([pyautogui.position()[0],
    pyautogui.position()[1],'Button-3'])



# キーボード イベントを検出 Hacka_Doll配列に追加
def onKeyPress(event):
    print(
    event.char
    )

    Hacka_Doll.append([event.char])


# 基本情報
root = tk.Tk()
root.title("Tkinter")

#x,y=pyautogui.size()[0],pyautogui.size()[1]
#print(x,y)
# サイズ
root.geometry("200x200")
# うぃんどぉを透過
root.wait_visibility(root)
root.wm_attributes('-alpha',0.5)

# キーの監視
root.bind("<Button-1>", click)
root.bind("<Button-3>", click02)
root.bind('<KeyPress>', onKeyPress)


# マウス座標の表示 と 配置する場所
label = tk.Label(root,text="size",font=("",20))
label.place(x=10, y=10)
label.update()

# 更新
timer()
# 終了するまでループ
root.mainloop()



# デバッグ表示
print("\n")
print( Hacka_Doll)





# 記録した操作をcsvに出力

import csv
data=Hacka_Doll
#data = [['りんご', 'みかん'], ['いちご', 'メロン']]
with open('data.csv', 'w') as file:
    writer = csv.writer(file, lineterminator='\n')
    writer.writerows(data)

再生コード

# 作成したdata.csvを読み込み
import csv
csv_file = open("data.csv", "r", encoding="ms932", errors="", newline="" )
f=csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)


# いんぽーと
import pyautogui
# 操作の再生隔離を管理したい いんぽーと
from time import sleep



# 読み込んだリストの再生 処理

for i in list(f):
    # デバッグ表示
    print(*i,len(i))
    # 再生隔離
    sleep(0.8)

    # マウスの左クリック処理
    if len(i)==2:
        pyautogui.click(int(i[0]),int(i[1])) #クリック
    # マウスの右くりっく処理
    elif len(i)==3:
        pyautogui.rightClick(int(i[0]),int(i[1])) #右クリック
    # キーボードのキー入呂処理 1つずつ
    elif len(i)==1:
        pyautogui.typewrite(i)
    # キーボードのエンター処理 不安定
    elif len(i)==0:
        pyautogui.typewrite(['enter'])
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

おすすめライブラリ

  • https://pypi.org/project/keyboard/
  • https://pypi.org/project/mouse/

マウスの記録&再生ならこんな感じ。

import mouse

events = mouse.record()  # 右クリックするまで記録
mouse.play(events)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/03 18:59

    ImportError: You must be root to use this library on linux.
    sudo権限が無いと実行できない様ですが、ソースコードから権限を与える記述は
    どの様にすれば良いでしょうか?

    キャンセル

  • 2019/09/03 19:23

    「ソースコードから権限を与える記述」というのがちょっと理解できないです。「sudo python3 スクリプト名.py」という様に実行するのとは違うんでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る