6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, ComCtrls, ImgList, ToolWin, ActnList,
8 SakuraSeekerInstance, DirectSstp, Menus, Clipbrd;
11 TfrmFMOExplorer = class(TForm)
14 ImageList: TImageList;
15 tbtnRestoreSurface: TToolButton;
16 ToolButton2: TToolButton;
17 tbtnKillFMO: TToolButton;
18 tbtnRefresh: TToolButton;
19 ActionList: TActionList;
21 actRestoreSurface: TAction;
23 StatusBar: TStatusBar;
24 DirectSstp: TDirectSstp;
25 PopupMenu: TPopupMenu;
27 mnRestoreSurface: TMenuItem;
28 ToolButton1: TToolButton;
29 tbtnCopyInformation: TToolButton;
30 actCopyInformation: TAction;
31 mnSeparator: TMenuItem;
32 mnCopyInformation: TMenuItem;
33 procedure FormShow(Sender: TObject);
34 procedure actRefreshExecute(Sender: TObject);
35 procedure lvwListChange(Sender: TObject; Item: TListItem;
37 procedure actKillFMOExecute(Sender: TObject);
38 procedure lvwListDblClick(Sender: TObject);
39 procedure actCopyInformationExecute(Sender: TObject);
48 frmFMOExplorer: TfrmFMOExplorer;
58 procedure TfrmFMOExplorer.FormShow(Sender: TObject);
63 procedure TfrmFMOExplorer.UpdateList;
66 HwndToVer, TmpStr: TStringList;
70 SakuraSeeker.BeginDetect;
71 lvwList.Items.BeginUpdate;
72 for i := 0 to SakuraSeeker.Count-1 do begin
73 with lvwList.Items.Add do begin
74 Caption := SakuraSeeker[i].SetName;
75 SubItems.Add(SakuraSeeker[i].FMOName);
76 SubItems.Add(SakuraSeeker[i].ProcessID);
77 SubItems.Add(IntToStr(SakuraSeeker[i].HWnd));
81 valid := (SakuraSeeker[i].Hwnd <> 0) and (SakuraSeeker[i].Name <> '')
82 and (SakuraSeeker[i].KeroName <> '');
84 ImageIndex := IconFMOEntry
86 ImageIndex := IconBrokenFMO;
87 SubItems[4] := '
\94j
\91¹FMO';
90 lvwList.Items.EndUpdate;
91 StatusBar.Panels[0].Text := Format('%d
\8c\8f', [SakuraSeeker.Count]);
93 HwndToVer := TStringList.Create;
96 for i := 0 to SakuraSeeker.Count-1 do begin
97 s := HwndToVer.Values[IntToStr(SakuraSeeker[i].HWnd)];
99 lvwList.Items[i].SubItems[3] := s;
100 lvwList.Items[i].SubItems[4] := '
\90³
\8fí';
102 DirectSSTP.TargetHWnd := SakuraSeeker[i].HWnd;
103 DirectSSTP.SstpSender := Application.Title;
104 s := DirectSSTP.SstpEXECUTE('GetVersion');
105 TmpStr := TStringList.Create;
108 for j := 0 to TmpStr.Count-1 do
109 if TmpStr[j] <> '' then begin
116 if s <> '' then begin
117 HwndToVer.Values[IntToStr(SakuraSeeker[i].HWnd)] := s;
118 lvwList.Items[i].SubItems[3] := s;
119 lvwList.Items[i].SubItems[4] := '
\90³
\8fí';
121 lvwList.Items[i].SubItems[4] := '
\89\9e\93\9a\82È
\82µ';
122 lvwList.Items[i].ImageIndex := IconBrokenFMO;
131 procedure TfrmFMOExplorer.actRefreshExecute(Sender: TObject);
136 procedure TfrmFMOExplorer.lvwListChange(Sender: TObject; Item: TListItem;
137 Change: TItemChange);
139 if Change <> ctState then Exit;
140 actKillFMO.Enabled := lvwList.Selected <> nil;
141 actCopyInformation.Enabled := lvwList.Selected <> nil;
144 procedure TfrmFMOExplorer.actKillFMOExecute(Sender: TObject);
147 if lvwList.Selected = nil then Exit;
148 for i := lvwList.Items.Count-1 downto 0 do
149 if lvwList.Items[i].Selected and (SakuraSeeker.Process[i] <> nil) then begin
150 SakuraSeeker.KillFMO(SakuraSeeker.Process[i].FMOName, SakuraSeeker.Process[i].ProcessID);
151 lvwList.Items.Delete(i);
155 procedure TfrmFMOExplorer.lvwListDblClick(Sender: TObject);
156 var i, index: integer;
159 if lvwList.Selected = nil then Exit;
160 index := lvwList.Selected.Index;
161 for i := 0 to SakuraSeeker[index].Count-1 do begin
162 if i > 0 then str := str + #13#10;
163 str := str + SakuraSeeker[index].KeyAt[i] + ': ' + SakuraSeeker[index].DataAt[i];
168 procedure TfrmFMOExplorer.actCopyInformationExecute(Sender: TObject);
174 if lvwList.Selected = nil then
176 index := lvwList.Selected.Index;
177 for i := 0 to SakuraSeeker[index].Count-1 do
179 if i > 0 then str := str + #13#10;
180 str := str + SakuraSeeker[index].KeyAt[i] + ': ' + SakuraSeeker[index].DataAt[i];
183 Clip.SetTextBuf(PChar(str));
188 frmFMOExplorer := nil;