| /trunk/UserDetect2/UD2_Main.pas |
|---|
| 49,8 → 49,8 |
| ErrorsMemo: TMemo; |
| Memo1: TMemo; |
| Panel1: TPanel; |
| OpenTDFButton: TButton; |
| SaveTDFButton: TButton; |
| Button1: TButton; |
| Button2: TButton; |
| TasksPopupMenu: TPopupMenu; |
| Run1: TMenuItem; |
| Properties1: TMenuItem; |
| 62,17 → 62,12 |
| MenuItem1: TMenuItem; |
| Panel2: TPanel; |
| Image2: TImage; |
| DynamicTestGroupbox: TGroupBox; |
| DynamicTestPluginComboBox: TComboBox; |
| DynamicTestPluginLabel: TLabel; |
| DynamicTestDataLabel: TLabel; |
| DynamicTestDataEdit: TEdit; |
| DynamicTestButton: TButton; |
| Button5: TButton; |
| procedure FormDestroy(Sender: TObject); |
| procedure TasksListViewDblClick(Sender: TObject); |
| procedure TasksListViewKeyPress(Sender: TObject; var Key: Char); |
| procedure OpenTDFButtonClick(Sender: TObject); |
| procedure SaveTDFButtonClick(Sender: TObject); |
| procedure Button1Click(Sender: TObject); |
| procedure Button2Click(Sender: TObject); |
| procedure URLLabelClick(Sender: TObject); |
| procedure TasksPopupMenuPopup(Sender: TObject); |
| procedure Run1Click(Sender: TObject); |
| 84,7 → 79,7 |
| procedure LoadedPluginsPopupMenuPopup(Sender: TObject); |
| procedure MenuItem1Click(Sender: TObject); |
| procedure FormCreate(Sender: TObject); |
| procedure DynamicTestButtonClick(Sender: TObject); |
| procedure Button5Click(Sender: TObject); |
| protected |
| ud2: TUD2; |
| procedure LoadTaskList; |
| 91,7 → 86,6 |
| procedure LoadDetectedIDs; |
| procedure LoadINITemplate; |
| procedure LoadLoadedPluginList; |
| procedure LoadDynamicPluginList; |
| function GetIniFileName: string; |
| procedure DoRun(ShortTaskName: string); |
| procedure CheckForErrors; |
| 355,12 → 349,8 |
| SubItems.Add(pl.PluginName); |
| SubItems.Add(pl.PluginVersion); |
| SubItems.Add(pl.IdentificationMethodName); |
| if pl.AcceptsDynamicRequests then |
| SubItems.Add('Yes') |
| else |
| SubItems.Add('No'); |
| SubItems.Add(IntToStr(pl.DetectedIdentifications.Count)); |
| SubItems.Add(Format(LNG_MS, [Max(1,pl.time)])); // at least show 1ms, otherwise it would look unloggical |
| SubItems.Add(Format(LNG_MS, [Max(1,pl.time)])); // at least show 1ms, otherwise it would be unloggical |
| SubItems.Add(pl.IdentificationProcedureStatusCodeDescribed); |
| SubItems.Add(pl.PluginGUIDString); |
| end; |
| 390,7 → 380,7 |
| end; |
| end; |
| procedure TUD2MainForm.OpenTDFButtonClick(Sender: TObject); |
| procedure TUD2MainForm.Button1Click(Sender: TObject); |
| var |
| cmd: TUD2Command; |
| begin |
| 401,7 → 391,7 |
| UD2_RunCMD(cmd); |
| end; |
| procedure TUD2MainForm.SaveTDFButtonClick(Sender: TObject); |
| procedure TUD2MainForm.Button2Click(Sender: TObject); |
| begin |
| if CompatSaveDialogExecute(SaveDialog1) then |
| begin |
| 571,7 → 561,6 |
| LoadDetectedIDs; |
| LoadINITemplate; |
| LoadLoadedPluginList; |
| LoadDynamicPluginList; |
| CheckForErrors; |
| Visible := true; |
| 585,46 → 574,32 |
| PageControl1.ActivePage := TasksTabSheet; |
| end; |
| procedure TUD2MainForm.DynamicTestButtonClick(Sender: TObject); |
| procedure TUD2MainForm.Button5Click(Sender: TObject); |
| var |
| p: TUD2Plugin; |
| x: TArrayOfString; |
| newStuff: boolean; |
| resourcestring |
| LNG_DETECTED_DYNAMICS = 'The plugin returns following identification strings:'; |
| idTerm: string; |
| cmds: TUD2CommandArray; |
| sCmds: string; |
| i: integer; |
| begin |
| if DynamicTestPluginComboBox.ItemIndex = -1 then |
| // TODO xxx: Auch eine Möglichkeit geben, einfach nur "Testecho(abc)" einzugeben und es kommt was bei raus |
| if InputQuery('Enter example term', 'Example: Testecho(abc):abc=calc.exe', idTerm) then |
| begin |
| ShowMessage('Please select a plugin that is accepting dynamic requests.'); |
| exit; |
| end; |
| SetLength(cmds, 0); |
| cmds := ud2.CheckTerm(idTerm); |
| p := DynamicTestPluginComboBox.Items.Objects[DynamicTestPluginComboBox.ItemIndex] as TUD2Plugin; |
| newStuff := p.InvokeDynamicCheck(DynamicTestDataEdit.Text, x); |
| showmessage(LNG_DETECTED_DYNAMICS + #13#10#13#10 + MergeString(x, #13#10)); |
| if newStuff then |
| sCmds := ''; |
| for i := Low(cmds) to High(cmds) do |
| begin |
| LoadDetectedIDs; |
| LoadINITemplate; |
| sCmds := sCmds + cmds[i].executable + #13#10; |
| end; |
| end; |
| procedure TUD2MainForm.LoadDynamicPluginList; |
| var |
| i: integer; |
| p: TUD2Plugin; |
| begin |
| for i := 0 to ud2.LoadedPlugins.Count-1 do |
| begin |
| p := ud2.LoadedPlugins.Items[i] as TUD2Plugin; |
| if p.AcceptsDynamicRequests then |
| begin |
| DynamicTestPluginComboBox.Items.AddObject(p.PluginName, p); |
| if Length(cmds) = 0 then |
| ShowMessage('No commands would be executed.') |
| else |
| showmessage('Following commands would be executed:' + #13#10#13#10 + sCmds); |
| end; |
| LoadDetectedIDs; |
| end; |
| end; |
| end. |
| /trunk/UserDetect2/UD2_Obj.pas |
|---|
| 22,7 → 22,6 |
| // This flag will be set if "AutoOSNotSupportedCompatibility" of the INI manifest had to be enforced/used |
| OSNotSupportedEnforced: boolean; |
| // TODO: this stuff should be read-only... |
| PluginDLL: string; |
| PluginGUID: TGUID; |
| PluginName: WideString; |
| 29,7 → 28,6 |
| PluginVendor: WideString; |
| PluginVersion: WideString; |
| IdentificationMethodName: WideString; |
| AcceptsDynamicRequests: boolean; |
| // ONLY contains the non-failure status code of IdentificationStringW |
| IdentificationProcedureStatusCode: UD2_STATUS; |
| 42,8 → 40,7 |
| constructor Create; |
| function AddIdentification(IdStr: WideString): TUD2IdentificationEntry; |
| function InvokeDynamicCheck(dynamicData: string; var outIDs: TArrayOfString): boolean; overload; |
| function InvokeDynamicCheck(dynamicData: string): boolean; overload; |
| function InvokeDynamicCheck(dynamicData: string): boolean; |
| function GetDynamicRequestResult(dynamicData: string): TArrayOfString; |
| function EqualsMethodNameOrGuid(idMethodNameOrGUID: string): boolean; |
| 195,36 → 192,31 |
| FDetectedIdentifications := TObjectList{<TUD2IdentificationEntry>}.Create(true); |
| end; |
| function TUD2Plugin.InvokeDynamicCheck(dynamicData: string; var outIDs: TArrayOfString): boolean; |
| function TUD2Plugin.InvokeDynamicCheck(dynamicData: string): boolean; |
| var |
| ude: TUD2IdentificationEntry; |
| i: integer; |
| ids: TArrayOfString; |
| id: string; |
| l: integer; |
| begin |
| result := false; |
| SetLength(outIDs, 0); |
| for i := 0 to FDetectedIdentifications.Count-1 do |
| begin |
| ude := FDetectedIdentifications.Items[i] as TUD2IdentificationEntry; |
| if ude.dynamicDataUsed and (ude.dynamicData = dynamicData) then |
| begin |
| l := Length(outIDs); |
| SetLength(outIDs, l+1); |
| outIDs[l] := ude.FIdentificationString; |
| // The dynamic content was already evaluated (and therefore is already added in FDetectedIdentifications). |
| Exit; |
| end; |
| end; |
| // The dynamic content was already evaluated (and therefore is already added in FDetectedIdentifications). |
| if Length(outIDs) > 0 then exit; |
| SetLength(ids, 0); |
| ids := GetDynamicRequestResult(dynamicData); |
| outIDs := GetDynamicRequestResult(dynamicData); |
| for i := 0 to Length(outIDs)-1 do |
| for i := 0 to Length(ids)-1 do |
| begin |
| id := outIDs[i]; |
| id := ids[i]; |
| ude := AddIdentification(id); |
| ude.dynamicDataUsed := true; |
| 256,13 → 248,6 |
| SameText(GUIDToString(PluginGUID), idMethodNameOrGUID) |
| end; |
| function TUD2Plugin.InvokeDynamicCheck(dynamicData: string): boolean; |
| var |
| dummy: TArrayOfString; |
| begin |
| result := InvokeDynamicCheck(dynamicData, dummy) |
| end; |
| { TUD2IdentificationEntry } |
| procedure TUD2IdentificationEntry.GetIdNames(sl: TStrings); |
| 762,16 → 747,12 |
| Exit; |
| end; |
| pl := TUD2Plugin.Create; |
| pl.PluginDLL := dllFile; |
| @fDynamicIdentificationStringW := GetProcAddress(dllHandle, mnDynamicIdentificationStringW); |
| pl.AcceptsDynamicRequests := Assigned(fDynamicIdentificationStringW); |
| fDynamicIdentificationStringW := nil; |
| fIdentificationStringW := nil; |
| if useDynamicData then |
| begin |
| if not pl.AcceptsDynamicRequests then |
| @fDynamicIdentificationStringW := GetProcAddress(dllHandle, mnDynamicIdentificationStringW); |
| if not Assigned(fDynamicIdentificationStringW) then |
| begin |
| // TODO xxx: Darf hier ein fataler Fehler entstehen, obwohl dieses Szenario nur durch die INI file auftreten kann? |
| // TODO (allgemein): In der Modulübersicht soll auch gezeigt werden, ob dieses Modul dynamischen Content erlaubt. |
| 832,6 → 813,9 |
| Exit; |
| end; |
| pl := TUD2Plugin.Create; |
| pl.PluginDLL := dllFile; |
| if not _ApplyCompatibilityGUID then |
| begin |
| @fPluginIdentifier := GetProcAddress(dllHandle, mnPluginIdentifier); |
| /trunk/UserDetect2/UD2_Utils.pas |
|---|
| 29,7 → 29,6 |
| end; |
| function SplitString(const aSeparator, aString: string; aMax: Integer = 0): TArrayOfString; |
| function MergeString(ary: TArrayOfString; glue: string): string; |
| function BetterInterpreteBool(str: string): boolean; |
| function GetOwnCmdName: string; |
| function ExpandEnvStr(const szInput: string): string; |
| 481,16 → 480,4 |
| end; |
| end; |
| function MergeString(ary: TArrayOfString; glue: string): string; |
| var |
| i: integer; |
| begin |
| result := ''; |
| for i := Low(ary) to High(ary) do |
| begin |
| if result <> '' then result := result + glue; |
| result := result + ary[i]; |
| end; |
| end; |
| end. |
| /trunk/UserDetect2/UD2_Main.dfm |
|---|
| 1,9 → 1,9 |
| object UD2MainForm: TUD2MainForm |
| Left = 202 |
| Top = 139 |
| Width = 897 |
| Height = 519 |
| ActiveControl = IniTemplateMemo |
| Left = 190 |
| Top = 177 |
| Width = 784 |
| Height = 440 |
| ActiveControl = IdentificationsListView |
| Caption = 'ViaThinkSoft UserDetect2' |
| Color = clBtnFace |
| Font.Charset = DEFAULT_CHARSET |
| 20,9 → 20,9 |
| object PageControl1: TPageControl |
| Left = 0 |
| Top = 0 |
| Width = 881 |
| Height = 481 |
| ActivePage = TabSheet3 |
| Width = 768 |
| Height = 402 |
| ActivePage = TabSheet2 |
| Align = alClient |
| TabOrder = 0 |
| object TasksTabSheet: TTabSheet |
| 30,8 → 30,8 |
| object TasksListView: TVTSListView |
| Left = 0 |
| Top = 0 |
| Width = 873 |
| Height = 453 |
| Width = 760 |
| Height = 374 |
| Align = alClient |
| Columns = <> |
| Items.Data = { |
| 49,11 → 49,14 |
| object TabSheet2: TTabSheet |
| Caption = 'Identifications' |
| ImageIndex = 1 |
| DesignSize = ( |
| 760 |
| 374) |
| object IdentificationsListView: TVTSListView |
| Left = 0 |
| Top = 0 |
| Width = 873 |
| Height = 376 |
| Width = 760 |
| Height = 374 |
| Align = alClient |
| Columns = < |
| item |
| 74,7 → 77,6 |
| item |
| Caption = 'GUID of Plugin' |
| end> |
| HideSelection = False |
| ReadOnly = True |
| RowSelect = True |
| PopupMenu = IdentificationsPopupMenu |
| 82,60 → 84,17 |
| ViewStyle = vsReport |
| OnCompare = ListViewCompare |
| end |
| object DynamicTestGroupbox: TGroupBox |
| Left = 0 |
| Top = 376 |
| Width = 873 |
| Height = 77 |
| Align = alBottom |
| Caption = 'Check Dynamic Query' |
| object Button5: TButton |
| Left = 616 |
| Top = 320 |
| Width = 129 |
| Height = 41 |
| Anchors = [akRight, akBottom] |
| Caption = 'Test dynamic' |
| TabOrder = 1 |
| DesignSize = ( |
| 873 |
| 77) |
| object DynamicTestPluginLabel: TLabel |
| Left = 16 |
| Top = 24 |
| Width = 29 |
| Height = 13 |
| Caption = 'Plugin' |
| OnClick = Button5Click |
| end |
| object DynamicTestDataLabel: TLabel |
| Left = 272 |
| Top = 24 |
| Width = 67 |
| Height = 13 |
| Caption = 'Dynamic Data' |
| end |
| object DynamicTestPluginComboBox: TComboBox |
| Left = 16 |
| Top = 40 |
| Width = 225 |
| Height = 21 |
| Style = csDropDownList |
| ItemHeight = 13 |
| TabOrder = 0 |
| end |
| object DynamicTestDataEdit: TEdit |
| Left = 272 |
| Top = 40 |
| Width = 441 |
| Height = 21 |
| Anchors = [akLeft, akTop, akRight] |
| TabOrder = 1 |
| end |
| object DynamicTestButton: TButton |
| Left = 736 |
| Top = 32 |
| Width = 121 |
| Height = 33 |
| Anchors = [akTop, akRight] |
| Caption = 'Query' |
| TabOrder = 2 |
| OnClick = DynamicTestButtonClick |
| end |
| end |
| end |
| object TabSheet3: TTabSheet |
| Caption = 'Task Definition File Template' |
| ImageIndex = 2 |
| 142,8 → 101,8 |
| object IniTemplateMemo: TMemo |
| Left = 0 |
| Top = 0 |
| Width = 873 |
| Height = 402 |
| Width = 760 |
| Height = 323 |
| Align = alClient |
| Font.Charset = ANSI_CHARSET |
| Font.Color = clWindowText |
| 150,7 → 109,6 |
| Font.Height = -12 |
| Font.Name = 'Courier New' |
| Font.Style = [] |
| HideSelection = False |
| ParentFont = False |
| ReadOnly = True |
| ScrollBars = ssBoth |
| 159,16 → 117,16 |
| end |
| object Panel1: TPanel |
| Left = 0 |
| Top = 402 |
| Width = 873 |
| Top = 323 |
| Width = 760 |
| Height = 51 |
| Align = alBottom |
| BevelOuter = bvNone |
| TabOrder = 1 |
| DesignSize = ( |
| 873 |
| 760 |
| 51) |
| object OpenTDFButton: TButton |
| object Button1: TButton |
| Left = 8 |
| Top = 8 |
| Width = 209 |
| 176,10 → 134,10 |
| Anchors = [akLeft, akTop, akBottom] |
| Caption = 'Open current Task Definition File' |
| TabOrder = 0 |
| OnClick = OpenTDFButtonClick |
| OnClick = Button1Click |
| end |
| object SaveTDFButton: TButton |
| Left = 654 |
| object Button2: TButton |
| Left = 541 |
| Top = 8 |
| Width = 209 |
| Height = 33 |
| 186,7 → 144,7 |
| Anchors = [akTop, akRight, akBottom] |
| Caption = 'Save as new Task Definition File' |
| TabOrder = 1 |
| OnClick = SaveTDFButtonClick |
| OnClick = Button2Click |
| end |
| end |
| end |
| 196,8 → 154,8 |
| object LoadedPluginsListView: TVTSListView |
| Left = 0 |
| Top = 0 |
| Width = 873 |
| Height = 453 |
| Width = 760 |
| Height = 374 |
| Align = alClient |
| Columns = < |
| item |
| 221,9 → 179,6 |
| Width = 100 |
| end |
| item |
| Caption = 'Dynamic?' |
| end |
| item |
| Caption = 'Detected IDs' |
| end |
| item |
| 236,7 → 191,6 |
| Caption = 'GUID of Plugin' |
| Width = 100 |
| end> |
| HideSelection = False |
| ReadOnly = True |
| RowSelect = True |
| PopupMenu = LoadedPluginsPopupMenu |
| 249,8 → 203,8 |
| Caption = 'About' |
| ImageIndex = 4 |
| DesignSize = ( |
| 873 |
| 453) |
| 760 |
| 374) |
| object Image1: TImage |
| Left = 8 |
| Top = 8 |
| 670,10 → 624,9 |
| object Memo1: TMemo |
| Left = 264 |
| Top = 8 |
| Width = 595 |
| Height = 435 |
| Width = 482 |
| Height = 356 |
| Anchors = [akLeft, akTop, akRight, akBottom] |
| HideSelection = False |
| Lines.Strings = ( |
| ' GNU GENERAL PUBLIC LICENSE' |
| ' Version 3, 29 June 2007' |
| 2150,10 → 2103,9 |
| object ErrorsMemo: TMemo |
| Left = 49 |
| Top = 0 |
| Width = 824 |
| Height = 453 |
| Width = 711 |
| Height = 374 |
| Align = alClient |
| HideSelection = False |
| Lines.Strings = ( |
| '') |
| ReadOnly = True |
| 2164,7 → 2116,7 |
| Left = 0 |
| Top = 0 |
| Width = 49 |
| Height = 453 |
| Height = 374 |
| Align = alLeft |
| BevelOuter = bvNone |
| TabOrder = 1 |