DashIT Ver1.55 【概要】 DashIT [ダッシュイット] は、索引コードによる登録情報管理が特徴の簡易入力支援ツールです。 以下のような簡単な操作で、思い立ったときに呼び出して登録済情報をアプリに転写できます。 Act.1 ショートカットキー入力→ツールがアクティブ化 Act.2 索引コードを入力→合致する登録情報を選択 Act.3 Shift+Ctrlで確定→クリップボードにテキスト複写+アプリへ自動貼付け 書込可能な空フォルダを新規作成し、D/Lした本ツールのExeをそこへCopyして実行してください。 (ツールの実行により、情報を保管するためのテキストファイルが数十個作成されます。) できるだけショートカットを作成し、そこから起動してください。 使わないときは邪魔にならず、デバイスの持替えを極力行うことなく、キーボードだけでも操作 できるように調整しました。クイックメモやランチャーとしても利用できます。 ※Ver1.56 Gotoすべき場所で誤ってGosubが使われていたのを修正 ●画面構成 ツール画面は以下のような構成になっています。 +------------------------------------------------+ | [コード入力欄][更新]   情報編集欄の機能説明 | | [機能ボタン1 ]┌───────────┐ | | [機能ボタン2 ]│情報編集欄      │ | | [機能ボタン3 ]│           │ | | [機能ボタン4 ]└───────────┘ | | ┌─────────────────────┐ | | │リスト欄            │ | | │                     │ | | │                     │ | | │                     │ | | └─────────────────────┘ | +------------------------------------------------+ ・コード入力欄 索引コードの入力を行うテキストボックスです。(IME起動不可) ・更新(ボタン) 索引コードと情報編集欄のテキストデータの結びつきを更新するボタンです。 ・機能ボタン マウス操作用のボタン。状況により機能が変化します。Helpも兼ねます。 ・情報編集欄 索引コードに対応する情報を編集するエディットボックスです。(IME使用可) ・リスト欄 索引コードの一覧を表示するリストボックスです。 索引コードは登録情報の呼び出しや保存時のキーワードで、利用者側で決めることができます。 1文字目はPage指定を行う文字となり、英字A〜Z、数字0〜9、記号+-=#$%&@[]{}() のいずれかで ある必要があります。2文字目以降は、タブ、空白以外のASCII文字(21H〜7EH)が使用できます。 最大15文字まで有効です。 ●操作の例 ・キーボードのみで行う場合の情報呼び出しの操作例。 Act.1 ショートカットキーでツールをアクティブ化 ツールが非アクティブの状態では、両Shiftの同時押しもしくはショートカットキーを 入力すると、ツールがアクティブになりTopPageが表示されます。 Act.2 索引コードを入力 1文字目のPage指定に従って情報ファイルから登録情報を読み込み、一覧表示します。 合致する登録情報があれば選択され、テキストデータが情報編集欄に表示されます。 Act.3 Ctrlを押して確定 情報編集欄のテキストデータがクリップボードへ複写されます。Shiftキーも押してい れば自動貼り付けになります。ツールは自動的に非アクティブ化、最小化されます。 ・キーボードのみで行う場合の情報登録の操作例 Act.1 ショートカットキーでツールをアクティブ化 Act.2 索引コードを入力 Act.3 Entを押して編集開始 フォーカスが情報編集欄に移動し、編集が可能になります。 Act.4 テキストデータを入力した後、F9を押して更新 指定した索引コードに対してテキストデータが定義されます。 ・クイックメモ的な使い方の操作例 Act.1 ショートカットキーでツールをアクティブ化 Act.2 そのまま(TopPageでリスト欄に選択済項目がない状態)Entを押し、編集開始 フォーカスが情報編集欄に移動し、編集が可能になります。 Act.3 メモ本文のテキストデータを入力した後、F9を押して更新 TopPageの先頭項目に、メモした内容が新規追加されます。 【操作詳細】 以下、操作とキーボードやボタンに割り当てられた機能を説明します。 ●最小化されている状態での操作 ツールは、起動直後は最小化された状態になります。 以下のいずれかの操作を行うことにより、ツールがアクティブになります。 ・ユーザーが設定したショートカットキーを押す(ショートカットから起動した場合) ・両Shift同時押し (利用できない環境もあります) ・画面左上隅(X<32,Y=0)にマウスポインタを置く(クリックは必要ありません) ・その他、Windows標準の方法であるタスク切り替え操作(Alt+Tab,Alt+Esc等)やタスクバー上 のアイコンをクリックすることでもツールのアクティブ化が可能です。 ●アクティブになっているときの操作 ツールがアクティブになると、TopPage用情報ファイルが読み込まれTopPageが表示されます。 以下、TopPage、SubPage共通の操作について説明します。 <各Page共通> □最小化する ・情報編集欄以外でEscキー ツールを最小化します。ツールのタイトルバーにある最小化ボタンも使えます。 −補足− ※本ツールは、スクリーンセーバー起動時も含めて、フォーカスを失うと自動的に最小 化します。最小化された際、情報編集欄の編集中の内容やリスト欄の選択位置情報は 失われます。 □リスト欄項目選択 ・情報編集欄以外でカーソル↑↓ リスト欄の選択位置を変更します。 選択位置の項目は、索引コードとテキストデータに分離され、コード入力欄と情報編集 欄に転記されます。(TopPageではテキストデータのみ転記されます) □リスト欄の選択項目の移動 ・Shift+カーソル↑↓ (フォーカス位置が情報編集欄とリスト欄にある場合を除く) リスト欄で選択中の項目を一つ上または下へ移動し、簡易的な並替えを行います。 □情報編集欄の編集を開始する。 ・情報編集欄をクリック ・情報編集欄以外でEntキーを入力した場合も同様に機能します。 情報編集欄にフォーカスを移動します。複数行の編集、IMEの呼び出しも可能です。 □情報編集欄の編集を中断 ・情報編集欄でEscキー Page情報(リスト欄と情報ファイル)へ反映せず、コード入力欄にフォーカスを戻します。 □登録データの追加/更新/削除 ・更新ボタン『更新[F9]』 ・F9キーを入力しても同様に機能します。 (コードが?で始まっている場合は、処理は行われません。) テキストデータを表示中のPage情報(リスト欄と情報ファイル)へ反映します。 更新動作は以下のようになります。 a) リスト欄に選択済項目が存在せず、情報編集欄が空ではない→リスト先頭に追加 c) リスト欄に選択済項目が存在し、情報編集欄が空ではない→該当項目を更新 b) リスト欄に選択済項目が存在し、情報編集欄が空→該当項目を削除 処理後、フォーカスはコード入力欄に戻ります。 −補足− ※削除に関しては、Shift+F9もしくはShift押しながら更新[F9]クリックでも行えます。 この場合は、情報編集欄が空でなくても削除されます。 □クリップボードへの複写 ・機能ボタン2『複写(&貼付 Shift+) [F4]』 ・F4キーを入力しても同様に機能します。 ・情報編集欄以外でCtrlキーを入力した場合も同様に機能します。 情報編集欄が空でなければ、内容全体がクリップボードに複写された後、ツールは最小 化します。(情報編集欄でF4キーを押した場合のみ、情報編集欄で現在選択されている 範囲のテキストが複写の対象になります) 更に、この操作において同時にShiftを押していた場合は、次にフォーカスを取得した アプリケーションへ、クリップボードに保持する内容(通常は直前に上記処理で複写した もの)が貼り付けられます。 −補足− ※Ctrlを押しっぱなしでVを押すことで、手動貼付けもできます。(Shift不要) ※SubPageのリスト欄で選択された索引コードは、前回コードとして保持されます。 ※情報編集欄でのF7キーの入力時にテキストの選択範囲がない場合はクリップボード への転送は行われませんが、イベントは有効なため、ツール最小化、前回コードの 保持、Shiftを押していた場合の自動貼付けも行われます。(このとき自動貼付けは その時点のクリップボードの内容で行われます) □関連つけられたアプリを実行 ・機能ボタン3『AP実行 [F5]』 ・情報編集欄以外でF5を入力した場合も同様に機能します。 情報編集欄が空でないときにこの操作を行うと、関連付けられたアプリを起動します。 −補足− ※SubPageのリスト欄で選択された索引コードは、前回コードとして保持されます。 <TopPage(コード入力欄が空欄の状態)固有の操作> コード入力欄入力していない状態で表示されるPageです。 情報編集欄に表示されたテキストデータについて、AP実行、Copy操作、編集作業が可能です。 TopPageでは、索引コードを入力するとSubPageへ移行しますので、リスト欄の選択操作は カーソルキーもしくはマウスによって行います。また、リスト欄に選択済項目が存在してい てもコード欄はの表示は空のままです。 なお、SubPageへ移行する際にはTopPageのリスト欄の選択位置が記憶されおり、再度TopPage に戻ってきた場合はその位置が選択されます。 □コード入力欄に文字を入力 ・入力した文字が、英字A〜Z、数字0〜9、記号+-=#$%&@[]{}() の場合 入力された文字に従って情報ファイルが読み込まれ、SubPageに移行します。 □リスト欄の選択をキャンセルする(リスト欄に選択済項目がある場合) ・機能ボタン1『消去/前回Code:〜』 ・情報編集欄以外で[←]を入力した場合も同様に機能します。 リスト欄に選択済項目が存在する場合に機能します。リスト欄を選択済項目のない状態 にして、情報編集欄の内容を消去します。 □保持している前回コードを呼び出す(リスト欄に選択済項目がない場合) ・機能ボタン1『消去/前回Code:〜』 ・情報編集欄以外で[←]を入力した場合も同様に機能します。 リスト欄に選択済項目が存在しない場合に機能します。機能ボタン1の'〜'に示される 前回の索引コードが空欄でければ、それを採用してSubPageに移行します。 □選択した項目に合致するSubPageへ移動 ・機能ボタン4『TopPage[←]/SubPage[→]』 ・情報編集欄以外で[→]を入力した場合も同様に機能します。 リスト欄で選択された行が索引コードを持っている場合、それを採用してSubPageに移行 します。 <SubPage(コード入力済状態)固有の操作> 索引コードを入力した状態では、対応するSubPageが表示されます。 情報編集欄に表示されたテキストデータについて、AP実行、Copy操作、編集作業が可能です。 SubPageのリスト欄の選択操作はカーソルキーやマウスでも行えますが、コード入力欄に文字 を入力すれば、リスト欄内で一致する索引コードを検索し、自動的に選択します。 コード入力欄が空欄にされた場合は、TopPageに戻ります。 □TopPageへ戻る ・機能ボタン4『TopPage[←]/SubPage[→]』 ・情報編集欄以外で[←]を入力した場合も同様に機能します。 コード入力欄をクリアし、TopPage(見出し表示状態)に移行します。 □TopPageへ戻り、リスト欄の選択がない状態にする ・機能ボタン1『消去/前回Code:〜』 コード入力欄をクリアし、TopPage(見出し表示状態)に移行します。 TopPageでの選択済項目がない状態になります。 【登録情報のデータ構成と情報ファイルのメンテナンス】 Pageごとの情報を記録する情報ファイルは、Exeファイルの置かれたフォルダに作成されます。 Page情報の並べ替えや修正が大掛かりになる場合、必要に応じてメモ帳などで編集してください。 ツールよりShift+F5を入力するかShiftを押しながらAP実行[F5]をクリックすると、現在表示して いるPageの情報ファイルがメモ帳などで開かれます。(.txtの関連付けがメモ帳などであること) ●情報ファイルの種別 ・TopPage用情報ファイル dc!.txt この情報ファイルはTopPage用で、ツールがアクティブなった際にリスト欄に表示され る内容が格納されます。(ファイルが存在しない場合、ツールが自動生成し、利用可能な Page指定文字の一覧を書き出します) SubPageの説明や、よく使うコードを記載したりして、適宜カスタマイズしてください。 ・SubPage用情報ファイル dcA.txtなど SubPage用情報ファイルでは、それぞれのSubPageに関する登録情報を格納しています。 各行が登録情報として規定のフォーマットに沿っていなくてはなりません。また、索引 コードの1桁目(Page指定文字)は、登録する情報ファイルのファイル名の3桁目と合わせ る必要があります。 ●記載するレコードについて 情報ファイルにおける1項目(1レコード)の規定のフォーマットは、索引コード : テキストデータ という構成になります。 ・索引コードは、レコード先頭からセパレータ「 : 」(スペース+コロン+スペース)の前までの 連続した文字列で、15桁目までが有効です。 ・通常はセパレータ以降がテキストデータとなりますが、セパレータが規定範囲に存在しない 項目は、レコード全体がテキストデータ扱いとなります。 ・セパレータが規定範囲に存在して先頭が索引コードとしてに利用できない文字である場合、 セパレータ以降がテキストデータとなりますが、索引コードは機能しません。 ●その他の注意点 ・登録情報1件に複数行のテキストを格納する場合、行区切りとしてキャラクタコード02を2個 並べたものを使用し、テキストを連結してください。 ・ツールが情報ファイルを読み込む際に規定を超える長さのレコードを見つけた場合、ツールは ダイアログにDataSizeErrメッセージを表示して終了します。該当行を修正してください。 ・TopPageとSubPageに同じ索引コードが存在してもかまいません。例えばAAAAという索引コード について、TopPageとAのSubPageに別々のテキストデータを持たせて登録でき、異なる用途に 使用できます。 ・索引コード入力時のリスト欄選択は、リストを上から調べて最初に該当する行になります。 (SubPage内に同じ索引コードの登録情報を複数記述した場合、そのような行をツールで編集 すると、編集前後でリスト欄の選択位置が変わることがあります。) 【制限事項】 ●セキュリティ関係 ・情報ファイルは暗号化されません。また、クリップボードという共用のリソースを使用する ため情報が漏洩しないことは保障できません。従って、パスワードやクレジット番号などの 重要な情報については、本ツールで保管することをお勧めしません。 ・ランチャー機能で危険なコマンドが不用意に起動されないよう、表示中のテキストデータに は充分注意してください。 ●情報ファイル関係 ・1件の登録情報で扱えるテキストデータは最大3969bytesです。改行は各所2bytes要します。 ・データ件数の多い情報ファイルがあると、画面書き換えに時間がかかる場合があります。 ・情報編集欄に複数行記述した場合、リスト欄や情報ファイルへの記録時の改行はキャラクタ コード02を2個並べたものに置き換えられます。改行部分の表示は環境によって異なります。 ・情報ファイルの直接編集の際、索引コード部分に漢字を割り当てないようにしてください。 文字化けの原因となります。コード入力欄への貼付け操作も同様に注意願います。 ・情報ファイルが他のアプリケーションに操作されていたり、ファイル共有で複数の本ツール からアクセスされているような場合、ファイルの読み込みや更新が正しく行われないことが あります。 ●起動、アクティブ化、操作など ・二重起動防止はやっていません。 ・タスクバーのアイコンをクリックしてツールを最小化すると、すぐに元サイズに戻ったり、 後のフォーカスが正しく制御されないことがあります。 ・関連AP実行の際、該当アプリケーションの起動に時間がかかると、ツールが一次的にハング アップしたように見えることがあります。 ・ご使用のキーボードや環境によっては、両Shift同時押しが利きかないことがあります。その 場合、1アクションのキー操作でツールを呼び出すためには、ツールのExeに対してショート カットを作成し、ショートカットキーを割り当ててください。 ・TopPageでリスト欄が未選択のときにF9の連打などを行うと、タイムスタンプのみの行が連続 して記録されてしまいますので注意してください。 ●自動貼付けに関して ・自動貼付けされる側のアプリケーション(通常はツール呼出し時にフォーカスのあったもの) は、テキストが入力できる状態である必要があります。 ・自動貼付けでは、Shiftキーが押されている間にツールからInsertキーのOn/Offイベントを 発生させています。これにより、アプリケーション側では Shift+Insertのキー入力を受け 取ることになるため、一般的にShift+Insertに割り当てられている貼り付けが実行されます。 アプリケーションによってはShift+Insertで貼付け動作が行われなかったり、固有の機能が 実行されることがあります。 ・上記のような仕組みのため、アプリケーションにフォーカスが渡る前にShiftを離すと貼付け が行われません。また、フォーカスの監視は操作後、約0.5秒間だけ行っており、その間に フォーカスが渡らない場合も自動貼付けは行われません。 ・本バージョンではマウス操作のみでの自動貼り付けは実装していません。(要Shiftキー併用) ●環境その他 ・リスト欄内にある水平タブ等のコントロールキャラクター表示は、環境によって異なります。 ・OSによっては、メモ帳で開くことができるファイルのサイズに制限があります。 ・たまたまそう動いているいうところを利用している面があります。環境によっては他の常駐 アプリケーションの影響を受けたり、正常動作しないこともあります。 【動作確認環境】 下記環境にて基本動作を確認しております。 Windows2000professional,Pen3-866MHz,Mem512MB,HSP2.61 WindowsXPprofessional,M-Pen-1.5MHz,Mem768MB,HSP2.61 Windows98SE,Pen2-400MHz,Mem128MB,HSP2.61(一部キー操作等に制限あり) 【免責事項等】 本ソフトは、日本国内および日本語Windows上での動作を想定して作成されています。 本ソフトは、どのような環境でも動作することが保証されるものではありません。 本ソフトを使用したことあるいは使用しなかったことで生じた、いかなる損害にも著作者は責任 を負いません。 改変、配布、販売、リバースエンジニアリングは、いずれについても著作者の許可なく行なう ことを禁止します。 製作/著作 (C) 2004 あんすこえむ 【蛇足事項】 ●タイトル DashITは "the Description Assistance Software which Handles the Indexed Text-data ." (意味:索引付テキストデータを取り扱う記述支援ソフト)を略した造語というか語呂合わせ。 テキストをアプリに叩き込め!というニュアンスもあったりします。 ●作成の動機 同様な支援ソフトはもっと高機能なものが巷にあふれていますので、わざわざショートの制限で 作る必要もないのですが、思うところあってコンテストのネタを口実に挑戦してみました。 作るにあたって次のようなコンセプトを設けました。 1. クリップボードへの複写などの用事が済んだら、操作の邪魔にならないように隠れる。 2. ツールの操作時にはキーボード/マウスの持ち替えを極力避ける。 3. キーボード操作のみで全ての機能が利用できる。マウス操作でもそこそこ使える。 4. 登録情報に索引コードを付加して扱う。(覚えていればすばやく呼び出すことができる) 5. 索引コードを忘れた時に備えて一覧表示。(カーソル操作での順送りは欄外でもする) 6.IMEの切り替え操作は効率が落ちるため索引コード入力欄では強制Off。 7.登録情報のテキストは複数行をサポートする。 少し前まで使っていたクリップボード拡張ツールは、ツリー構造でデータ管理するタイプで検索 性能に優れかつ多機能なものでしたが、デバイスの持替えが頻繁に発生してしまうため、純粋な テキストを打込みについては今ひとつ効率が上がりませんでした。 ヘビーなタッチタイプに向く操作方法を検討した1つの結論が、索引コードの適用です。 ●Windows Message および、DLLの呼び出しについて ほとんどのオブジェクト操作や機能はobjsendを使うことで対応できましたが、一部の不都合解消 と利便性を高めるためにWindowsのDLLを呼び出しています。 ・本ツール内のobjsend命令で使用しているメッセージと用途 EM_SETSEL $B1 キャレット位置制御、選択範囲の指定 WM_SYSCOMMAND $112 ツールのウィンドウ最小化と元サイズへ戻す操作 LB_ADDSTRING $180 Listboxへの項目追加 LB_RESETCONTENT $184 Listboxの全項目消去 LB_SETCURSEL $186 Listboxの任意の単一項目を選択状態にする。 LB_FINDSTRING $18F Listboxから任意の文字列で始まる項目を探す。 WM_COPY $301 選択範囲のテキストをクリップボードへ複写 ・本ツールで自前で呼び出しているDLLとAPI imm32 ImmAssociateContext コード入力欄からIMEを切り離すために使用。 user32 keyboard_event 自動貼り付け時のInsertキーイベントの発行。 user32 GetForegroundWindow ツール外のアクティブウィンドウの確認に使用。 user32 IsIconic ツールが最小化されているかのチェック。 ●その他、言い訳など ・HSP V2.61では、リストボックスを作成したりobjprmで更新する際に、ある長さ(256Bytes?) を超える行があると強制終了してしまいます。対策としてリストボックス用の一行の長さを 短く加工していますが、連結する文字列変数の扱いが面倒だったので、自前でobjsendにて LB_ADDSTRINGを送って1項目ずつ登録しています。 ・情報編集欄の編集作業では、ツール自身の支援機能の恩恵はありません。 ・notegetする前に効率よく項目の長さを調べる方法がなく、結局、notegetして長さを計って います。規定長より長いデータの存在が判明した時には既にオーバーランが発生している 可能性があるので、安全のためプログラムを終わらせています。 ・ツールのポップアップと自動で隠れる動作に関しては、gselでの制御を考えていましたが、 アクティブ&最前面化の際、タイトルバーはアクティブ色なのにフォーカスが別のWindowに 存在するという現象が発生するため、最小化と元サイズへの復帰で逃げています。 ・情報編集欄の時刻(タイムスタンプ)はクイックメモの初期値となります。時刻取得の処理は Page情報のリフレッシュ時に行っていますので、時計代わりには不向き。ちなみに時刻取得 と編集で約100bytes要しています。 ところで、操作例で『クイックメモ的な使い方』と書いているのは、もともとクイックメモ としては設計しておらず、あくまでもTopPage登録情報の編集機能だからです。 ・Debugのために結構な時間使ってみましたが、テキスト貼付けよりも、電話メモに使ったり ランチャー(特にURL指定でWebブラウザ起動)として呼び出すことが多かったです。