LoginSignup
5
0

More than 5 years have passed since last update.

アプリケーションの同時起動制限にパッチをあてて対処する

Posted at

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になります。

SnapCrab_NoName_2019-3-25_17-55-50_No-00.png

ASCIIコードを検索可能なフォーマットにする

これに00を挟んで、46 00 34 00 38 00 45 00 38 00 36 00 44 00 33としたものがバイナリ上に存在します。

SnapCrab_Stirling - Greenshotexe_2019-3-25_17-55-21_No-00.png

Mutexを書き換える

マッチした部分のどれか1バイトを書き換えるだけで作業は終了です。

5
0
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
0