SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

Ctr+C/Ctrl+Vなどのショートカットを、マウス/タッチパネル操作で実行するツールを作ってみました

本日は12/10ですが、この記事はXAML Advent Calendar 2017の7日目の記事です。 遅くなってしまいすみません。。。

当初はFluent Design関係の話題を書くつもりでしたが、結局あまり関係ないテーマになってしまいました。

Ctrl+CやCtrl+Vといった、コピペなどのショートカットを、マウス操作やタッチ操作で実行できるツールを作ってみました。
正直、思い付きで作っただけなので、コードとしては特筆すべき点や面白みはあまりないかもしれません。。。
↓こんな感じのツールです。
f:id:minami_SC:20171210235823g:plain

作ったもの

コピー/ペーストや、Undo/Redoのコマンド実行用のボタンを、ウィンドウ最前面に表示するだけのツールです。

ソースコード一式は以下の場所に置いています。

releaseページに実行ファイル類をzipにして置いています。
コイツを展開して、exeファイルを適当なパスに配置して実行すれば使えます。

タブレットとかで、タッチパネルオンリーな操作してるときとかは、こいつをタスクバーにピン留めしておけば、こういうショートカットを実行したいときに便利なんじゃないかな、、、と思います。

やっていること

常に最前面に表示する、小さいツールウィンドウを作り、各種ボタンをクリックしたら、Ctrl+C/Ctrl+Vなどの各種ショートカットキーのキー操作をエミュレートしているだけです。

まぁ、言ってしまえばこれだけの処理なのですが、工夫したのは以下の点です。

  • ショートカットを実行しようとして、このツールのボタンをクリックすると、このツールがアクティブウィンドウとなってしまう。
    • ⇒Ctrl+C/Ctrl+Vなどのコマンドが、このツール自身に対して送信されてしまう。

ということで、SetWindowLong関数を使って、あらかじめこのウィンドウがアクティブにならないように設定しています。 Ctrl+Cなどのショートカットを実行するボタンをクリックしても、このウィンドウがアクティブにならないため、それまでユーザーが操作していたウィンドウに対して、各種ショートカットキーのコマンドを送信できるようになっています。

その他

一応、Fluent Design絡みの話題として。
このアプリはWPFで書いていますが、↓に書いた方法を使って、Fluent Design Systemのアクリル風なウィンドウにしてみました。

こういう、常に最前面に置いておきたいツールは、アクリル風なデザインは結構マッチするんじゃないかな、、と思います。