Processing(Java)の実行ウィンドウの位置を制御してみた

目次

さあStayHomeをしよう

12月も終盤になりました。大掃除は既に終わったので、この休み中の残タスクは、年越しそばを食べて新年を迎えておせちを食べるのみとなりました。

しかし、今年度の外出はとても微妙な雰囲気なので、実家にも親戚の家にもいかず、年末年始の買い物にもいかず、初詣にもいかず、という体制を構築し、一週間セルフ鎖国することにしました。StayHome週間です。

こういう状況のため暇を持て余していたので、本日は兼ねてより解決したかった「Processing(Java)の実行ウィンドウが画面中央に出てコーディングの邪魔になってしまう問題」に取り組むことにしました。

実行ウィンドウが画面中央に出てコーディングの邪魔になってしまう問題とは

JavaモードのProcessingにおいて、実行画面を表示するディスプレイは設定で変更できますが、表示される位置を変更することはできません。実行画面は画面の中央に出てきてしまいます。

わたしは #つぶやきProcessing で画面サイズを720にして作ることが多いのですが、そうすると、エディターを右端に寄せても、実行画面がエディターに被ってしまいとても邪魔です。

しかたなく、エディターを縦に細長くしたりしていたのですが、いかんせん使いにくいので何とかならないかなぁと思っていました。

いろいろなツールも探してみたのですが、見つかったのは「表示されているウィンドウを移動させる」というもので、ウィンドウを勝手に検知して移動してくれるようなものはありませんでした。

まぁ暇だしちょっと調べてみるか…と思いまして、久しぶりにVisualStudioを立ち上げて、何かできないかやってみることにした、というのが本日の流れです。

文明の利器(.NETとWin32とWMI)

今回の問題を解決するには「アプリを常駐化する」「プロセスを監視する」「対象プロセスがあったらウィンドウの位置を変更する」という3つの関門があります。

アプリの常駐化には大昔にキーバインドをいじるツールを作った際にやったことがあるので、何とかなるかなぁと思っていました(UKeyツール

ウィンドウ制御はWin32を駆使すればできることはわかっているので、どうやってProcessingの実行画面のウィンドウハンドルを取るかが課題になりそうだなぁと思っていました。しかし.NETには、プロセス一覧から該当名のプロセスを探す機能(GetProcessesByName)があったので、楽にウィンドウハンドルを取れました。.NET便利すぎる。

ウィンドウハンドルが取れれば、Win32でやりたい放題できるので、こちらもクリアです。

あとはプロセスの監視ですが、なんとなくタイマーでの監視はしたくなくて、何かプロセスが立ち上がった際のイベントはないかなぁと調べていたら、WMIを使うと望むことができそうということがわかりました。(Win32_ProcessStartTrace

いろいろ便利なものが揃ってますねぇ。助かります。

Processingの実行画面のウィンドウ名は「java.exe」なので、とりあえずこれを監視して、上がってきたらウィンドウハンドルを取って画面の位置を変更する、ということを実装し、私の望む機能が完成です。

他のjavaアプリが立ち上がっても反応してしまうわけですが、私は使ってないので、まぁ、とりあえずこれでいいかな!

Githubへ

やりたいことが実現できることが分かったので、クラス分けとか、一応java.exe以外も見れるように設定ファイルを作るとか細かい整形をしてリリース物を作って、Githubに置きました。(uWin

しかし、草がまったく生えてないの酷いな…。Processingもここに入れれば大草原にできるけど、バージョン管理するものでもないし違うよなぁ…。

需要があるかわかりませんが、リリース物はこちらに置いてあります。実行には管理者権限と.NET Framework4.7.2以上が必要です。使用はあくまで自己責任でお願いいたします。

自分用なので、使ってみてぽちぽち改善はしていこうとは思います。用途的にはProcessingに限らずもっと汎用的に使えるはずですしね。

  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次