Windowsでスクリーンショットを撮るツールとしてGreenshotを使っています。HighDPIの問題など、Windowsの大きな仕様変更がつらみになり、メンテされずに死んでいくツールが多い中、Windows 10でもいい感じに動いてくれます。
ただ一つ問題があって、このツールではショートカットAではフォルダAに画像を保存、ショートカットBではフォルダBに画像を保存、などと細かなコンフィグを行うことができません。
それぞれ別のコンフィグを持った複数プロセスを同時に実行できればこの問題を解決できそうですが、アプリケーション側の制約により、そうすることはできません。
ひとまず真っ当な方法では対処できなさそうなので、力技でどうにかしましょう。
GreenshotはOSSなので当該箇所を書き換えて独自にビルドしてもいいのですが、お手軽な方法はバイナリを書き換える方法です。
Mutexを指定してる箇所を探す
greenshot/Startup.cs at develop · greenshot/greenshot
var applicationConfig = ApplicationConfigBuilder
.Create()
.WithApplicationName("Greenshot")
.WithMutex("F48E86D3-E34C-4DB7-8F8F-9A0EA55F0D08")
.WithCaliburnMicro()
.WithoutCopyOfEmbeddedAssemblies()
それっぽいですね。
文字列をASCIIコードにする
先頭のF48E86D3
をASCIIコードにすると46 34 38 45 38 36 44 33
になります。
ASCIIコードを検索可能なフォーマットにする
これに00を挟んで、46 00 34 00 38 00 45 00 38 00 36 00 44 00 33
としたものがバイナリ上に存在します。
Mutexを書き換える
マッチした部分のどれか1バイトを書き換えるだけで作業は終了です。