MultiShortcutの制作

2020-02-15 oss desktopapp windows

OGP

背景 

知人の話を聞いたところ、 どうやら複数のアプリケーションを同時に起動したい需要は有るようだ。

僕個人としては「バッチファイルを書けば良いのでは」と思ったが、 どうやら万人がバッチファイルを書けるわけではないらしい。

既存ランチャーソフトウェアも複数紹介してみたが、 所謂「フリーソフト」を使ったことがない層な様で、 取り扱いに困っている様だった。 (Vector/フリーソフト100/窓の杜や、フリーソフト収録雑誌の文化は何処へ…。)

新規性 (?) 

下手に煩雑にすると、既存のランチャーと同様となる。 本アプリケーションの動作はなるべく単純な物のみにしようと考えた。

以下の点を重視する。

  • 非常駐
  • GUI/設定レス

非常駐 

主記憶装置は貴重なハードウェア資源であり、常駐は多くの場合悪だ。 (近年潤沢なメモリを前提としたアプリケーションが増えているが) 避けられない場合を除き作るべきではないだろう。

キーショートカットのフックに関しては、Windowsのショートカット仕様を使う。

GUI/設定レス 

決して筆者がGUIやコンフィグパーサーを作るのが面倒なわけではない。 GUIや設定を作る程複雑なアプリケーションにするべきではないと考える為だ。

操作方法 

本アプリケーションのリリースをzip展開すると以下のようなツリーになる。

- Sample
  - +3s notepad.exe (ショートカット)
  - mspaint.exe (ショートカット)
- Set1
  - DropShortcutHere
- MultiShortcut(CreateShortcut).exe

MultiShortcut(CreateShortcut).exeは 起動時に同一ディレクトリ内ディレクトリの存在をスキャンし、 各ディレクトリに対して、 ディレクトリ名を自身のシェル引数に受け取るショートカットを作成する。

- Sample
  - +3s notepad.exe (ショートカット)
  - mspaint.exe (ショートカット)
- Set1
  - DropShortcutHere
- MultiShortcut(CreateShortcut).exe
- Sample (ショートカット)
- Set1 (ショートカット)

ショートカットが叩かれた時、 アプリケーションは引数にあるディレクトリ内をショートカットをスキャン、 実行する。

遅延起動 (2020-02-19追加) 

重量級アプリケーションを複数同時に起動しようとすると、 IOがSequencialではなくなり、ヘッドが忙しくなる事が予想される。 (どうやら最近のストレージにはヘッドがついていないようだが、 IO Controllerにも優しくしてあげよう。)

+[指定秒数]s がファイル名先頭にある場合、指定秒数後に起動する。

所感 

本当は自身のショートカットも入れ子に出来るようにしたかったが、 ループ検知の適切な実装を思いつかなかった為、現状入れ子を禁止している。

何か良い方法はないだろうか。

Special thanks 

Idea, Logo: @FUMI23_VRC