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

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

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<->マルチバイトの変換とか。

ProgressCtrlの上に文字を表示

プログレスバーの上に文字を表示する必要が生じたのだが、標準のCProgressCtrlは文字表示機能が無い。どうも、Windowsのデザインガイドではテキストを表示するな!となっているようだ(1次情報未確認)。そこで、他の方が作ったものがないかなーと調べてみるも、バー部分も独自実装とするものしかなかった。そこはWindowsのものを使いたかったんだけどなあ。仕方ないので、reidphoaさんのCInfoProgressBarをベースに、バー表示をWindowsが担当するように改造した。SetWinowTextで表示する文字を設定可能。

Add text on progress control