SakuraSeeker

概要

Delphi用コンポーネントです。

「何か。(仮)」に実装されているファイルマッピングオブジェクト(FMO)を利用し、安全に、現在起動している「何か。(仮)」プロセスのインスタンスを取得します。DirectSSTPやSakura APIを使うときのお供にどうぞ。

SSPにも対応している、はず(未確認)。

製作者

(C)2001 naruto/CANO-Lab

ダウンロード

SakuraSeeker本体 Ver 20010503

使用条件

いわゆるフリーの範疇に含まれるソフトです。著作権は放棄していません。以下の条件にしたがってお使いください。

使い方

別ページにまとめるほどのものでもないので。

フォームに配置します。

BeginDetect メソッドを呼びだすことで、現在起動中のプロセスを取得して保持します。場合によってはTTimerコンポーネントと組み合わせて常に最新の結果を得ましょう。

BeginDetectが終了すれば、OnAfterDetection イベントが、さらにそれが前回の取得結果と異なっていた場合(と初回取得時)は、OnDetectResultChanged イベントが発生します(タイマーと組み合わせた場合に特に効果的)。

AutoDetect プロパティをtrueにしておけば、フォームのクリエイト時に自動的に BeginDetect が呼ばれます。

FileMappingTarget: TString プロパティは、ファイルマッピングオブジェクトの識別名リストです。"Sakura"の1行だけ入れておけばとりあえず大丈夫ですが、"ssp_Sakura"などを2行目以降に入れれば、それらも併せて、順番に検索します。(でも多分使わない)

んで、取り出した結果の取得方法ですが、3通りあり、どれも TSakuraProcess オブジェクトを返します。

property Count: integer read GetCount;
property Process[Index: integer]: TSakuraProcess; default;

この2つのプロパティを組み合わせることで、起動中のプロセスを順番に取得できます。

property ProcessByName[Name: String]: TSakuraProcess;

これは、「さくら」などのゴースト名から、プロセスを取得します。複数個見つかった場合は最初の1個だけ返します。見つからなければnilを返します。

property ProcessByID[ID: String]: TSakuraProcess;

こいつは、プロセスID(MD5値のあれ)から、同様にプロセスを取得します。見つからなければnilを返します。あんまり使い道なさそうですが。

TSakuraProcessは、Nameプロパティ(ゴースト名)、HWndプロパティ(ハンドル)、ProcessIDプロパティ(プロセスID)の各プロパティを持っています。

さらに、Data['name']形式(FMOの形式のまま)でも、Name, HWndのほかに、将来突然拡張されるかもしれない各データにアクセスできます。

簡単な例。


if SakuraSeeker.ProcessByName['さくら'] <> nil then
  Handle := SakuraSeeker.ProcessByName['さくら'].HWnd;

↑「さくら」というゴーストのプロセスを取得する
あとはDirectSSTPなりなんなりどうぞ。


//var i: integer;
for i := 0 to SakuraSeeker.Count-1 do Memo1.Lines.Add SakuraSeeker[i].Name;

↑起動中のゴーストの名前を列挙する