■デスクトップ上に散逸したドライブアイコンを所定位置に再配置する

【背景】macOSでディスプレイをoff/onしたときにドライブアイコンが

    所定位置から他の不定位置へ散乱します。

 例:デスクトップ右上隅近傍赤枠位置にドライブアイコンを配置していますが、

  ディスプレイを切って、再度つけると↓このように移動しており、

  かつ法則性を見いだせません。毎度手動でドラッグして戻しています。


【目標】

 pythonでドライブアイコンを所定位置へ再配置する。

【コード内容】
 ・デスクトップ上にて、所定フォルダ内のpngと同じ画像の位置を得る
 ・得た位置にマウスカーソルを移動
 ・所定位置へアイコンをドラッグ

【事前準備】
 1:ドライブアイコンを背景が写り込まないようにスクリーンショットし、

   png形式で所定フォルダに格納。
 2:ドライブアイコンを所定位置に置いてから下記コード中の所定フォルダと

   png名を修正し、かつ、pag.dragToの行をコメントアウトし、
   コードを動作させ、所定位置のXYを記録。
 3:コード中の所定位置を修正。

【注意点】
 ・画像位置抽出にはデスクトップ全体のスクリーンショットが用いられる。
  従い、ねらいのアイコンがウィンドウなどに隠れていると位置検出できない。
 ・アイコン位置検出のためのpng画像にデスクトップ背景が映り込むと

  位置検出できない場合があります。
  ドライブ名称を含めず、かつアイコンの内側をスクリーンショットするとよい。

【コード】
#---------------------------------------------------------------------------
# for macOS ,at reopen display ,relocate icon_drive_regular
# library:pyautogui install: pip install pyautogui 
# At first set icons at original position,and run this code, and see x,y
# Set png_icon in dir_icon_search
# png_icon has no backgroud. if has it,searching png_icon will be fail

import pyautogui as pag
print("icon_drive_regular relocation")
# search location of icon_drive_regular

 

#デスクトップ上のpng_icon_desktopフォルダの中のpng_icon_drive_regularフォルダにアイコンのpng画像を格納してある。
dir_icon_search="/Users/*****/Desktop/png_icon_desktop/png_icon_drive_regular/"

 

#アイコン名、所定位置をリストのリストに定義

lists_name_icon_search = [
    ["kabamini3.png",3574,32],
    ["KH40-1TM.png",3574,160],
    ["KX500.png",3575,292],
    ["KX480.png",3574,424]
    ]
 

#自動再配置

for list_name_icon_search in lists_name_icon_search:
    name_icon_search = list_name_icon_search[0]
    _search = dir_icon_search + name_icon_search
 

    pos_x,pos_y = pag.locateCenterOnScreen(png_search)
    print ("icon ",name_icon_search,"was found at x=",pos_x," y=",pos_y)
    pag.moveTo(pos_x, pos_y)
    pos_x_destination = list_name_icon_search[1]
    pos_y_destination = list_name_icon_search[2]    
    pag.dragTo(pos_x_destination,pos_y_destination, 0, button='left')
print("icon_drive_regular relocation end")
#-----------------------------------------------------------------------

 

■結果

・コード起動すると1秒程度毎にポンポンとアイコンが所定位置へ戻ります。

・たまにドライブアイコンが他のアイコンの下に入ることがありますが、

 そのときは手動で戻します。

・VScodeからコードを起動していますが、バッチ化してデスクトップに

 置いておけばよいと思います。

  ↓

pythonコードをrelocation_icon_drive.pyでデスクトップに置き、

テキストエディタで「relocate_icon_drive.command」というファイルを作り、

中身を下記にしてデスクトップに置く。

ーーーーーーーーーーバッチファイルーーーーーーーーーーーー

cd desktop
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 /Users/*****/Desktop/relocation_icon_drive.py

 

このバッチファイルをダブルクリックすると、コードが起動する。

起動したらターミナルが立ち上がるが、このときドライブアイコンに重なることがあるので、事前にターミナルウィンドウが他の領域で開くようにしておく。

また、セキュリティ関連の警告が出ることもあるので、システム設定を警告に応じて修正する。一度やっておけばあとはOKになる。

ターミナルはよく開くので、ターミナルを閉じるときが勝負。

 

■PyAutoGUI関連参考URL

PyAutoGUIとは?できることや使い方を解説
https://saas.n-works.link/programming/python/what-is-pyautogui

作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】
https://qiita.com/suipy/items/a50c95293126c41bcca0

PyAutoGUIの使い方~Pythonで画面操作を自動化する方法~
https://challenge-pg.com/2023/02/25/pyautogui/#index_id9

Pythonで特定のソフトをアクティブにする方法
https://qiita.com/Romane/items/9f70dbd4313ca6bf9fff

PyAutoGUIで指定ウィンドウの中で画像検索
https://ict-worker.com/skill/python-rpa/pyautoguiで指定ウィンドウの中で画像検索.html

ウィンドウをアプリ名指定しアクティブ切り替えする簡単な方法(Windows)
https://pentan.net/python-windowactive/

Pythonでタイトルと部分一致したウィンドウを取得するには?(PyGetWindow)
https://オンライン将棋教室・香.com/instructor-blog/221001how-to-get-window-with-partial-match-with-title-in-python/

画面上の指定範囲から文字認識
https://zenn.dev/watakarinto/articles/903dcaad27f8ba

PyAutoGUIによる画像認識の精度を上げる方法
https://self-development.info/pyautoguiによる画像認識の精度を上げる方法/

以上