超シンプルなテキストエディタもだいぶ落ち着いてきたので、気分転換に新しいことをしてみます。(というか次にやりたいUndo/Redoが難しそうなので尻込みしているだけ)
タスクトレイに常駐して、クリップボードに保存したイメージをファイルとして逐次保存していくツールを作ってみたいと思います。
そもそもウィンドウが表示されないようなアプリケーションをどうやって作るのか、知らないところからのスタートなので、勉強になることもきっと多いハズ……!
動作イメージを考える
イメージを考えるって言葉的におかしくないですか?
世迷い言はさておき、作り始める前にアプリのイメージを固めておきます。今回やりたいことをまずは箇条書きにしてみましょう。
- 画面キャプチャをいちいちペイントに貼って~~で画像ファイルにするのが面倒!
- キャプチャとったら次々ファイルにしていってくれたら嬉しい。
- いちいち起動するのが面倒なのでホットキーでオン/オフ切り替えたい。
- 裏で動いていてほしい……タスクトレイに常駐させるのがいいかな?
最も解決したい困りごとは、太字にしてある一番目の理由です。
ブログで説明記事を書いていると特に思うんですけれど、説明用に撮ったキャプチャをいちいち画像にしていくのが非常に面倒くさいんですよね。普段の仕事で設計書に貼り付けるためにも画面キャプチャを撮ったりするので、解決できたら非常に嬉しいです。
なお、今回作成するアプリケーションは、主にSnippingツールの機能を拡張したものなので「SnipEx」という名前にします。
ちなみにこれを最初に載せてしまうとあれですが、完成品のgithubのURLをおいておきます。
SW設計をする
わからないところを事前調査する
何事もわからないことは事前の調査が必要です。必要とする機能を満たすために、実現可能性が不安だったのは次の点でした。
- ウィンドウを表示しない常駐型アプリケーションの作り方
- ホットキー押下でオン/オフを切り替える仕組み
- クリップボードのイメージを保存する方法
3つの問題に対して、実装方法を調べながらプロトタイプを作成してみました。
SWの概要を設計する
事前調査で作ったプロトタイプをもとにSWの概要を設計します。今回の作成はあくまで趣味の一環なので、ざっくりイメージを掴む程度にしておきます。はっきりいって正確さは何も考えていません。

クラス図のメソッドはこれで全てではなく、特に重要なものをピックアップして書いています。
それぞれのクラスの説明を書いていきます。
CTaskTrayAppクラス
タスクトレイ常駐型アプリに最低限共通の機能を実装したアプリケーションです。タスクトレイ常駐型としてのCreate()の実装や、タスクトレイ常駐型アプリがイベントを受け取る仕組みなどを用意しています。
CSnipExWndクラス
今回作成するアプリケーションの実装クラスです。MFCのプロジェクト作成時に作られるCXXXDlg.cppと同じ立ち位置のクラスです。タスクトレイ常駐型アプリ用のCtaskTrayAppクラスを継承しており、本アプリに必要な処理を追加しています。フックキーの登録や、クリップボードの監視、イメージの保存などの機能を追加で実装しています。
CSnipExAppクラス
CSnipExWndクラスを作成して利用するクラスです。MFCプロジェクト作成時に自動的に作られるクラスに修正を加えたものです。本来であればCXXXDlgクラスをCreate()して表示するのですが、代わりにCSnipExWnd クラスをInstance化するように修正します。
次回の予定
設計の概要ができたので、次回からコーディングに入っていきたいと思います。
コメント
[…] この記事で考えていたアプリケーションを開発する過程でホットキーによるイベント駆動を実装しました。 […]