LoginSignup
5
3

More than 3 years have passed since last update.

PyAutoGUIでリモートワークサボり隊

Last updated at Posted at 2020-07-27

本日の困りごと

リモートワーク中、ベッドでゴロゴロしてると会社のパソコンが一定時間でスクリーンセーバーかかってSkypeとかも退席中になるやん?なんか定期的にマウス動かすとかでなんとかできひんのかな(原文ママ)

経緯

元クライアントとLINE(仕事しろ)。
折角のリモートで仕事サボっててもバレないのに、厄介なのが「離席中」表示とスクリーンセーバーだという。
私の困りごとは「まさかLINEで元クライアントからそんな相談受けると思わなかった」コトです。ほんと、LINEのトーク画面貼り付けようか迷いました。

ぱ「なんか売ってるじゃないですか」
客「会社PCにそんなの入れられないでしょうが」
ぱ「えー。じゃあ…そのPCってRPA検証用とかでPython入ってませんでした?」
客「おー!よく知ってるね!」

…というわけでPythonで解決させた話です(仕事しろ)。

環境

OS:Windows10
Python3.X

今回の解決方法

以下のようなサンプルコードをお渡ししました。
ここではsample.pyというファイルとしておきましょう。

import pyautogui as pg
import time
try:
    while True:
        time.sleep(180)
        pg.moveTo(100, 100, 0.5)
        pg.moveTo(100, 200, 0.5)
        pg.moveTo(200, 200, 0.5)
        pg.moveTo(200, 100, 0.5)
except KeyboardInterrupt:
    print('仕事しよ')

あとはコマンドプロンプトを起動してPythonを実行するだけ。

python sample.py

さて。簡単にコードの解説をしておきます。
メインの処理はこの5行。

    time.sleep(180)
    pg.moveTo(100, 100, 0.5)
    pg.moveTo(100, 200, 0.5)
    pg.moveTo(200, 200, 0.5)
    pg.moveTo(200, 100, 0.5)

「180秒おきにマウスをぐるっと一周まわす」ということをさせています。
time.sleepは「○秒処理を停止させる」関数です。
利用している端末のスリープまでの時間に合わせてカッコ内の秒数を調整しましょう。
(スリープまでの時間より少し短めに設定しています)
pg.moveToはマウスを指定した座標へ動かす処理。サンプルでは0.5秒かけて動かしています。

このメイン処理を

    while True:

と書くことで、永久ループさせています。
一度実行した後は、ずっとこの処理を走らせておくという悪の所業です。
…とはいえ、Skypeに応答しないといけない時だったり、「やっぱり仕事しようかなー」と思うこともあるはずですし、何より業務終了後はパソコンをシャットダウンしないといけないことでしょう。
なので、この永久ループを以下のコードで囲っています。

try:
## (中略) ##
except KeyboardInterrupt:

try/except例外処理を利用し、[Ctrl]+[c]のキーボード入力をキャッチして永久ループを抜けるようにしています。
仕事に戻りたい処理を終了させたい時は[Ctrl]+[c]を押す…というわけです。

参考文献

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

moveTo周りはこのオライリー本のサンプルコードを利用しています。18章辺りをご覧ください。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3