ワイルドカードのマッチング関数(番外編)
●開発時の履歴
Ver.6.9.9.9
・リストからアイテムを削除する際に開放忘れが発生するパターンがあった不具合の修正
・アイコン画像の取得をUIスレッドで行っていた不具合の修正
・インクリメンタルサーチモードのEscの初期値を変更
・オプションのキー割り当てでOKを押すと2画面モード用の定義ファイルを出力していた不具合の修正
Ver.6.9.6.21
・Visual Studio 2015 Update 1の適用
※ランタイムのバージョンが上がっています。
今のところUpdate 1に更新していなくても問題は確認されておりませんが、なるべく更新を推奨します。
https://www.microsoft.com/ja-jp/download/details.aspx?id=49984
・FirstSetting.exe、UpdateAsr.exeからMS社のVisual Studio 2015 Update 1 の Visual C++ 再頒布可能パッケージのダウンロードページに飛ぶ際のURLを変更
いつ変更されるか不明なので当サイトからリダイレクトするように変更した
・Update 1によりCPUによってコア数を間違えるライブラリ不具合があるので、並列処理のスケジューリングを暫定でやめた
・各種レイアウトの微修正
・同梱のテキストドキュメントに、現在のMS社のランタイムのダウンロード先URLを書きようがないので誘導方法を変更した
・AsrLoad.exeのアイコン修正
・タブレット支援バーのスクリプトを微修正
・本体および関連ツールのリソースDLLの表記の統一、ショートカットの欠落・重複を修正
・誤字修正
●ソースの掃除
・ステータス文字列の制御をカプセル化した
・簡易詳細の設定を読み込んでいたのを削除
・IShellItem2を用いた表示テキストの取得の事前準備処理を削除
・デスクトップのIShellIconを保持し続けなくて良いように修正
・未使用APIのリンクを削除
・最適化オプションの変更
・分割ペインの生成処理を改善
・コンパイルオプションを調整
Ver.6.9.3.12
●新型プラグインサンプルの更新
●Ver.6.5.4からのフィードバック
・MDIモードの時にリスト部をマウスクリックでアクティブタブを切り替えた場合に、タブバー/ウィンドウ管理バーが連動しない不具合の修正
●Ver.6.5.5からのフィードバック
・メニューエディタから、テキストエディタで編集しようした時に呼ぶスクリプト(Editor.txt)のパスを間違う場合がある不具合の修正
・FirstSetting.exeの5ページ目のレイアウトを調整した
●その他
・タブバーの描画速度の改善
●β版修正
・バーのリセットを行うと、各種ツールバーのサイズが小さくなる不具合の修正
・メインメニューのデスクトップモードへ切り替え/タブレットモードへ切り替えを、ツール→環境設定の下に配置に変更
●置換マクロ追加
・?State:ToolBarFile?・・・ツールバー(ファイル操作)の表示有無
・?State:ToolBarTool?・・・ツールバー(ツール)の表示有無
・?State:ToolBarListMode?・・・ツールバー(リストモード)の表示有無
・?State:ToolBarOperationMode?・・・ツールバー(操作モード)の表示有無
・?State:ToolBarSplitMode?・・・ツールバー(分割モード)の表示有無
・?State:ToolBarWindow?・・・ツールバー(ウィンドウ管理)の表示有無
●実験的な取り組み1
・シェルアイコン画像の取得に1秒以上かかる場合は、以降のアイコン画像の取得を諦めるようにした
アイコン画像の取得に1000ミリ秒以上かかると、そのディレクトリのアイコン取得は全てスキップします。
スキップした状態であっても再表示を行うにはF5キーを押下など、最新の状態へ更新を行うと再度取得を試行します。
レジストリ値を0(初期値/未指定は1000)にすると、この判定処理が無効になります。
[HKEY_CURRENT_USER\Software\AMA_Soft\ASR\Main001\ListDraw]
"ListDraw"=dword:0
※特にWindows10で無効にできないDefenderが有効になっているケースで、フリーズと勘違いされるケースが多いので暫定的な対処です。
市販のウィルススキャンソフトでもアイコン画像を取得するのに1ファイルにつき1分近く待たせるソフトがあるので、こういった判定処理を設けてみました
この現象の主な発生原因はウィルススキャンによる遅延と、シェル拡張ツールによる遅延、HDD故障、切断されたネットワーク先です。
一応、キャッシュされてない数十万ファイルを格納しているディレクトリでもOSの仕組み上発生しますが、さすがにこれはレアケースと思われます。
●実験的な取り組み2
・タブバーを切り替えた時に、切り替えたタブを目立たせる目的で点滅させるようにした
レジストリ値を0(初期値/未指定は1)にすると無効になります。
[HKEY_CURRENT_USER\Software\AMA_Soft\ASR\Main001\TabStyle]
"ActiveFlash"=dword:00000000
※かなりウザいですが実利はあるので評判が悪くなければこのままです
Ver.6.9.2.4
●全体
・配布書庫作成用の7zjpを最新版に変更
・黒テーマの場合の配色調整
●機能追加
・アイコンモードのメニュー定義追加(ツールバー用、_ToolbarIconMode.txt)
・表示モードのメニュー定義追加(ツールバー用、_ToolbarListMode.txt)
・並び順のメニュー定義追加(ツールバー用、_ToolbarSortMode.txt)
・並び順のメニュー定義追加(ステータスエリア用、_SortMode.txt)
・サブツールバーを6個追加
●β版修正
・定義ファイルの読み込みに失敗した場合のハンドルがNULLではなく-1であったのを失念していた不具合の修正
・隠し属性を付与するコマンド発行後に更新処理を追加
・AllCommand.txtの更新
●β版画像関連
・タブバーの新しいタブ、ここから開くのアイコン画像の変更
・ディレクトリ内検索の画像を調整、残画像を作成
・フィルタを表示ボタン画像のレイアウトを微調整
・フィルタを閉じるボタン画像を修正
・表示モードのアイコン画像の変更
・タブレット支援バーのアイコン画像の修正
・タブレット支援バーのリネームのアイコンの修正
・リソースの誤字修正
・オプション画面のレイアウトを最終調整
Ver.6.8.1.1
●機能追加
・オプション→リスト→モード依存の表示に「項目の種類」には拡張子のみ表示オプションの追加
・Unreg.exeで終了時にメッセージを表示するように変更
●不具合修正(Ver.6.5.3からのフィードバック)
・修正漏れが合った誤字の修正(概観→外観)
・ユーザー定義バーのコマンドメニュー内の更新とキャッシュ再構築コマンドが動作しない不具合の修正
●β版不具合
・システムバーのアイコン画像(自動隠しモード用)がずれているのを修正
・コマンドプラグインでUI判定の処理で画面分割の場合を考慮しすぎて、判定なしでコマンド実行してました。
・コマンドプラグインでUI判定の対象外になった場合、szCurrentPath1に値がセットされない場合がある不具合の修正
・コマンドプラグインで画面分割している場合のターゲットペインのパラメータが、UI制御の指定の影響を受けてしまう不具合の修正
●β版修正
・ツール→各種バー用のコマンド類を全て削除していたのを取りやめた
・各種リソース周りを実装
●置換マクロ追加
・?State:SlectionArea?・・・ディレクトリ内検索の表示有無
・?State:OperationMode?・・・デスクトップモードかタブレット支援モード
・?State:TabletMode?・・・タブレット支援モードのモード
●各種設定ファイルの読み込み処理中にファイルロックをかけるように変更
※スクリプトの自己改竄と、各種定義ファイルの改竄による意図した誤作動の禁止を目的としています。
今回のβリリースに含めたのは、複数起動や、複数スレッドでの動作で問題がないか否かの検証を目的にしています。
各種ファイルの読み込みの失敗や、エラーになった場合は、再現性は気にしなくて良いので操作手順を添えてご連絡ください。
●試験実装(コンセプト検証用なので仕様が変わる可能性大です)
・FileCreateOpen・・・ファイルをオープンする。FileOpenとは異なり常にファイルは新規作成
・FileWriteWBom・・・BOM付きでUNICODE文字列を出力する。FileWriteWと使い分け用
Ver.6.7.8.9
●アドレスバー周りのボタンサイズを若干大型化
●キー割り当て
・タブレット支援バーの表示切り替えを「6」に割り当て
●タブレット支援バーの追加(ID_VIEW_TABLETASSISTBAR)
・現在のモードなどのメッセージ表示コマンド
・各種のモード切替系のコマンドで、該当のスクリプト呼び出し
・設定コマンド/設定コマンドメニュー
・タイトルバーの制御
・標準ツールバーにタブレット支援バーアイコンを追加
●タブレット支援バーの制御用スクリプトコマンドの追加
・OperationMode
操作モードを切り替えるように本体へ通知します。
メインメニューのラジオボタンの制御用で、現在どのモードになっているかを示す目的のコマンドです。
OperationMode=1にしたときに、現在のTabletModeに沿ったスクリプトを読み込みます。
【書式】
OperationMode=[操作モード(0:デスクトップ 1:タブレット)]
・TabletMode
タブレットモードの操作モードを切り替えるように本体へ通知します。
タブレット支援バーのツールバーアイコンの制御用で、現在どのモードになっているかを示す目的のコマンドです。
【書式】
TabletMode=[操作モード(0:ファイル操作モード 1:シェル実行モード 2:エディタモード 3:ビューアモード)]
・TabletBarText
タブレット支援バーに対して表示するテキストを通知します。
このテキストは、全角の文字幅で約20文字を表示できなければ2段で表示されます。
【書式】
TabletBarText=[表示テキスト]
・UBJumpコマンドの10番をタブレット支援バーでフォルダ移動するコマンドにした
●置換マクロ追加
・?State:TabletAssistBar?・・・タブレット支援バーの表示有無
●その他スクリプト
・MoveWindowコマンドの引数で変数を適用するように変更
・Icon/Runコマンドのアイコン画像を取得する際に、環境変数および、As/R固有の定数置換マクロが有効になるようにした
・GetSystemMetricsコマンド追加
MoveWindowコマンドと連携するために用意されたコマンドです。
システムの様々な表示要素の幅と高さと、システムの現在の構成値を取得します。
【書式】
変数 = GetSystemMetrics,取得情報を表す数値
【例】
var $value$ = GetSystemMetrics,1
【取得情報を表す数値】
こちらのサイトで示されている情報を取得できます。
https://msdn.microsoft.com/ja-jp/library/cc429812.aspx
・MainWindowPositionコマンド追加
MoveWindowコマンドと連携するために用意されたコマンドです。
本体のウィンドウ位置を返します。
【書式】
変数 = MainWindowPosition,[取得情報種別]
【例】
var $left$ = MainWindowPosition,1
【取得情報情報種別】
1:左上座標のX座標(left)
2:左上座標のY座標(top)
3:右下座標のX座標(right)
4:右下座標のY座標(bottom)
5:最小化されいるか否か(0/1)
6:最大化されいるか否か(0/1)
●その他
・誤タッチを減らすためにユーザー定義バーの表示が一覧でない場合(アイコンモード)のレイアウトを横に広げた
●並べて表示のオプションの追加(▲不要表示を消したからといって視認性が上がるものでもない、もう一工夫必要)
・項目の種類/再生時間の表示をOFFにする
・ファイルサイズの表示をOFFにする
●簡易インストーラー
・FirstSetting.exeのVC2015対応
・タブレット支援バー関連のスクリプトのインストール処理を追加
●更新ツール
・UpdateAsr.exeのVC2015対応
・タブレット支援バー関連のスクリプトの更新処理を追加
●β版変更
・ユーザー定義バー/各種システムバーにあるツールバーアイコンサイズを若干大型化し、バーのカスタマイズでサイズが変わらないように変更を・・・やめた
・バーのアイコンを更新
・各種画像ファイルの微修正
●β版不具合
・スクリプト稼動スレッド数の上限に達した場合、カウントミスを起こす場合がある不具合の修正
Ver.6.6.9.4
●その他
・リストアイテムの描画時の排他制御とビジーキャンセル処理を追加
●パス文字列操作の算術スクリプトの追加
・Length
渡された文字列の長さを返します。
【書式】
変数 = Length,テキスト
【例】
var $text$=123456789
var $a$ = Length,$text$
「9」を格納
●β版の仕様変更
【スクリプト】
・SubStringのなんちゃって変数展開から、正しく変数展開するように変更
・SubStringで項の数が少ない場合にエラーになるように変更
・GetExt,GetNameでMAX_PATHを超える文字列を渡した場合に空文字を返すように修正(拡張子なしの場合の判定が可能になった)
●β版不具合の修正
・リソースDLLのコンパイルバッチファイルで、2012ランタイムを使用するように記述していたのを修正
Ver.6.6.6.6
●VCランタイム変更
・開発環境をVisual studio 2015に変更
●デザインの変更
・配色の微調整
・ユーザー定義バー/各種システムバーにあるツールバーアイコンサイズを若干大型化し、バーのカスタマイズでサイズが変わらないように変更
・標準ツールバーアイコンのボタンサイズを23×23→26×26に変更
・ツールバーアイコン画像を、Visual Studio 2008世代のものを2012〜2013世代のものに変更
カスタマイズでアイコン画像を追加したい場合は、こちらを使うと良いでしょう。
↓元ネタ
http://www.microsoft.com/en-us/download/details.aspx?id=35825
▲アプリケーションアイコンをWindows10ベースのものに変更
ゆるい感じがWindows8以前で違和感があるので検討中
●メインメニュー変更
【表示】
・「表示」にショートカットNが2個ある不具合の修正
・バーのスタイル変更のポップアップメニューにセパレータを入れた
・実体モード用であったコマンドを分散させた
・概観系のコマンドを全て削除
・簡易詳細を削除
【編集】
・「フォルダーへコピー」を初期メニューに無いコマンドへ移動
・「フォルダーへ移動」を初期メニューに無いコマンドへ移動
【表示】
・「フォルダ設定」を初期メニューに無いコマンドへ移動
オプションで一元化した方が分かりやすいという判断
・ディレクトリ内検索の表示切替コマンドの追加(ID_VIEW_SERCH_AREA)
・ステータスバーなどを階層化
・ドッキングウィンドウのタイトル/ツールバーを1つの新設の「ドッキングウィンドウのスタイル」にまとめた
・並べて表示の動作を変更
【ツール】
・ツール→各種バー用のコマンド類を全て削除
・2画面モード削除
・ここからPowerShellコマンドの追加(ID_TOOL_POWERSHELL)
・タブレットモード切替コマンドの追加(_ChangeTabletMode.txt呼び出し)
・デスクトップモード切替コマンドの追加(_ChangeDesktopMode.txt呼び出し)
【ウィンドウ】
・ショートカットXが2個ある不具合の修正
・1〜9のウィンドウ切り替えが自動挿入されないように、ウィンドウ整列系のシステムコマンドを階層下に配置した
※タイトルバーのアプリケーション文字列削除した際に自動挿入されるコマンド名が表示されなくなるための措置です。
●初期メニューに無いコマンドの変更
・選択アイテムに隠し属性を付与するを追加(ID_FILE_SET_HIDDEN)
・画面分割の際にパスを入れ替えるを追加(ID_2WINDOW_EXCHANGE_PATH)
・画面分割の際にアクティブペインのパスにそろえるを追加(ID_2WINDOW_SET_ACTIVEPATH)
・ディレクトリ内検索へフォーカス移動(ID_FOCUS_SERCH)
・アイコンサイズ増/減コマンド追加(ID_LIST_ICON_SMALL/ID_LIST_ICON_LARGE)
・表示モード送り/戻しコマンド追加(ID_VIEW_MODE_DOWN/ID_VIEW_MODE_UP)
●表示モード設定
・簡易詳細を削除
・並べ表示(縦)の選択肢を削除
●オプション
・協力者が現れなかったので、色弱の方向けの開発協力者の募集を撤去
・スキンテーマの設定を追加
・リスト→マウス→左ボタン長押しでコンテキストメニューの表示を削除
・キー割り当ての2画面モードを削除
・リスト初期値の簡易詳細、並べて表示(横)の削除
・フォルダ設定の簡易詳細、並べて表示(横)の削除
・ディレクトリ内検索の色指定追加
●キー割り当て
・Ctrl+Sをディレクトリ内検索へフォーカス移動(ID_FOCUS_SERCH)に割り当て
・コマンドモード、インクリメンタルサーチモード、2画面モードの「F11」の初期値を削除
●ディレクトリ内検索
・フォーカス移動コマンドの動作
・メインメニューからの切り替え
・検索エリアへの入力でリストのアイテムを色分け
・Enterで次の候補へフォーカス移動
・Shift+Enterで次の候補へフォーカス移動
・Ctrl+Enterで再色分け
・tabでリストへフォーカス移動
・入力内容が空なら非表示にする
・新規で追加したボタンへチップテキスト付与
・アイコンお絵かき&画像貼りこみ
・Ctrl+Dでフィルタにフォーカス移動
・Ctrl+Sで入力内容で選択コマンドの発行
・Ctrl+Rでリストの選択状態を解除するコマンドを発行
・全て選択ボタンで選択/チェック付与
▲アドレスバー/フィルタエリアとのレイアウト連携(動作するが定数を使っているので要チューニング)
▲次を検索(Enter)/前を検索(Shft+Enter)/再色分け(Ctrl+Enter)のボタン、選択数の表示の必要性の検討中
●アイコン取得周りの性能改善
・小アイコン、中アイコンをDPI対応にした
▲・アイコン取得に1秒以上の時間がかかる場合に、以降のアイコン取得を全てあきらめる処理を追加(検証のためコメントアウト中)
・アイコン取得スレッドの中断ロジックの精度を向上
・性能向上のための検証を行いやすいように、アイコン取得方法をブロック構造にした
・IShellIconによる取得の場合、失敗したら条件を変更してリトライするのではなく失敗を見越して処理分岐するように変更
・アイコン取得/縮小画像取得後の更新は、逐次更新するように変更(縮小画像中のときだけやっていたものを全てに適用)
・アイコン、オーバーレイアイコン、詳細情報取得の更新リトライ回数を減らした
・Vistaではシステムキャッシュを優先的に使用するように変更
・Windows7以降では、システムキャッシュを優先使用し、システムマップからインデックスを積極使用するように変更
※スクリプトでアイコン取得のアルゴリズムを切り替えられるようにした(検証用)
CheckGrammar=1
var $selecttext$
$selecttext$ = Input, アイコン取得モードを設定します 0:簡易アイコン 1:キャッシュから取得 2:IShellIcon(ウィルススキャンの影響大) 4:SHMapPIDLToSystemImageListIndex(exe,lnk,icoなど取得不可) 5:SHGetFileInfo(万能だが激遅) それ以外:標準動作
system_command=20000,$selecttext$
PostMessageAll=33301
●フィルタ
・Ctrl+Sでディレクトリ内検索へフォーカス移動する機能の追加
・フィルタの説明テキストを除去
●パス文字列操作の算術スクリプトの追加
・GetPath
渡された文字列をフルパスのファイル名とみなし、パスの部分を切り出します。
※末尾の\を検索し、それ以前の文字列を切り出します。
【書式】
変数 = GetPath,フルパス文字列
【例】
var $a$ = GetPath,C:\test.txt
「C:\」を格納
・GetName
渡された文字列をフルパスのファイル名とみなし、ファイル名(拡張子を含まない)の部分を切り出します。
※パス分解APIの都合上、文字列が256文字以上の場合は結果が保証されません。
(現在は投入文字列を返しますが、予告無く変更される可能性があります)
【書式】
変数 = GetName,フルパス文字列
【例】
var $a$ = GetName,C:\test.txt
「test」を格納
・GetExt
渡された文字列をフルパスのファイル名とみなし、拡張子の部分を切り出します。
※パス分解APIの都合上、文字列が256文字以上の場合は結果が保証されません。
(現在は投入文字列を返しますが、予告無く変更される可能性があります)
【書式】
変数 = GetExt,C:\test.txt
【例】
var $a$ = GetExt,C:\test.txt
「.txt」を格納
・RemoveLastSeparator
渡された文字列の末尾に\が付いている場合、これを1つ取り除いた文字列を返します。
※「C:\hoge\\」のように末尾に\記号を2個続けて記述したイレギュラーな文字列の場合も1個しか除去しないことにご注意ください。
【書式】
変数 = RemoveLastSeparator,C:\test.txt
【例】
var $a$ = RemoveLastSeparator,C:\
「C:」を格納
・SubString
指定文字列を指定の位置から指定長の文字を切り出して返します。
空文字は返せませんので、取得できない場合は投入文字列を返します。
※開始位置と、切り出す文字数には変数展開するようになっていません。(▲)
※指定文字列に,が含まれていても正しく切り出せますが、項の数が少なくてもエラーになりません。(▲)
【書式】
変数=SubString,開始位置(0基点),切り出す文字数,指定文字列
【例】
var $a$ = SubString,2,3,123456789
「345」を格納
●その他スクリプト
・UBJumpでルートパスへ移動できるように変更
・UBJumpの有効文字列の判定処理を厳密に行うようにし、走査に失敗した場合の処理を追加
●その他
・旧型プラグインのインターフェイスを削除
・左ボタン長押しでコンテキストメニューを表示する機能の削除
・ディレクトリ内検索の実装までのつなぎであった、アドレスバーへのテキスト+Enter/Shift+Enterで前後の候補へ移動する機能の削除
・ウィルススキャンの種類によって、アイコン取得速度がやたらと遅くなる環境対策としてキャッシュを優先使用するように変更
・スクリプトのスレッドカウンタを2→1になるように変更
・ドライブアイコンの生成速度を向上(通常はキャッシュがあるので、さほど恩恵はない)
・ウィンドウ管理バーのアイコン描画を高速化
(ついでにタブバーなどもフォルダアイコンを取得するようにしてみたが、結構引っかかる感じがしたので封印)
●Brws.exeの強化(HTMLビューア)
・IE7互換モードコマンド追加
・IE8互換モードコマンド追加
・IE9互換モードコマンド追加
・IE10互換モードコマンド追加
・IE11互換モードコマンド追加