# 画面項目説明

※ 以下はVer1.8について記述したものです。

## 監視対象

### 監視するフォルダ

監視するフォルダを指定します。

通常はローカルマシン上のディスクを指定します。

ネットワークやリムーバブルドライブ等、監視中に監視が中断されうるフォルダを指定する場合は、「監視方法の詳細」で監視方法を調整する必要があります。

#### 使用できる特殊変数

特殊変数 | 展開される内容
--- | ---
%CONFDIR% | ～\APPDATA\fwatch.ini\のディレクトリパス(末尾は必ず「\」で終わります。)
%MODULEDIR% | FWatch.exeのあるディレクトり(末尾は必ず「\」で終わります。)
%INIDIR% | fwatch.iniのあるディレクトリ(末尾は必ず「\」で終わります。)
%LSTDIR% | lstファイルのあるディレクトリ(末尾は必ず「\」で終わります。)

上記以外は環境変数から展開されます。

### 監視するファイル

監視するファイル名を指定します。

ファイル名の指定にはワイルドカードを使用することができます。

「;」で区切ることで複数のファイル名を指定できます。

すべてのファイル名にマッチさせるには単に「*」と指定します。

既定ではファイル名の大文字・小文字は区別されません。(fwatch.iniファイルの設定により、区別できるように指定できます。)

#### ワイルドカード

文字 | 意味
--- | ---
? | 任意の1文字にマッチ
* | 任意の0文字以上にマッチ

### パラメータ

#### サブフォルダの最大深さ

監視対象のフォルダの最大深さを指定します。

0の場合は指定されたディレクトリ上のものだけを監視します。(推奨)

変更通知があるたびに、監視ディレクトリの全ファイルの状態をスキャンするため、総ファイル数が多いとマシン負荷が高くなり、 アクションを判定するまでの遅延時間も発生するため、あまり多くのファイルを対象にすることは避けてください。

(ファイル数が多ければ、その分、メモリとCPUパワーも消費されますし、監視状態を保存するファイルサイズも大きくなり保存・復帰にかかる時間も長くなります。)

また、スキャンが完了しなければアクションは実行されませんから、スキャン時間は、そのままアクション実行までの遅延時間となります。

ファイルの変更を検知してからアクションを実行するまでの待機時間よりも、全ファイルを走査できる期間が十分短いようにするべきです。

(マシンスペックによりますが、ローカルディスク上の単一フォルダに対する1000個程度のファイルであれば、あまり気にする必要はないでしょう。そうでなければ予め調査するほうが良いでしょう。)

(たとえばルートディレクトリを監視すると、通知があるたびにディスク上の全ファイル(数万個以上でしょう)のファイルを走査することになり、その上、通知も多数発生しますので、ディスクアクセスが止まらなくなり全く現実的ではありません。)

#### ファイルサイズが落ち着くまで待機(x0.1秒)

ファイルの変更を検知してから、アクションを実行するまでの最低待ち時間を指定します。

この時間内にサイズまたは更新日付の変更が検知された場合は、その時点から待ち時間をやり直します。

この時間を経過してもサイズおよび更新日付ともに変更がない場合のみアクションが実行されます。

ファイルを読み取りオープンできない場合もファイルが使用中であるとみなし、待ち時間がやり直されます。

※ したがって、アクセス権のないファイルが作成された場合はアクセス権が得られるまで、この指定時間ごとに何度でもチェックされることに注意してください。

※ ファイルの変更を検知したのちに、そのファイルにアクセスできなくなった場合も同様にアクセス可能になるまで、この指定時間ごとに何度でもチェックが繰り返されます。

#### ファイル削除検出を保留する時間(x0.1秒)

ファイルが削除されてから実際に削除されたと認識されるまでの時間を指定します。

この時間内に同名のファイルが作成された場合は、ファイルは単に更新されたと認識され、 サイズ、日付が削除前と変らなければ変更なしとみなされます。

ディレクトリのスキャンを開始できなかった場合、たとえばネットワークドライブが切断されているなどの場合、スキャンは行われずファイルの状態も変更されません。(削除とはみなされません。)

#### ファイル更新時間を同一とする範囲(mSec)

ファイルの更新日時が同一であると判定される精度を指定します。

前回スキャン時から、現在のファイルの更新日時が、この精度以内の差異しかない場合は更新とみなされません。

#### アーカイブ属性のファイルのみ通知する

アーカイブ属性でないファイルは存在しないものと見なします。

つまり、アーカイブ属性を解除するとスキャン結果から除外されるため、結果としてファイルが削除されたのと同じ扱いとなります。

## 監視方法の詳細

### ファイル変更通知APIを使用する。

フォルダ監視APIの使用有無を指定します。

フォルダ監視APIにより、指定したディレクトリ(最大深さが0以外の場合はサブフォルダのいずれか)でファイルが作成されるか更新されるとスキャンが必要であることを通知します。

対象となるファイル名に該当しないものであってもスキャンは開始されます。(指定されているファイル名に該当するかはスキャン時に判断されます。)

スキャン中でも通知を受け付けることができます。スキャン中に通知された場合は次回のスキャンにスケジュールされます。

フォルダ監視APIを使用しない場合は定期フォルダチェックのみで変更の有無を判定します。

ローカルマシン上の任意のフォルダを監視する場合は監視APIを使用するほうが良いでしょう。

ネットワークドライブ等での監視APIの通知精度は相手側のOSの精度にも影響されます。(Windows98ではネットワークドライブの監視をしても通知されません。)

※ リムーバブルディスクに対してファイル監視APIを使用すると、監視は可能ですがデバイスを使用中となるため、イジェクトすることができなくなります。

※ ネットワークに対して監視すればサーバ側(監視される側)は、監視を停止するまで、ネットワーク接続がされた状態のままとなります。

#### フォルダ監視APIの試行間隔(Sec)

フォルダ監視APIが準備できなかった場合、もしくはエラーが発生した場合に再試行するまでの時間を指定します。

監視対象フォルダへのアクセスができないなどの場合は監視APIの準備に失敗しますが、 この指定時間ごとにリトライすることができます。

0を指定した場合はただちにリトライされます。

一度エラーになった場合、すぐにリトライしても再度エラーになる確率が高いので、ある程度の間隔を置いた方が良いでしょう。

これはネットワークドライブ等、FWatchの起動タイミングによっては準備できていないフォルダを指定する場合を想定しています。

#### フォルダ監視APIの有効期間(Sec)

フォルダ監視ハンドルの有効期間を指定します。

0を指定した場合は無期限となります。(通常は0です。)

この時間を超えた場合はフォルダ監視ハンドルは再作成されます。

ネットワークドライブ等、何らかのトラブルによりエラーも出さずに通知が受け取れなくなった場合に備えるものです。

### 定期フォルダチェック間隔(Sec)

フォルダ監視APIの使用の有無にかかわらず、一定時間ごとにフォルダをチェックする間隔を指定します。

0の場合は定期的な監視は行いません。

監視APIの使用の有無に関わらず、最低、この期間ごとには変更がチェックされることになります。

ネットワークドライブ、リムーバブルディスク等での使用を想定しています。

### 連続する通知をまとめて処理

通知をうけてからフォルダをチェックするまでの待ち時間を指定します。

この期間内に複数回の通知があったとしてもディレクトリのスキャンは1つにまとめて行われます。

最初に通知をうけてから指定時間を経過すれば通知の回数に関わらずスキャンは開始されます。

## 実行するアプリケーションの設定

### アクション

「アプリケーション」に指定したドキュメントまたはアプリケーションがサポートする任意のアクションを指定できます。

ただし、*で始まるものは特殊なアクションです。

#### 通常のアクション

*で始まるもの以外のアクションは、エクスプローラでファイルを右クリックしたときの「開く」「編集」「印刷」などのアクションに対応しています。

「アプリケーションのパス」で指定したファイルのドキュメントタイプがサポートしている動詞を指定することができます。

それ以外を指定すると実行時にエラーとなります。

#### *SOUNDアクション

何らかのアプリケーションを実行するかわりに、メッセージビープまたはサウンドを鳴らすだけのアクションです。

アプリケーション名として、システム定義のイベント名を指定するか、*.wavファイルを絶対パスで指定します。

たとえば、アプリケーション名に「MailBeep」とすればメール通知音となります。

アプリケーション名が省略された場合は通常の情報メッセージ音となります。

それ以外のパラメータは無視されます。

#### *IPMSGアクション

UDP通信でIP Messenger に対してメッセージを送信します。

アプリケーション名に送信先のIPアドレス(もしくはホスト名)を指定します。

パラメータにメッセージ内容、カレントディレクトリに「ユーザ名@ホスト名」の形式で送信元名を指定します。

(カレントディレクトリを省略したか、コロンが含まれる場合はユーザ名とホスト名は自動的に設定されます。)

それ以外のパラメータは無視されます。

送信できたかどうかはチェックされません。

受信先のIP Messengerが起動されているかどうかもチェックせず、起動されていない場合はパケットは単に破棄されます。

またUDPによる送信のため512バイトを超えた場合にパケットが破棄されるかどうかはネットワーク環境次第です。

(ローカルマシン内であれば、あるいはルータを超えなければ多分問題有りません。)

メッセージはShift_JIS形式で送信されます。

#### *PROCESSアクション

プロセスを直接起動します。

*.exe(もしくは*.com)の実行ファイルそのものを指定しなければなりません。(ドキュメントや*.batは直接起動できません。)

実行ファイルへのパスは絶対パスが必要です。

実行ファイルの指定方法は２種類あります。

- アプリケーション名にexeへのフルパスを指定し、パラメータに引数を指定する。
- アプリケーション名を空にして、パラメータにexeへのフルパスと引数をコマンドライン形式で指定する。

後者を推奨します。(後者のほうが汎用的です。アプリケーションによっては前者の形式は使用できません。)

詳細はMSDNのCreateProcess を参照ください。)

*.bat/*.cmdのバッチファイルを起動するならば、アプリケーション名を空とし、パラメータに「`C:\windows\system32\cmd.exe /K "foo.cmd"`」のようにフルパスでcmd.exeを指定し、 引数として*.bat/*.cmdファイルへのパスを指定してください。(*.bat/*.cmdファイルのあるカレントディレクトリの指定も重要です。)

#### *RUNASアクション

「ログオンユーザの偽装」で設定されたユーザでプロセスを開始します。(Windows2000以降且つUNICODEビルドのみ使用することができます。)

UNICODEビルドでない場合、もしくはユーザが指定されていない場合は*RUNASは、*PROCESSと同じとなります。

コマンドラインの記述方法は「*PROCESS」と同じです。

「*RUNAS;load_profile=true」はプロセス開始時に指定されたユーザの環境変数等のプロファイルを読み込みます。

ネットワークドライブ等も復元されますが、そのユーザの権限で開けないネットワークドライブはユーザの対話的な操作なしに自動にはアクティブにならないことに注意してください。

プロファイルの読み込みには時間がかかるため、頻繁に実行される場合、あるいは大量に実行される場合には適していません。(起動できずエラーとなる可能性があります。)

内部的にはCreateProcessWithLogonW API を使用しています。

### アプリケーションのパス

通常のアクションの場合、exeファイルの他、ドキュメントファイルやスクリプトファイルを直接指定することができます。

環境変数にパスが設定されていればexeファイルはフルパスで指定する必要はありません。

省略した場合はアクションは実行されません。

*RUNAS, *PROCESSアクションの場合は、アプリケーションとしてexeファイルを指定する場合は、パスは必ずフルパスでなければなりません。

*IPMSGアクションの場合、送信先のIPv4アドレスまたはホスト名を指定します。(空の場合は送信されません。)

*SOUNDアクションの場合、システムでサポートされているサウンドのイベント名か*.wavファイルへのフルパスを指定します。省略した場合はデフォルトの情報音となります。

いずれのアクションでも、特殊変数の展開をサポートしています。

### カレントディレクトリ

実行時のカレントディレクトリを指定します。

特殊変数の展開をサポートしています。

省略時はFWatch.iniの設定に従って、監視ディレクトりもしくはFWactch.exe起動時にカレントディレクトリの、いずれかが設定されます。

*IPMSGアクションの場合は、「ユーザ名@ホスト名」の形式で送信者情報を設定します。

コロンが含まれるか、省略された場合はデフォルトのユーザ名とホスト名(現在のログオンユーザとローカルホスト名)が使用されます。

*SOUNDアクションでは無視されます。

### パラメータ

通常のアクション, *RUNAS, *PROCESSアクションでは、アプリケーション起動時に指定される引数を指定します。

引数を複数子指定する場合は空白で区切ります。

引数に空白が含まれる場合はダブルクォートで囲む必要があります。

入力欄は改行コードを受け付けますが、改行またはタブを入力した場合、プロセス起動時の引数として空白に置換されたものが使用されます。

*RUNAS, *PROCESSをアクションに指定している場合は、アプリケーション名を空にし、そのかわりにパラメータ名として、実行ファイルへのフルパスと引数からなるコマンドラインを記述することができます。

*IPMSGアクションでは、送信するメッセージを指定します。改行は、そのまま送信されます。

*SOUNDアクションでは無視されます。

いずれのアクションでも、特殊変数の展開をサポートしています。

### 使用できる特殊変数

アプリケーションのパス、カレントディレクトリ、パラメータには以下の特殊変数(前後を%で囲んだもの)を使用できます。

変数名は大文字小文字は区別されません。

これらの特殊変数のうち、大部分はFWatch.iniによって変数名を調整することができます。

特殊変数 | 展開される内容
--- | ---
PATH | 対象ファイルのフルパス
FULLPATH | PATHと同じ
DIR | 対象ファイルのフォルダ
DIRNAME | DIRと同じ
NAME | ファイル名
BASENAME | NAMEと同じ
NAMEBODY | ファイル名から拡張子を除いたもの
DATE | 現在日YYYYMMDD
TIME | 現在時刻HHMMSS
SPATH | PATHのショートネーム版
SDIR | DIRのショートネーム版
COUNT | 起動した、または起動を試行した回数 (監視状態を保存する場合は回数も保存される。そうでなければ開始ごとに0にリセットされる。)
RUNCOUNT | アイテムごとの実行回数 (監視状態を保存する場合は回数も保存される。そうでなければ開始ごとに0にリセットされる。) (ファイルが削除されたのちに同名ファイルが作成された場合はカウンタは0にリセットされる。)
ATTRIBUTE_DIRECTORY | 対象ファイルがディレクトリであるか?(ファイルしか通知しないので常に0となる。)
ATTRIBUTE_ARCHIVE | 対象ファイルがアーカイブ属性であれば「1」、そうでなければ「0」
ATTRIBUTE_SYSTEM | 対象ファイルがシステム属性であれば「1」、そうでなければ「0」
ATTRIBUTE_HIDDEN | 対象ファイルが隠し属性であれば「1」、そうでなければ「0」
ATTRIBUTE_READONLY | 対象ファイルが読み取り専用属性であれば「1」、そうでなければ「0」
WATCHDIR | 監視ディレクトリ(末尾は必ず「\」で終わります。)
RELATIVEPATH | 対象ファイルの監視ディレクトりからの相対パス(フォルダが1階層以上ある場合のため)
RELATIVEDIR | 対象ファイルの親ディレクトリの監視ディレクトりからの相対パス(フォルダが1階層以上ある場合のため)
CONFDIR | ～\APPDATA\fwatch.ini\のディレクトリパス(末尾は必ず「\」で終わります。)
MODULEDIR | FWatch.exeのあるディレクトり(末尾は必ず「\」で終わります。)
INIDIR | fwatch.iniのあるディレクトリ(末尾は必ず「\」で終わります。)
LSTDIR | lstファイルのあるディレクトリ(末尾は必ず「\」で終わります。)

上記以外はFWatch.exe起動時の環境変数より展開されます。

### ウィンドウサイズ

アクション実行時、アプリケーションに指定したウィンドウサイズで開くように要求します。

要求に従うかどうかはアプリケーション次第です。

*IPMSG, *SOUNDアクションでは意味を持ちません。

ウィンドウのサイズ | 意味
--- | ---
最小化(非アクティブ) | 最小化した状態で開きます。またフォーカスを移動させません。
通常 | アプリケーションのデフォルトのサイズで画面を開きます。
最大化 | アプリケーションを最大化した状態で開きます。
非表示 | アプリケーションを非表示の状態で開きます。
最小化 | アプリケーションを最小化の状態で開きます。フォーカスの移動を禁止しません。

※ 「非表示」はバッチファイル等、全く対話する必要がないものに限ります。エラーが発生した場合でも一切の対話的操作が必要ないことを確認してください。 エラーが発生してもウィンドウが表示されていないため、操作できないだけでなく、そもそもエラーが発生しているかどうかも分りません。

### 同時実行プロセス数

同時実行プロセス数を制限します。指定した数値以上のプロセスを起動しません。

その場合、変更通知されたファイルは先行するプロセスの終了待ちとなります。

終了待ちをするファイルが複数個ある場合、実行順序は、ファイルの更新日付が古いもの順となります。(同位の場合はファイルのパス順となります。)

0の場合はプロセス数は制限しません。

アプリケーションとしてドキュメントを指定して開く場合、つまり、*.exe以外を指定している場合は常に0を設定してください。

(*.exeではなくドキュメントを指定した場合、マルチドキュメントをサポートするアプリケーション等は同じプロセス上でドキュメントを開くためです。 ただし、SDIアプリケーションなど1つのドキュメントで1つのプロセスが起動することが分っている場合は指定しても問題ありません。)

*IPMSG, *SOUNDアクションでは意味を持ちません。

#### 同一対象ファイルは同時実行せず無視する。

変更検知された同一の対象ファイルが現在アクションを実行中である場合、通知を捨ててアクションを実行しないようにします。(つまり、アクションがスキップされます。)

同一対象で複数プロセスを起動させたくない場合、もしくは起動されたプロセス自身が対象ファイルを更新するような場合に指定します。

アプリケーションとしてドキュメントを指定して開く場合、つまり、*.exe以外を指定している場合は常に無効に設定してください。

(*.exeではなくドキュメントを指定した場合、マルチドキュメントをサポートするアプリケーション等は同じプロセス上でドキュメントを開くためです。 ただし、SDIアプリケーションなど1つのドキュメントで1つのプロセスが起動することが分っている場合は指定しても問題ありません。)

*IPMSG, *SOUNDアクションでは意味を持ちません。

## ログ

### 監視通知のログファイル

ログファイルの出力先を指定します。

省略された場合はログは出力されません。

ログファイルは同一監視リストファイル上の複数の監視設定で同じログファイルを指定してもかまいません。これらは同期してログファイルに書き込まれます。

別のプロセス上からログファイルを共有する場合は、FWatch.iniの設定で排他制御することもできます。(ただし、Windows2000以降のみ)

このほか、FWatch.iniの設定により、ログファイルは日付が変った場合に.bakファイルとしてローテートさせることができます。

詳細は付属のFWatch.iniのコメントを参照してください。

#### ログの詳細度

ログレベルを指定します。

0-10を指定でき、数値が大きいほど詳細ログが出力されます。

デフォルトは「5」としていますが、使用用途に応じて調整ください。

うまくファイル検知できない場合などはログレベルを10にすると、より詳細な状況が分り問題解決しやすくなります。

ログレベル | 出力内容
--- | ---
0 | エラーのみ
1 | ファイル確定、開始、終了メッセージ、監視状態の保存・復元
2 | アプリケーションの実行、終了、アプリケーションの重複実行のスキップ通知
3 | 変更通知
4 | 監視ハンドルの作成、破棄、再作成、ログオンユーザの偽装・偽装解除
5 | 変更ファイルの確定待ち開始、削除確定結果
6 | 削除待ち、削除確定
7 | ディレクトリのスキャン結果、定期フォルダチェック、監視状態の保存(定期)
8 | 走査するディレクトリ、走査開始メッセージ
9 | 検出した全てのファイルの状態
10 | デバッグメッセージ、スキャン時のディレクトリ上のファイル一覧、検知ファイルの状態

## 開始時の監視状態

### 次回起動時に監視状態を復元するためのデータ保存先ファイル

監視状態を保存・復元するファイルを指定します。

省略した場合は監視状態を保存・復元しません。

ファイルが指定されており、起動時にファイルが存在しない場合は初回とみなして通常の初回スキャン動作となります。

起動時にファイルが存在する場合は前回の開始状態が復元されたのちスキャンが行われ、保存された監視状態(前回終了時点のスキャン結果)との差異から更新判定が行われます。

監視状態は、終了時、およびフォルダの変更通知があるたびに定期的に保存されます。

(この定期的な保存の間隔はFWatch.iniで調整できます。また、変更通知が発生しなければ定期的な保存も行いません。)

(監視状態を保存したのちに監視対象の設定を変更し、前回終了時のスキャン結果と新たなスキャン結果が変る場合、それらは全て更新ありと判定されることに注意してください。)

### 開始時点で存在するファイルも通知する。

開始時点で存在するファイルを、変更されたファイルとして認識するようにします。

つまり、起動した時点で監視フォルダに存在する該当ファイルすべてが変更済みと認識されます。

ただし、監視状態が復元された場合は、この指定の有無にかかわらず、保存された監視状態(前回終了時点のスキャン結果)との差異から更新判定が行われます。

## ログオンユーザの偽装

Windows2000以降のみサポートしています。Windows98では意味を持ちません。

(FWatch1.7/1.8ではサービス化をサポートしていないので、本項目は、通常は利用することはないと思われます。)

### 偽装した権限でフォルダチェックする。

指定したユーザの権限でフォルダの監視を行います。

プロセス実行時の権限、およびログファイルの書き込みの権限にも影響します。

プロセス起動時では、偽装を解除しFWatch起動ユーザに戻してからでなければ権限不足となるケースがありえます。

その場合、FWatch.iniの設定で偽装解除するように指定することができます。

ログファイルは偽装中であれば偽装中の権限で、そうでなければFWatch起動ユーザの権限で、それぞれ書き込まれることに注意してください。

※ Windows2000ではローカルセキュリティポリシーの「オペレーティング システムの一部として機能」が有効なユーザで実行していなければなりません。(gpedit.msc等で設定します。)

#### USER

フォルダ監視、および*RUNASアクション時に偽装するユーザを指定します。

#### DOMAIN

ドメインを指定します。

空の場合はローカルマシン上のユーザを意味します。

#### PASS

パスワードを指定します。

パスワードは監視リストファイルに平文もしくは暗号化されて書き込まれます。

暗号化する場合はFWatch.iniでパスワードを設定してください。パスワードが設定されていない場合は暗号化されません。

3DES112/3DES/DESの順で使える暗号化を試します。いずれも使えない場合は暗号化時にエラーとなります。

暗号化は最大でも3DES112の112ビット強度、最低でDESの56ビット強度しかありません。

また暗号化した場合、権限のないユーザがFWatch.iniにアクセスできないように(しかし、FWatch自身はアクセスできるように)アクセス権を設定してください。

## その他

### 監視を無効にする。(監視しない)

監視の実行有無を設定します。

FWatch起動時に監視リストファイルを読み込んだ場合、この設定に従い、監視が有効であればただちに監視を開始します。

なお、設定ファイルを変更せずとも、監視リスト一覧画面上から個々に監視の開始・停止を制御することができます。

設定では無効としておき、FWatch起動後に手動で個々に監視を開始するような使い方が考えられます。