AirCraft フォルダのパスの取得方法について説明します。フォルダの取得には、いくつか方法があります。ここでは2通りの方法について説明します。
AirCraft Ver.2.61 以降の場合は、神林宏幸さんが提唱の STAMP (Support Tool's Aerodrome Management Project for "AirCraft") にインストーラが対応しています。そのため、インストーラでインストールしたものについては、以下の方法で AirCraft フォルダを取得することができます。Delphi を例に取っています。
具体的には、Windows フォルダにある ACINFO.INI ファイルの Application セクションの Path キーの値を取得します。
なお、STAMP の詳細については、FAIRTERM フォーラムの4番データライブラリにて仕様が公開され、9番会議室にて情報交換が行われています。
uses に IniFiles を追加。
function GetAirCraftDirectory:string;
var
windir:string;
len:Integer;
begin
SetLength(windir, FILENAME_MAX);
len := GetWindowsDirectory(PChar(windir), FILENAME_MAX);
if len > 0 then
begin
SetLength(windir, len);
with TIniFiles.Create(windir + '\ACINFO.INI') do
beign
try
Result := ReadString('Application','Path','');
finally
Free;
end;
end;
end
else
Result := '';
end;
AirCraft 2.5 から OLE オートメーション機能が追加されたので、その情報をもとに AirCraft.exe のパスを取得する方法です。フォルダではなく、AirCraft.exe 自身のパスですので注意してください。なお、同じマシンに複数のAirCraft.exe を導入して、それをショートカット等で切り替えながら利用している場合には使えない方法ですが、その場合は、どのみち自動認識はできないことと思います。
処理の内容は、まずレジストリの HKEY_CLASSES_ROOT 以下で、AirCraft.Application\CLSID というキーを探します。そのキーの値(<ACCLSID>とします)をもとに、HKEY_CLASSES_ROOT\CLSID\<ACCLSID>\LocalServer32 キーのデフォルトの値を求めます。それが AirCraft.exe のパスです。
uses に Registry を追加。
function GetAirCraftPath:string;
var
AC_CLSID:string;
begin
Result := ''; // 失敗したときは ''
with TRegistry.Create do
begin
RootKey := HKEY_CLASSES_ROOT;
if OpenKey('AirCraft.Application\Clsid', False) then
begin
AC_CLSID := ReadString('');
CloseKey;
if (AC_CLSID <> '') and
OpenKey('CLSID\' + AC_CLSID + '\LocalServer32', False) then
begin
Result := ReadString('');
CloseKey;
end;
end;
Free;
end;
end;
AirCraft.exe が起動しているかどうかは、AirCraftForever という Mutex が存在しているかどうかで調べられます。次のようになります。
function IsAirCraftResident:Boolean;
var
hMutex: THandle;
begin
hMutex := OpenMutex(MUTEX_ALL_ACCESS, False, 'AirCraftForever');
if hMutex <> 0 then
begin
CloseHandle(hMutex);
Result := True;
end
else
Result := False;
end;
予約時に参照されるコントロールファイルは、実際には仕様が公開されていない のですが、通常の発言などは仕様が変わる部分はあまりないと思いますので、そ の部分だけに限定して説明いたします(実際には、いろいろな機能がありま す)。
まず、ファイル名は何でもかまいませんが、予約コントロールファイルの拡張子 は .CTL である必要があります。これに付随する発言ファイルは、慣習的に予約 コントロールファイルと同じボディ部を持ちますが、実際には別な名前でもかま いません。これは、コントロールファイル内で発言ファイル名を指定しているか らです。
通常のフォーラム会議室の発言で必須のコントロールファイルのフィールドは以 下の通りです。
LOCATION: FAIRTERM MES 13 <-- 発言場所 COMMAND: SAY <-- 発言コマンド(SAY) FROM: PFF01344 <-- 発言ID SUBJECT: 発言練習です <-- 題名 FILE: UP812404.TXT <-- 発言本文のファイル名 CONTENT-TYPE: PLAIN-TEXT
この他に、COLUMNS(発言パッドの参照する桁数)、LINES(行数)、QUOTE-CHAR (引用符設定)、FROM-NAME(ハンドル名)などもありますが、これらは主とし て発言パッドが参照するもので、編集しないで送信する場合にはなくてもかまい ません。
コメントの場合は、少し変わります。以下は、オプションのフィールドもつけた 状態です。
LOCATION: FAIRTERM MES 19 REFERENCE: FAIRTERM MES 19 #6780 <-- コメント先の発言の番号 COMMAND: RE 6780 <-- 発言コマンド(RE) FROM: PFF01344 SUBJECT: RE:ちょっとした心配 FILE: UP812404.TXT COLUMNS: 72 LINES: 66 CONTENT-TYPE: PLAIN-TEXT QUOTE-CHAR: | FROM-NAME: DUDE
COMMAND が RE に変わる点を除けば、その他はほぼ普通の発言と同じです。 REFERENCE は、発言パッドで参照する場合に必要ですが、予約処理の際には必要 ありません(COLUMNS 等と同様)。
この書式にのっとって予約コントロールファイルと、発言本文のファイルを作成 すれば、外部のソフトウェアで発言予約を作成することが可能です。
ARLIST.DAT ファイルの書式は次の通りです。
<T>,<N>,<NAME>,<N>,<D>,<T>,<C>,<FILE>,<CAPTION>CSV 形式で、各フィールドはコンマで区切ります。また余分なスペースはできる だけ避けてください。各フィールドの内容は、次の通りです。
<T> .. 種別 M = 電子会議室 L = データライブラリ <N> .. シリアル番号 書庫リスト内でのユニークな番号。通常は、順番と一致している。 <NAME> .. フォーラム名(サービス名) <N> .. 旧会議室番号(分からない場合は 0) <D> .. 日付 <西暦4桁>/<月>/<日> のフォーマット <T> .. 時刻 <時>:<分>:<秒> で24時間制のフォーマット <C> .. N で固定 <FILE> .. ファイル名(ディレクトリ名は含まない) <CAPTION>.. タイトル
例 M,1,FAIRTERM,20,1997/12/29,00:40:36,N,AR_9707A.LOG,"新着情報・FAIRTERM からのお知らせ 1997/07/06 -"
FAIRTERM の20番会議室のログを書庫に格納した例。格納した日付が 1997/12/29 00:40:36 で、ファイル名は AR_9707A.LOG。タイトルなどフィール ドにスペースやコンマが入る場合は " でフィールドを囲む。
※ファイル名についてファイル名は任意のものでかまいませんが、AirCraft の書庫サルベージ機能 (書庫に登録されていないファイルを検出する機能)などの連携もあるため、本 文ログファイルの場合は AR_ ではじまり .LOG の拡張子、リストログファイル の場合は AR# ではじまり .LOG の拡張子のファイル名にすると便利です。 AirCraft では、次のような規則で名前をつけています。
本文ログ AR_<年><月><順番>.LOG リストログ AR#<年><月><順番>.LOG
<年> は2桁の西暦で、<月>もゼロプレフィクスの2桁です。<順番>はその月に 同じフォーラムで書庫送りになった順番で、最初に書庫送りになったものは A、 次は B、、、と順送りに名前がつけられます。会議室の変動はそれほど多くない と見て、1ヶ月で最大26個の書庫を新規作成できます。<年>や<月>や<順番> は、書庫管理機能は見ていないので、同一フォーラムで重複しないものであれば 好きな文字列でかまいません。
例1:AR_990401.LOG
1999/04 に1番目に作成された書庫(本文ログ)
例2:AR#001106.LOG
2000/11 に6番目に作成された書庫(リストログ)