ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

KCSSの設定:ホットキー

KCSSは、ゲームプレイ中にキーを押すことでスクリーンキャプチャできます。

設定ダイアログの「ホットキー」タブでは、このスクリーンキャプチャに使うキーの設定や、画像ファイルの保存先、ファイルの命名規則を設定できます。

f:id:donadonasan:20181019234220p:plain

ホットキーの設定

設定には、1回キーを押すとスクリーンショットを1枚だけ撮るシングルショットの設定と、1回キーを押すとスクリーンショットを複数枚撮るマルチショットの設定の2種類があります。以下では、設定の基本となるシングルショットの設定について説明後、マルチショットの設定について説明します。

1. シングルショットの設定

f:id:donadonasan:20181105224025p:plain

シングルショットの設定

1.1 ホットキーの設定

ホットキーの設定では、スクリーンショットを撮るのに使うキーを設定します。「入力欄」の白いエディットボックスをクリック後、使いたいキーを押します。ShiftやAlt、Ctrlキーも使えます。F12キーはWindows側の事情で使わないようにお願いします。

f:id:donadonasan:20181020082815p:plain

キーを入力したら、「変更」ボタンを押して確定してください。シングルショット撮影をしない場合は入力欄が「なし」のままで「変更」ボタンを押してください。

f:id:donadonasan:20181020083030p:plain

1.2 保存先の設定

スクリーンショットを保存するフォルダを指定します。「参照...」ボタンをクリックして、指定してください。「保存先」エディットボックスを直接編集してもOKです。

f:id:donadonasan:20181020165427p:plain

1.3 命名規則

ファイル名の名付け方を指定します。保存する際には%date%や%time%といったメタ文字は20181103(保存時の日付:2018年11月3日)や120410(保存時刻:12時4分10秒)といった数値に置き換えられます。他に使えるメタ文字は、「メタ文字一覧」ボタンで確認できます。また、プレビューボタンを押すことで、現在の命名規則でどのように置き換えられるか確認できます。

画像の拡張子(.png等)は設定不要です。拡張子が指定されていない場合は保存タブでの設定に従い、自動で拡張子を付けます。

命名規則には、フォルダ名も含めることができます。これにより、日付ごとにフォルダを自動で分けることができます。

1.4 プレビュー

現在の命名規則に基づき、ファイルがどのように名付けられるか現在の日時に基づき表示します。

2. マルチショットの設定

マルチショットの設定は、シングルショットと同様の設定に、「設定名」「メタ文字一覧」「押下前」「押下後」「保存速度」を加えたものになっています。

f:id:donadonasan:20181105224224p:plain

マルチショットの設定

2.1 設定名

KCSSは、複数のマルチショット設定を同時に使うことができます。設定名では、設定するマルチショット設定を切り替えることができます。設定は、デフォルトでは3組まで保存できます。増やしたい場合は、KCSS.iniのMaximum multi shot noの値を変えてください。変え方は、本ページのサポート外とします。

2.2 メタ文字一覧

命名規則に使えるメタ文字の一覧を表示します。本稿執筆時点で使えるメタ文字は以下のとおりです。命名規則にこれらメタ文字を使うと、ファイル保存時にメタ文字部分が日時を表す数値に置き換わります。

f:id:donadonasan:20181105230636p:plain

使用可能なメタ文字一覧

2.3 ホットキー、保存先、命名規則

シングルショットの設定と同じです。詳細はそちらを御覧ください。

2.4 押下前

マルチショットで設定したキーを押すと、キーが押される前の画像も保存できます。「押下前」には、キーが押される前の画像を何枚保存するかを指定します。保存される画像の時間間隔は、キャプチャタブで設定できる「取り込み周期」に、ホットキータブで設定できる「保存速度」を掛けたものになります。詳細は「保存速度」を参照してください。

2.5 押下後

マルチショットで設定したキーを押すと、キーが押された後の画像も保存できます。「押下後」には、キーが押された後の画像を何枚保存するかを指定します。保存される画像の時間間隔は、キャプチャタブで設定できる「取り込み周期」に、ホットキータブで設定できる「保存速度」を掛けたものになります。詳細は「保存速度」を参照してください。

 2.6 保存速度

保存速度は、マルチショットにて保存する画像の時間間隔に関する設定です。マルチショットで設定したキーを押すと、KCSSはキーが押された前後の画像を一定の時間間隔で保存します。この間隔は、キャプチャタブで設定できる「取り込み周期」に、「保存速度」を掛けたものになります。このうち、「取り込み周期」はKCSS全体で共通なものとなっていますが、「保存速度」はマルチショット設定ごとに異なる値にすることができます。そのため、以下のような運用ができます。

  • Ctrl+Alt+1を押すと、100msごとにスクリーンショットをキー押下前・押下後それぞれ10枚ずつ保存する(撮りたい!と思ったシーンを連続撮影)
  • Ctrl+Alt+2を押すと、1000msごとにスクリーンショットをキー押下前10枚、押下後2枚保存する(撮り逃した!と思ったシーンを10秒前まで遡って保存する)

KCSSの設定:キャプチャ

設定ダイアログのキャプチャタブでは、キャプチャ対象やキャプチャ領域に関して設定できます。

f:id:donadonasan:20181104181445p:plain

キャプチャタブ

■ 項目一覧

1. キャプチャ対象の指定(窓へドラッグボタン)

f:id:donadonasan:20181104183851p:plain

キャプチャ対象の指定(窓へドラッグボタン)

 「窓へドラッグ」ボタンをキャプチャ対象へドラッグすることで、キャプチャ対象を指定できます。

f:id:donadonasan:20181013001924g:plain

キャプチャ対象へドラッグして指定

指定後、ソフト名が表示され、認識状態に「ウィンドウをロックオン」と表示されていることを確認してください。

f:id:donadonasan:20181104185341p:plain

キャプチャ対象の指定に成功した例

2. X, Y, 幅, 高

X, Y, 幅, 高はキャプチャ対象ソフトのどの領域を保存するかを指定する設定です。

X, Yにはキャプチャする領域の左上の位置を、幅、高には領域の幅と高さを指定します。提督業は忙しい!の場合はデフォルト設定でOKですが、それ以外のソフトや艦これ以外のゲームの場合は設定する必要があります。値の決め方は、以下を参照してください。

KCSSでキャプチャする領域の座標や幅、高さを調べる方法 - ドナドナされるプログラマのメモ

3. 取込周期

取り込み周期は、KCSSが対象ソフトのスクリーンキャプチャをする基本周期の設定です。KCSSはこの周期で常時対象ソフトの画面を取り込むことで、マルチショット用のキーが押されるよりも前の画像保存を可能にしています。これを小さくするほど、より細かく取り込みます。なお、10より小さな値は設定できません。

4. デスクトップからキャプチャ

キャプチャ対象のソフトによっては、キャプチャした画像が真っ黒になることがあります。これは画像を表示するのにハードウェアアクセラレーションを使っていたりDirectXを使っていたりする場合に起きます。このような場合は、ハードウェアアクセラレーションをオフにするか、「デスクトップからキャプチャ」にチェックを入れます。

このチェックを入れると、KCSSはディスプレイに表示されている画像のうち、指定された領域の画像を保存するようになります。そのため、ゲーム画面が他のウィンドウの後ろに隠れていると、スクリーンショットには他のウィンドウも写り込んでしまいます。ご注意ください。

5. ウィンドウロスト後の自動捜索

KCSSはロックオンしたウィンドウから常時スクリーンキャプチャしているのですが、ロックオン対象のウィンドウが閉じてしまうとロックが外れてしまい、ウィンドウを再び開いてもそのままになってしまいます。再ロックオンするためには本来は「窓へドラッグ」ボタンを使って再度ロックしなければならないのですが、このチェックを入れると自動的に再ロックオンするようになります。また、KCSS起動時に自動でロックオンしようとします。

再ロックオンで誤認識が生じる場合は、このチェックを外してください。

6. ウィンドウロスト時にダイアログを表示

ロックオン対象のウィンドウを見失ったときに警告ダイアログを表示します。

7. デスクトップからキャプチャ時は起動時に再ターゲット

「デスクトップからキャプチャ」にチェックを入れる状況では、「ウィンドウロスト後の自動捜索」機能がうまく働かずに誤ったウィンドウをロックすることがあります。これに気づかずスクリーンキャプチャすると不幸なことになります。そのような場合は、このチェックを入れて、KCSS起動時に必ず手動でターゲットを指定するようにしてください。

KCSSをとりあえず使ってみる

0. 目次

1. 設定する

初めて起動すると、自動的に設定画面が開きます。

f:id:donadonasan:20181014154054p:plain

設定画面(キャプチャタブ)


1.1 キャプチャ対象を設定する

キャプチャタブにある「窓へドラッグ」ボタンを、キャプチャしたい画面へドラッグ&ドロップします。

f:id:donadonasan:20181013001924g:plain

対象窓へドラッグ&ドロップ

次に、キャプチャする領域の位置やサイズを設定します。X, Yには取り込みたい場所の左上座標を(ウィンドウ左上が(0, 0)です)、幅, 高には取り込みたい領域の幅と高さを設定します。デフォルトのX・Yには「提督業も忙しい!」用の値が、幅・高には艦これのデフォルトサイズの値が設定されています。ブラウザで艦これをプレイしている場合は、領域自動認識ボタンで自動設定できる場合があります。

f:id:donadonasan:20181014155222p:plain

1.2 スクリーンキャプチャに使うキーと保存先、保存ファイル名を設定する

KCSSは、ゲームプレイ中にキーを押すことでスクリーンキャプチャできます。

設定ダイアログの「ホットキー」タブでは、このスクリーンキャプチャに使うキーの設定や、画像ファイルの保存先、ファイルの命名規則を設定できます。

スクリーンキャプチャを1回だけする「シングルショット」、複数回する「マルチショット」それぞれについて画像の保存先を指定してください。

f:id:donadonasan:20181020165427p:plain

シングルショットの画像保存先を設定する

f:id:donadonasan:20181103215750p:plain

マルチショットの画像保存先を設定する

 

他にも色々と設定はありますが、ここまでやれば取り敢えず使えます。早速OKボタンを押して、キャプチャしてみましょう。

f:id:donadonasan:20181103220157p:plain

OKボタンを押して設定を確定する

2. スクリーンキャプチャを撮る

2.1 シングルショットを撮る

CtrlキーとAltキーを押しながらSキーを押してください。これで、シングルショットの保存先に指定した場所に画像が保存され、またKCSSに保存画像のプレビューが表示されたはずです。なお、撮影に使うキーは変更可能です。TODO:設定:ホットキーへのリンク

f:id:donadonasan:20181103221459p:plain

指定した場所にスクリーンキャプチャ画像が保存される

f:id:donadonasan:20181103221315p:plain

保存画像のプレビュー

もし以下のように真っ黒な画像が保存されてしまった場合は、TODO:設定:キャプチャの「デスクトップからキャプチャ」を参照してください。

f:id:donadonasan:20181103222744p:plain

キャプチャ失敗(真っ黒な画像)

2.2 マルチショットを撮る

CtrlキーとAltキーを押しながら1(Qキーの上にあるほう)を押してください。これで、マルチショットの保存先に指定した場所に画像が保存され、またKCSSに保存画像のプレビューが表示されたはずです。デフォルト設定では、キーを押す前の画像が10枚、押したあとの画像が10枚の計20枚が保存されます。撮影に使うキーはシングルショットと同様に変更可能です。TODO:設定:ホットキーへのリンク

f:id:donadonasan:20181103224344p:plain

マルチショット撮影例

3. 色々設定したい!

キャプチャ対象に関する設定:TODO:リンク:KCSSの設定:キャプチャ

シングルショットやマルチショットに関する個別設定:TODO:リンク:KCSSの設定:ホットキー

 画像変換や保存に関する設定:TODO:リンク:KCSSの設定:保存

その他、あったら便利そうな設定:TODO:リンク:KCSSの設定:その他

艦これスクリーンスナイパー(KCSS)について

艦これスクリーンスナイパー(KCSS)って何?

艦これスクリーンスナイパー(以下KCSS)は、ゲームのスクリーンキャプチャをキー操作により一枚、または複数枚連写で撮るソフトです。また、過去に遡ってキャプチャできるため、取り逃しも防げます。艦これ用にチューニングしていますが、他のソフトにも使えます。

f:id:donadonasan:20181103221315p:plain

ソフト画面例

f:id:donadonasan:20181103224344p:plain

連射撮影結果の例

特徴は?

  • 他の作業をしている最中でも、キー入力一発でスクリーンショットが保存できる
  • ゲーム画面が隠れていてもスクリーンショットを保存できる(一部制限あり)
  • キー入力前後のスクリーンショットも保存できる(マルチショット時)
  • マルチショット用のキーを連打しても大丈夫
  • マルチショットの保存枚数や保存周期、キーを複数組設定できる
  • ウィンドウがコンパクトで場所を取らない
  • マルチスレッド処理で保存するので保存が早めかも

早速使ってみたい!

最新バージョンは以下からダウンロードできます。

艦これスクリーンスナイパーの詳細情報 : Vector ソフトを探す!

取り敢えず使うための手順は以下にあります。

KCSSをとりあえず使ってみる - ドナドナされるプログラマのメモ

細かい説明

細かい説明は以下にあります。

KCSSメイン画面の説明 - ドナドナされるプログラマのメモ

KCSSの設定:キャプチャ - ドナドナされるプログラマのメモ

KCSSの設定:ホットキー - ドナドナされるプログラマのメモ

KCSSの設定:保存 - ドナドナされるプログラマのメモ

KCSSの設定:その他 - ドナドナされるプログラマのメモ

Visual studioのC++で実行ファイルのプロパティにビルド番号を埋め込む

Visual studio, 便利なのに、なぜかビルドしたファイルのバージョンプロパティにビルド番号を埋め込めない。そこで、下記にあるIncrementBuildを導入した。

Build Incrementing for Visual Studio C++ Projects – Fooling Around

動作原理

  1. ビルド後のイベントでツールを実行。
  2. ツールはツール用設定ファイルに記録されているビルド番号を参照し、ビルドしたファイルのプロパティに番号設定。
  3. ツールはツール用設定ファイルのビルド番号をインクリメント。

注意事項

バージョン情報、というかプロパティは言語ごとにある。このソフトはデフォルトでは英語に書き込んでしまうため、日本語プロパティに書き込む場合は.iniのコメントを一箇所外し

Language=1041

とする必要がある。なお、この数値は下記に記載のLocale Identifierの10進数値である。

Language Identifier Constants and Strings | Microsoft Docs

CInfoProgressCtrlの更新(プログレスバー伸長速度を切替可能に)

CInfoProgressCtrlはCProgressCtrlを継承することでプログレスバーの上に文字を表示できるようにしているのだが、このプログレスバーの欠点の一つに、バーを伸ばす速度が制限されている、というのがある。バーが縮む方向ならば瞬時に縮むので、これを利用して

SetPos(a+1);

SetPos(a);

というコードで回避するのが一般的である。ただし、これではaがRangeの上限に等しかった場合に対応できない。a+1まで伸ばせないからだ。これに対処するには、

SetRange(0,a+1);

SetPos(a+1);

SetPos(a);

SetRange(0, max);

というようなコードを書けば良い。しかし、毎回これを書くのは面倒なのでCInfoProgressCtrlを書き換え、自動でこれをできるようにした。

今回、Publicな関数としてbool SetSmoothMove(bool smooth)を追加した。これの引数smoothにfalseを設定すると、上記処理を自動でするようになる。なお、初期値はtrueなので既存のコードへの影響はないはず。

gist3a185c716e3bff2da938623bf844cdd9

ブログをやっていてよかったこと

最近、ブログをやっていて良かったなーと思うのは、過去に調べたことが記録されていること。ブログの定義から、当たり前なんだけど。今作っているプログラムにしても、過去のブログ記事が非常に役立っている。Unicode<->マルチバイトの変換とか。