top
[Index(X)][Back(B)]

SCOrPio!

作品情報

作品名:
SCOrPio!(スコーピオ)
作者名:
はりまお
制作環境:
Core i7-4770 3.40GHz + 8GB RAM
Windows 10 Pro (64bit, 21H1)
開発言語:
Visual Studio Community 2015 (Update 3)
Visual Basic 2015
Windows フォーム アプリケーション
動作環境:
.NET Framework 4.5.2
高DPI非対応
形態種別:
フリーソフトウェア(ソース同梱)

画面写真

ビューア
ビューア

出張

Vectorさんにも掲載しています。(2016年05月18日〜)

ファイル

"SCOrPio.zip"・・・[ダウンロード] (配布ファイル更新日:2025年01月27日) / [Vector](Ver.1.3.1.4:2016年05月08日)
名前バージョン概容
SCOrPio.exe1.3.1.5実行ファイル
SCOrPio.exe.configアプリケーション構成ファイル
Readme.txt説明文(本文)
CreateNote.txt制作履歴
Lupe_Wormholeソース コード等

アプリケーションによって生成されるファイル
名前概容
Resume.xml終了時の状態を記憶
Setting.xml設定を保存

概要

この SCOrPio! は、『ある部分を拡大して観ること』ではなく、『マウスカーソル(マウスポインタ)をピクセル単位で操ること』に主眼を置いたルーペです。

拙作“HELuPER!”の制作で得た知見を基に再構成したら、シンプルでコンパクト*1な『能動的ルーペ』に生まれ変わりました。
必要な時にだけ呼び出して、目指す座標に狙いを付けるだけで、マウスカーソルを移動(ワープ)してもらえる。そんな、ペイント系グラフィックツール等で細かい作業をする際の、心強いお供です。

*1) 作者調べ。HELuPER! に対するコード・構成・使い方・実行ファイル容量等(外形は含まず)についての感覚比。
※作者は、ペイント系と言えば Paint.NET ぐらいしか使わないので、他のツールでもお供できるのか知る由もありません。よほど特殊な実装でなければ問題ないと思いますが、使えなかったらごめんなさい。諦めてください。

インストール・アンインストール

SCOrPio! を使用するためには、『.NET Framework 4.5.2』が必要です。【○参考・引用文献/拝借物】に挙げたサイトを参考に、導入しておいてください。

インストールは、適当な場所に作成したフォルダに、ダウンロードした圧縮ファイルを解凍してください。

アンインストールは、解凍先のフォルダを丸ごと削除してください。レジストリの変更や他フォルダへのファイル操作を、一切行っていません。

アップデートは、全てのファイルを上書きしてください。設定・記録ファイルに関しては、互換性を保証していないため、上手く引き継げない場合は再設定を要します。

セキュリティソフトについて

解凍時や実行時に、セキュリティソフトによってはマルウェアだと判断され、中断されたり削除されたりする場合があるかもしれません(AVGでの報告が1件有り)。
そのような場合は、各セキュリティソフトの説明に従い、自己責任において、本作をスキャン対象外に設定してください。

使い方 基礎編

起動と終了

"SCOrPio.exe"を実行すると、タスクトレイ(通知領域)にアイコンタスクトレイのアイコンが登録され、使用できるようになります。

終了するには、タスクトレイのアイコンを右クリックしてコンテキストメニューを開き、終了を選択してください。常駐したままOSを終了してもかまいません。

基本

“ビューア”を呼び出し、“ビュー”内の“照準”をお目当ての座標に合わせ、ビューアを隠すとマウスカーソルがワープする。これが、SCOrPio! を使う基本的な流れです。

ビューア

ビューアは、マウスカーソル周辺の拡大画像、座標や色の情報、その他の機能を提供します。

呼び出しキー(既定ではAlt+Ctrl)を押すと現れ、放すと隠れます。
タスクトレイのアイコンを左クリックするか、コンテキストメニューの応答停止で、一時的に呼び出しキーを無効にできます。再度クリックすれば有効になります。

ビューアのレイアウトは、以下のようになっています。

ビューアのレイアウト
ビューアのレイアウト 基点座標表示の基点(0,0)となる座標
撮影場所呼び出し時のマウスカーソル座標
照準位置照準を合わせているピクセルの座標
[基点→照準(撮影場所→照準)]
ビュー撮影場所周辺を拡大した画像
ピクセル色基数切替スイッチとA,R,G,B値
倍率調整スライダとズームボタン
コマンド ボタン様々な機能ボタン

ビューと照準

倍率調整
倍率調整部

ビューは、撮影場所周辺の画像を拡大して表示します。
拡大される範囲は、ビューアのウィンドウ サイズを変更して調整します。
拡大する倍率は、倍率調整のスライダで調整します。その上下にある ズーム イン / ズーム アウト ボタンで、現在値の2倍または1/2倍にすることができます。ただし、その結果が上限値を超えたり下限値を割ってしまう場合は、使用できません(ズーム ストッパ機能)。

ビュー内で左クリックすると、その位置を撮影場所にできます(ビューアを出し直すのを省力化)。
また、中(ホイール)クリックで、その位置を基点にできます(撮影場所移動とコマンド ボタンの基点設定を省力化)。

ビューには照準があり、ビュー内でのマウスカーソルの動きに連動します。マウスカーソルがビューから出ると、撮影場所(中央)に戻ります。
照準が合っているピクセルに相当する“基点から見た座標”と“撮影場所から見た座標”が、照準位置に表示されます。

呼び出しキーを放してビューアが隠れると同時に、照準で指し示した座標へ、マウスカーソルがワープします。


ピクセル色

ピクセル色(16進数)
16進数でのピクセル色の並び
ピクセル色(10進数)
10進数に切り替えた場合の表示

照準位置のピクセルのカラーコード(A,R,G,B値)を、ピクセル色に表示します。
DEC(10)HEX(16) スイッチで、10進数表記と16進数表記を切り替えられます。

A,R,G,Bの各要素をクリックすると、その値がクリップボードにコピーされます。


コマンド ボタン

コマンド ボタン
コマンド ボタンの並び

コマンド ボタンには、基点登録, 原点復帰, 基点眺望, 色取得, 色送信があります。

基点登録原点復帰は、現在の撮影場所を基点にしたり、基点を原点(主スクリーンの左上座標)に戻したりします。

基点眺望は、撮影場所を基点の位置に持って行きます。

色取得は、撮影場所に当たるピクセルのカラーコードをクリップボードへコピーします。コピーする際の書式は、設定コンソールで変更できます。既定では、16進数のARGB値です。
また、色送信のために色を記憶する役目もあります。ボタンの色が、現在記憶している色です。

色送信は、キーボード操作を再現することで、色取得で記憶したカラーコードを外部アプリケーションに入力します。再現するキーストロークのパターンは、設定コンソールで変更できます。
このボタンは、送信の準備をするだけで、実際の送信はビューアを隠すと同時に行われます。
既定パターンでの使用方法は、次の通りです。

送信先の条件
  • Tabキーによって R欄 → G欄 → B欄 の順にフォーカスが移動する。
  • Ctrl+Aキーで数値の全選択ができる。
使用手順
  1. 目的のアプリケーションのR欄にフォーカスを持って行く。
  2. 欲しい色の近くへマウスカーソルを持ってくる。
  3. 呼び出しキーを押す。
  4. ビュー上で目当てのピクセルをクリックする。 → 撮影場所が移動する。
  5. 色取得ボタンをクリックする。 → 色が記憶される。記憶済みのボタン
  6. 色送信ボタンをクリックする。 → ボタンの色が変わる。有効時のボタン
    (再クリックでキャンセル。)
  7. 呼び出しキーを放す。 → 送信される。
※“欲しい色のピクセル”と“送信先のR欄”を並べて見られない(ウィンドウが重なる等)場合は、フォーカス移動(0)を色記憶(4)後に行います。この時、呼び出しボタンを放しても構いません。また、フォーカス移動を忘れていた時にも有効です。

設定コンソール

設定コンソール
設定コンソールの様子

設定は、タスクトレイアイコンのコンテキストメニューの設定をクリックすると現れる、設定コンソールで行います。

各項目の説明は、タイトルバーにあるをクリックし、続けて知りたい項目をクリックすれば表示されるので、参考にしてください。

色書式や送信パターンは、.NET Frameworkの《String.Format》/《SendKeys.Send》メソッドそのものです。詳細は、以下のサイトを参考にしてください。ですが、プログラム未経験者には、難物だと思います。ご容赦ください。


使い方 実践編

作業を進め易いように、予め準備をしておいてください。

  • グラフィックツールに対象画像を等倍(100%)で表示しておく。
  • ビューアのサイズや倍率を良い感じに調整しておく。

【題目1】点Aからオフセット(±x,±y)に直線を引く。

題目1の図
手順)
※6〜10までマウスの左ボタンを放さない。
  1. グラフィックツールを直線モードにする。
  2. 点A付近にマウスカーソルを持って行く。
  3. 呼び出しキーを押す。
  4. 照準を点Aに合わせて左クリック。→ 点Aが撮影場所になる。
  5. 基点登録をクリック。→ 点Aが基点になる。
  6. 呼び出しキーを放す。→ マウスカーソルが点Aへワープする。
  7. 左ボタンを押して描画を開始する。
  8. グラフィックツールのオフセット値を見ながら(±x,±y)付近までドラッグする。
  9. 呼び出しキーを押す。
  10. 照準位置を見ながら照準を(±x,±y)に合わせる。
  11. 呼び出しキーを放す。→ マウスカーソルがワープする。
  12. 左ボタンを放して描画を完了する。

【題目2】ある画像の中の四角い領域(太線)を、周りにnドットの余分を取って(破線)、範囲選択する。

題目2の図
手順)
※6〜13までマウスの左ボタンを放さない。
  1. グラフィックツールを範囲選択モードにする。
  2. 点A付近にマウスカーソルを持って行く。
  3. 呼び出しキーを押す。
  4. 照準を点Aに合わせて左クリック。→ 点Aが撮影場所になる。
  5. 照準位置を見ながら照準を(-n,-n)に合わせる。
  6. 呼び出しキーを放す。→ マウスカーソルが点A'へワープする。
  7. 左ボタンを押して範囲選択を開始する。
  8. そのまま点B付近までドラッグする。
  9. 呼び出しキーを押す。
  10. 照準を点Bに合わせる。
  11. 呼び出しキーを放す。→ マウスカーソルが点Bへワープする。
  12. 呼び出しキーを押す。→ 点Bが撮影場所になる。
  13. 照準位置を見ながら照準を(+n,+n)に合わせる。
  14. 呼び出しキーを放す。→ マウスカーソルが点B'へワープする。
  15. 左ボタンを放して範囲選択を完了する。

余分nが、ビューに収まらないほどに大きくなると、上記のように一発では片付きません。予め、点A'点B'に目安となるドットを打っておくなどの工夫が必要になります。そんなドット打ちにも、SCOrPio! が役立ってくれるので、臨機応変に作業してください。

点A-点B間に直線を引きたい場合も、同じ要領です。

補足

この様な作業は、『アバウトにやっておいてから改めて調整する』とか『目印となるドットを打つ』などすれば、SCOrPio! を使用しなくても可能なのかもしれません。しかし、そのためには、倍率を調整し、ツールを切り替え、座標を計算し、ドットを数え、チマチマ調整し、時にはスクロールしたりと、画面中を右往左往してそれはそれは面倒で手間が掛かるのです。(本格的にグラフィックツールを使ったことがない作者が、単に上手な使い方を知らないだけなのかもしれませんが。)
方や SCOrPio! では(一見手数が多そうではありますが…)流れるように作業が進み、煩わしさから解放されると考えられます。(「解放されること請け合いです!」と書きたいが、作者の贔屓な見解では、その有効性を担保できないので書けません。)

グラフィックツールによっては、ワープ後のマウスカーソルにガイド線(直線ツール等で、始点からマウスカーソルまで仮に引かれる線)が付いてこない場合があるかもしれません。そんな時でも気にせずボタンを放して確定してみてください。
もし、それで上手く行かないなら、そのソフトは「SCOrPio! なんかに付き合ってらんないッ (`へ´)ゝ」と言っているのです。

プロジェクトについて

配布ファイルに、ソース類も収録しています。不要なら、ソース フォルダを削除してもかまいません。

中身はいたってローテクで、特殊なテクニックや特別なAPI等々を全く使っていません。
制作にあたっては、HELuPER! の主要部分を流用して愚直にコーディングを積み重ねましたが、HELuPER! の思想に起因する諸々の面倒を排除した分、比較的解析し易くなったと思います。お好きなように改造してください。

デバッグ時のエラー表示について

デバッグ実行すると、出力ウィンドウに下記の例外が表示される場合があります。
これは、例外の発生を利用して、設定ファイルに記述されている色が16進数か名称かを振り分けているためです。

  • 「例外がスローされました: 'System.Exception' (System.dll の中)」
  • 「例外がスローされました: 'System.FormatException' (mscorlib.dll の中)」

呼び出しキー

非アクティブという本作の性質上、OSまたは他アプリケーションで機能するショートカットを、呼び出しキーとして使用するわけにはいきません。そうは言っても、誰も使わないなんて確約は得られないわけで、それでも影響を無視できる選択肢となると、修飾キーの組み合わせしかありません(修飾キーなら、APIを使わなくても.NETだけで検知できて棚ぼた)。
しかし、修飾キーの中でもAltキーは、メニュー選択やメニューバーにフォーカスを移動する役目があるため、厄介です。単独で使用できないのはもちろん、Shiftキーと組み合わせても単独と同じ動作をしてしまうし、Altキーが押されているとコンテキストメニューをクリックしても反応しないという弊害も出てきます。ビューアにコンテキストメニューを設ける場合は、Altキーを排除するなど何らかの対策が必要となります(ただ、Alt排除すなわちCtrl+Shiftのみ…これは致命的)。

ファイル

設定内容が"Setting.xml"に、終了時の状態が"Resume.xml"に、保存されます。実際の作成・書き換え処理は、SCOrPio! の終了時に行われます。これらのファイルが存在しない場合は、既定値で起動します。
"Setting.xml"には、設定コンソールから変更できない項目が含まれています。その項目は、【○資料】⇒《表1》の通りです。
プログラムを簡素にする(手を抜く)ため、これらファイルのバージョン間での互換性維持を考慮していません。あしからず。

"SCOrPio.exe.config"には、半固定パラメータ(プログラム上は不変だが、将来的に作り手側の都合によって変更が生じる可能性のある要素)が記述されています。再ビルドせずに変更を反映する方法として、このアプリケーション構成ファイルを使ってみました。
動作に必須ではないため、無くても起動できます。

これらのファイルは、XML形式のテキストファイル(UTF-8)なのでテキストエディタで変更可能です。ただし、大文字・小文字, 誤字脱字に厳しいので、書き換える際は十分注意してください。

模様の重複

設定コンソールにある模様の一覧(ComboBoxコントロール)には、幾つかの重複があります。これは、一覧の素となっている《Drawing2D.HatchStyle》列挙型自体に、異名で同じ値(模様)の項目が存在するためです(何のため?)。
重複を排除するとなると、何かと厄介なこと(排除した名称を設定ファイルに書かれたりとか…)になりそうだし、該当数も少ないことから、放置しています。

高DPIの課題

最近では、高解像度のディスプレイも珍しくなくなりつつあり、それに伴って高DPI設定への対応も課題となります。SCOrPio! では、特に高DPI向けた設計をしていない(Windows Form アプリケーション)ので、OSによる自動拡大が行われます。
実際にディスプレイ設定を変更して、SCOrPio! を動かしてみたところ、デスクトップの画像を上手く取り込めないようです。この部分は、.NET Framework の機能を使用して実現しているので、作者では対処の仕様がなく、高DPIに対応できないというのが現時点での結論です。

制作回顧録

変革の始まり、それは HELuPER! のコマンドパッドに〔注目点調整〕を工作していた時(Ver.1.11.0.0制作当時)だった。見えたのだ、真に理想とするルーペの姿が。
早速テストプログラムを用意し、その実現性に確信を持ったところで、すぐさま本制作に取り掛かりたかったのは山々。ところがどっこい、2015年はほれ、やれ Visual Studio 2015 だ、それ Windows 10 だ、なんだかんだが重なって延び延びになっちまったもんやから、この胸の高鳴りを抑えるのに苦労したよ。とは言え、そこはそれ、構想から制作まで間が空くなんてのはざらなこと。着手する時にも浸漬的「カイ・カン…」を享楽できるなんて、素敵やん。

HELuPER! の ReadMe にも書いたけど、『ペイントで点から点へ直線を引く』には、『画像を広範に見渡しながらも、マウスカーソルをピクセル単位で操れることが必要』であり『マウスカーソルが指すピクセルを認識するには、その周辺の拡大表示が不可欠』と考え、ルーペに帰結したんやった。
自分の中でのルーペには、MSXで言うところの“グラフサウルス”とか“DD倶楽部”とか“SII ANIME”とかにあるような(…って、ほとんどの人が (?_?)ゝ でしょ〜よ)、拡大画像上で直接ドットを打つなどの作業ができる物と、マウスカーソル周辺をリアルタイムに拡大して座標等を確認する物の2種類があって、今回の問題には後者を用いるのが最適解だと導き出したわけ(この座標確認系ルーペを“ミニルーペ”と呼称しているんやけど、そもそも何でこれをミニって表現しているのか…我ながら謎だ。やっぱり、見た目が小さかったからかなぁ?)。
で、この『常に画面上に存在し、常にマウスカーソル周辺を拡大する』っていうミニルーペ像を、自分の技術力の範疇で何とか形にしたのが HELuPER! やった。
でもね、HELuPER! の助力を得ても、結局マウスカーソルをピクセル単位で操るには、マウスを繊細なタッチで動かすか、マウス⇔キーボード間を往ったり来たりしないとダメなわけで、ここを整理整頓できない限り容易で快適な操作ってのも望めないわけで…。そんなこんなの苦悩と苦心の末、コマンドパッドに〔注目点調整〕が爆誕することとなる。けれど、「こりゃ画期的に便利やわぁ」とつぶやくと共に、ある思いが胸中に渦巻いてしまったのだ。

「コマンドパッドに拡大画像があって、そこで注目点調整ができれば、事足りるんちゃうの?」って…
「ピクセルの並びをのべつ幕なしに知る必要ある?」って…
「狙った座標にマウスカーソルがあると確信できれば済むんじゃ?」って…
「あれぇ?」って…
「固定観念を捨て去れ! 新発想だ!!」って。

この思いを素直に形にしたら、“SCOrPio!”になっちゃった。
そう、例えるなら、HELuPER! は『顕微鏡を覗きながらピンセットを使う』感じなのに対して、SCOrPio! は『手術ロボット“ダ・ヴィンチ”を手に入れた』感じ。わかるかなぁ〜、わかんねぇだろうなぁ〜、イャ〜単なる誇大広告ですよ。本人もこんな作業したことないし。でもね、思わずそう言ってしまうほどに、自分の浅くて狭い見聞の中では、革新的発想の転換な閃きやったんやわ。
いやはや、なんですなぁ、今から思えば HELuPER! って、無駄なことを必死にやってたんやねぇ (;´д`)トホホ(← 最近のMS-IMEはいろんな顔文字を出して来るな)。ムムムッ、無駄なんかじゃないやい。HELuPER! がなかったら SCOrPio! もなかったんやからなッ!

え〜と、どうでもいいことやけど、SCOrPio! の由来でも書きます。
まず、マウスカーソルがワープする様から、プロジェクト名が“ワームホール”となり、そのイメージなら“ルーペ”より“スコープ”かなぁ、ワームって響きから虫っぽさも欲しいなぁと、頭の中でグルグルする。
単純に綴りが似てるからってだけで“lupe”+“helper”=“HELuPER!”とした経緯に倣って、“scope”に似ている“scorpion”に目を付ける。「ワームってミミズとかの永細い奴ちゃうの?」って指摘は無視(ムシだけに…えっ('ゝ')?)。
そんでもって、ただのサソリじゃ味気ないので、蠍座の“Scorpio”に(1文字節約 (^^♪ )。“scope”+“Scorpio”=“SCOrPio!”のできあがり(えっ、しょぼい? グヌヌ)。
“ピ”の部分を“PE”にするか“Pi”にするか迷ったけど、“Scoping”みたいに“e”は“i”に変わることがよくあるので“Pi”にしておいた(何が正解なのかワヤですわ、グスン)。
もっと分かり易〜く“HELuPER! 忍(しのび)”とかも考えたけど、後継作ではなく姉妹作だよって所を強調したくて止めにした(えっ、ダサい? ギャフン)。

HELuPER! から SCOrPio! へ設計思想を180度ひっくり返しちゃったために、“マーク”と“サイト”の役割も入れ替わっちゃいました。さすがに入れ替えただけでは混乱しそうなんで、“照準”と“水準”に改めてみた。あれまぁ、漢字でスッキリ。

他の作品も含め、今までずぅ〜っと落とし穴にはまっていたことに、気付いてしまった。ソリューションのプラットフォームを“Any CPU”としても、実際には32bit(WOW64)で動作するってことに、Wow! コンパイル オプションに32ビットを優先スイッチがあるなんて、全然知らなんだ。アセンブリ情報に登録するタイトルが長すぎて、タスクマネージャで動作モードが見えてなかったんやな。どうせ、WOW64の介入を許したところで、なぁ〜んも困らんしぃ〜。

資料

《表1》設定コンソールに現れない"Setting.xml"の項目

<SCOrPioの設定内容>-<ビューア>-<呼出>-<応答間隔>
意味呼び出しへの応答間隔を指定します。
10〜5000(Integer)
既定値100
<SCOrPioの設定内容>-<ビューア>-<ビュー>-<応答間隔>
意味照準操作への応答間隔を指定します。
10〜1000(Integer)
既定値50

《表2》コマンドライン引数

コマンド概要
/NONSTOP倍率調整のズーム ストッパを無効にします。
/RESET既定値で起動します。
/TESTテスト モード。無保存終了や詳細パラメータ表示が有効になります。
/ZOOM=nズーム イン/アウトの調整倍率を指定します。
2≦n≦10(Integer)

《表3》既定の色書式

ARGB値が FF123456 だった場合の出力例
書式概要
{3},{4},{5},{6}255,18,52,86
{3:X2},{4:X2},{5:X2},{6:X2}FF,12,34,56
{1:X8}FF123456
{2:X6}123456
{6:X2}{5:X2}{4:X2}563412
rgba(|RED|, |GREEN|, |BLUE|, {7:0.0})rgba(18, 52, 86, 1.0)

《表4》既定の送信パターン

ARGB値が FF123456 だった場合の出力例
^a|RED|{TAB}^a|GREEN|{TAB}^a|BLUE|+{TAB 2}
キーストロークCtrl+A18TabCtrl+A52TabCtrl+A86Shift+Tab > Shift+Tab
解説R欄→G欄→B欄の順に10進数で送信します。
^a{4:X}{{TAB}}^a{5:X}{{TAB}}^a{6:X}+{{TAB 2}}
キーストロークCtrl+A12TabCtrl+A34TabCtrl+A56Shift+TabShift+Tab
解説R欄→G欄→B欄の順に16進数で送信します。
^a{1:X8}
キーストロークCtrl+AFF123456
解説ARGBを16進数8桁で送信します。
^a{1:X8}{{ENTER}}
キーストロークCtrl+AFF123456Enter
解説ARGBを16進数8桁で送信し、最後にEnterを押す。
^a{2:X6}
キーストロークCtrl+A123456
解説RGBを16進数6桁で送信します。
^a{2:X6}{{ENTER}}
キーストロークCtrl+A123456Enter
解説RGBを16進数6桁で送信し、最後にEnterを押す。
%r|RED|{TAB}|GREEN|{TAB}|BLUE|
キーストロークAlt+R18Tab52Tab86
解説Windows標準の《色の編集》ダイアログに特化。
R欄へ直接フォーカスを移せ、フォーカス移動に伴って自動的に全選択されることを期待。

参考・引用文献/拝借物

毎度、有難う御座います。大変お世話になりました。

アイコン(画像)作成ツール

リファレンス/サンプル

.NET Framework

[Top(T)][Index(X)][Back(B)]