Invalid signature

ここは俺の日記帳

Windows8 で Everything

Everything とは

Windows用の高速ファイル検索ツールである。
ワイルドカード正規表現、部分一致などなど、機能も充実している。 http://www.voidtools.com/

使えなくなっていた

XP時代にお世話になっていた Everything が 8 で動かない。
キーワード欄が空の時にドライブが表示されるだけでキーワードを入力すると
それも消える。

やっぱり UAC

しばらく放置してたが必要に迫られたので、どうにかできないか試行錯誤した。
試しに管理者として実行したら上手く行った。

不便になってる

起動した後、再度実行ファイルを実行してもウィンドウが開かなくなっている。
前は既に実行されている時に実行ファイルを実行するとフォーカスが移るように
なっていた。
今はいちいちタスクトレイ上のアイコンを右クリックして出したメニューから
「新規検索ウィンドウを開く」を選ばなければならない。
以前はファイラから開くようにしていたのでコレは非常に不便。

対策を講じる

まずは毎回 UAC のダイアログが出るのはうざいので、回避法を探した。
色々方法はあるようだが、セキュリティレベルを下げるようなことはしたくないので
タスクスケジューラを利用する方法を選択した。
タスクスケジューラで「最高位の特権で実行する」にチェックを入れたタスクは
UAC のダイアログが出ないらしい。

まずはスタートアップ用のタスクを作成

コントロールパネル→管理ツール
にタスクスケジューラはある。
スケジューラを開いたら
1. ウィンドウ上部のメニューバーにある「操作」から
「タスクの作成」を選択。
2. 「全般タブ」で名前と説明を記述し、「最上位の特権で実行する」にチェックを入れる。
3. 「トリガータブ」で「新規」を押し、「タスクの開始」を「ログオン時」にする。
4. 「操作タブ」で「新規」を押し、Everything の実行ファイルのフルパスを
「プログラム/スクリプト」欄に記入し、「引数の追加」欄に「-startup」と記入する。
5. 「タスクの作成」ウィンドウの OKボタンを押して終了。

ファイラとの連携

上の作業で毎回 UAC に五月蠅くされることはなくなった。
が、いちいちタスクトレイから呼び出すのは不便だ。 ヘルプを見たが、フォーカスが
合っていない状態で使えるキーボード操作は無い模様。
そこで「タスクスケジューラで作ったタスクを起動するショートカットを作る」
という方法を試した。
http://kenichiro22.hatenablog.com/entry/20100324/1269421680

タスク作成

このためのタスクの作るのだが、トリガーをどうしたら良いかわからなかった。
とりあえず「タスクの作成/変更時」ってのがそれっぽいからそれにした。
今のところ上手く行っている。
他にスタートアップの時と違うところは「操作」の設定時に引数を与えないこと。

ショートカットが使えない

このショートカットは上手く働いた。 しかし自分が使っているファイラ「あふ」
ではキー定義でもメニューファイルでもショートカットの呼び出しは失敗した。
そこでバッチファイルにショートカットに登録したコマンドを記述して登録すると
見事成功。

引数が渡せない

Everything はディレクトリのパス、空白の後にファイル名を入力すると、
検索対象をそのディレクトリ以下に絞れる。
実行ファイルから呼び出していた頃はファイラの開いているディレクトリを
引数として渡してこの機能を利用していた。
しかし今、スケジューラから起動している。 引数は付けられるが固定だ。
バッチファイルをスケジューラの対象にして・・・とかも考えたが、
結局 Everything に引数を渡せなかった。

閃き

あれ? 環境変数使えるかな? → 使えた。
じゃあ上のバッチに変数を変える処理加えたらイケるんじゃね? → イケた。
set コマンドではダメだったが、setx を使ったらイケた。
ちょっと空目しちゃうコマンド名ですね。

詳しくは、専用の環境変数を作り、タスクの引数に -path %環境変数名%
を設定する。 バッチファイルで schtasks を呼ぶ前に環境変数
引数を設定する処理を加える。 後はあふのキー定義で、バッチファイルのフルパスに
自ファイル窓のパスを引数として加えたものを追加する。

ただ、この方法だと環境変数に空文字を設定しても前回環境変数に設定したパスに
バックスラッシュとダブルクオーテーションがくっつくという、よくわからない
状態になるだけなので、キーワード欄が全く空の状態で呼び出したい場合は、
今わかってる限りでは引数がないバージョンのタスクを作るしかない。