伺か互換システムのFile-mapping Object(通称FMO)を利用して、現在のローカルマシンで起動している伺か互換システムの情報を取得します。
2003/04 より、'SakuraFMO'のミューテックスオブジェクトによる、FMO同時アクセスのブロックに対応し、安全性が増しています。
2003/04現在でこの'SakuraFMO'によるシンクロナイゼーションに対応している伺か関連ソフトウェアは、
です。
このコンポーネントは、取得したHWNDに対して、TDirectSSTP
と併せて使うとより効果があります。
"Sakura"以外のFMOを読み取る機能があります。
SakuraSeekerはFMO先頭4バイトに定義されているFMOサイズを正しく解釈します(任意のサイズのFMOが扱えます)。
TObject
- TPersistent
- TComponent
-
TSakuraSeeker
TSakuraSeekerはこれらの仕様を参考にして設計されています。
伺か…メモリオブジェクト
http://sakura.wondernet.tv/objects.html
SSP技術資料…FMO関連の資料
http://ssp.shillest.net/docs/fmo.html
procedure Button1Click(Sender: TObject);
var i: integer;
begin
with SakuraSeeker1 do
begin
BeginDetect;
for i := 0 to Count-1 do
ShowMessage('Name:' + Process[i].SetName + #13#10
+
'HWND:'+ IntToStr(Process[i].HWnd));
end;
end;
with SakuraSeeker1 do
begin
BeginDetect;
if ProcessByName['さくら'] <> nil then
Handle := ProcessByName['さくら'].HWnd;
end;
Count
プロパティが更新されます。TargetFMOName
にはFMO識別名(通常は「Sakura」)を、TargetID
にはプロセスID(MD5値など)を渡します。BeginDetect
の後に意味を持ちます。発見されたプロセスの数を取得します。Process
プロパティにアクセスする場合の添え字の上限として使用します。TSakuraProcess
のインスタンスを返します。TSakuraProcess
のインスタンスを検索して返します。ProcessByName
はnameをキーに検索します(例「さくら」)。同じ名前のものが2つ以上ある場合には最初に見つかったものが返ります。ProcessBySetName
はname,keronameの組をキーにします。コンマで区切ります(例「さくら,うにゅう」)。同じ名前のものが2つ以上ある場合には最初に見つかったものが返ります。ProcessByID
はプロセスIDをキーにします。(本来の仕様ではMD5値ですが、何らかのユニークな文字列が入ります)BeginDetect
するかどうかを設定します。BeginDetect
ですべてが順に解析されます。TSakuraSeekerGetMutexNameEvent = procedure (Sender: TObject; var
Name: String) of object;
Name
パラメータに、これから解析しようとするFMOの識別名が入っているので(FileMappingTarget
をカスタマイズしない限りは「Sakura」です)、そのFMOを保護するためのMutex識別名を、Nameに代入して終了してください(基本的には「SakuraFMO」)。このイベントを指定しない場合は、「SakuraFMO」というように、FMO識別名に「FMO」が付いたものをMutex識別名として利用します(標準の動作です)。BeginDetect
終了後に呼ばれます。BeginDetect
の後、その解析結果が前回の結果と違っていた場合に呼ばれます。このイベントに応じて、アプリケーションのコントロールを書き換えたり、ユーザにプロセスの起動・終了を通知したりすることができます。FileMappingTarget
で指定されるいずれかのFMOの中身が1バイトでも変わっていた場合に呼ばれることに注意してください。サーフィス番号を毎秒のようにFMOに登録するアプリケーションがありますので、プロセスの数や起動しているゴーストに全く変化がなくてもこれが呼ばれることがあります。