Subversion Repositories userdetect2

Rev

Rev 83 | Rev 85 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
68 daniel-mar 1
unit UD2_Main;
2
 
3
interface
4
 
5
{$IF CompilerVersion >= 25.0}
6
{$LEGACYIFEND ON}
7
{$IFEND}
8
 
70 daniel-mar 9
{$INCLUDE 'UserDetect2.inc'}
10
 
68 daniel-mar 11
uses
12
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
13
  Dialogs, StdCtrls, Grids, ValEdit, UD2_Obj, ComCtrls, ImgList, ExtCtrls,
14
  CommCtrl, Menus, VTSListView, VTSCompat;
15
 
16
const
17
  DefaultIniFile = 'UserDetect2.ini';
18
  DefaultWarnIfNothingMatches = 'false';
19
  TagWarnIfNothingMatches = 'WarnIfNothingMatches';
20
  DefaultCloseAfterLaunching = 'false';
21
  TagCloseAfterLaunching = 'CloseAfterLaunching';
22
  TagIcon = 'Icon';
23
 
24
type
25
  TUD2MainForm = class(TForm)
26
    OpenDialog1: TOpenDialog;
27
    PageControl1: TPageControl;
28
    TasksTabSheet: TTabSheet;
29
    TabSheet2: TTabSheet;
30
    TabSheet3: TTabSheet;
31
    IniTemplateMemo: TMemo;
32
    TabSheet4: TTabSheet;
73 daniel-mar 33
    TasksListView: TVTSListView;
34
    TasksImageList: TImageList;
68 daniel-mar 35
    SaveDialog1: TSaveDialog;
36
    TabSheet5: TTabSheet;
37
    Image1: TImage;
38
    Label1: TLabel;
39
    Label2: TLabel;
40
    Label3: TLabel;
41
    Label4: TLabel;
42
    Label5: TLabel;
43
    Label6: TLabel;
44
    Label7: TLabel;
45
    Label8: TLabel;
73 daniel-mar 46
    LoadedPluginsListView: TVTSListView;
47
    IdentificationsListView: TVTSListView;
68 daniel-mar 48
    ErrorsTabSheet: TTabSheet;
49
    ErrorsMemo: TMemo;
50
    Memo1: TMemo;
51
    Panel1: TPanel;
52
    Button1: TButton;
53
    Button2: TButton;
73 daniel-mar 54
    TasksPopupMenu: TPopupMenu;
68 daniel-mar 55
    Run1: TMenuItem;
56
    Properties1: TMenuItem;
73 daniel-mar 57
    IdentificationsPopupMenu: TPopupMenu;
68 daniel-mar 58
    CopyTaskDefinitionExample1: TMenuItem;
59
    Button3: TButton;
60
    VersionLabel: TLabel;
73 daniel-mar 61
    LoadedPluginsPopupMenu: TPopupMenu;
62
    MenuItem1: TMenuItem;
81 daniel-mar 63
    Panel2: TPanel;
64
    Image2: TImage;
83 daniel-mar 65
    Button5: TButton;
68 daniel-mar 66
    procedure FormDestroy(Sender: TObject);
73 daniel-mar 67
    procedure TasksListViewDblClick(Sender: TObject);
68
    procedure TasksListViewKeyPress(Sender: TObject; var Key: Char);
68 daniel-mar 69
    procedure Button1Click(Sender: TObject);
70
    procedure Button2Click(Sender: TObject);
71
    procedure URLLabelClick(Sender: TObject);
73 daniel-mar 72
    procedure TasksPopupMenuPopup(Sender: TObject);
68 daniel-mar 73
    procedure Run1Click(Sender: TObject);
74
    procedure Properties1Click(Sender: TObject);
73 daniel-mar 75
    procedure IdentificationsPopupMenuPopup(Sender: TObject);
68 daniel-mar 76
    procedure CopyTaskDefinitionExample1Click(Sender: TObject);
80 daniel-mar 77
    procedure ListViewCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
68 daniel-mar 78
    procedure Button3Click(Sender: TObject);
73 daniel-mar 79
    procedure LoadedPluginsPopupMenuPopup(Sender: TObject);
80
    procedure MenuItem1Click(Sender: TObject);
82 daniel-mar 81
    procedure FormCreate(Sender: TObject);
83 daniel-mar 82
    procedure Button5Click(Sender: TObject);
68 daniel-mar 83
  protected
84
    ud2: TUD2;
85
    procedure LoadTaskList;
86
    procedure LoadDetectedIDs;
87
    procedure LoadINITemplate;
88
    procedure LoadLoadedPluginList;
89
    function GetIniFileName: string;
90
    procedure DoRun(ShortTaskName: string);
91
    procedure CheckForErrors;
81 daniel-mar 92
  public
93
    procedure Run;
68 daniel-mar 94
  end;
95
 
96
var
97
  UD2MainForm: TUD2MainForm;
98
 
99
implementation
100
 
101
{$R *.dfm}
102
 
103
uses
69 daniel-mar 104
  ShellAPI, Clipbrd, Math, AlphaNumSort, UD2_Utils, UD2_TaskProperties;
68 daniel-mar 105
 
106
type
107
  TUD2ListViewEntry = class(TObject)
108
    ShortTaskName: string;
109
    CloseAfterLaunching: boolean;
110
    TaskPropertiesForm: TForm;
111
  end;
112
 
113
function AddIconRecToImageList(rec: TIconFileIdx; ImageList: TImageList): integer;
114
var
115
  icon: TIcon;
116
begin
117
  icon := TIcon.Create;
118
  try
119
    icon.Handle := ExtractIcon(Application.Handle, PChar(rec.FileName), rec.IconIndex);
120
 
121
    // result := ImageList.AddIcon(ico);
122
    result := AddTransparentIconToImageList(ImageList, icon);
123
  finally
124
    icon.Free;
125
  end;
126
end;
127
 
128
{ TUD2MainForm }
129
 
130
function TUD2MainForm.GetIniFileName: string;
131
resourcestring
132
  LNG_FILE_NOT_FOUND = 'File "%s" not found.';
133
begin
81 daniel-mar 134
  if (ParamCount >= 1) and not CheckBoolParam(1, 'C') then
68 daniel-mar 135
  begin
136
    if FileExists(ParamStr(1)) then
137
    begin
138
      result := ParamStr(1);
139
    end
140
    else
141
    begin
73 daniel-mar 142
      ExitCode := EXITCODE_INI_NOT_FOUND;
68 daniel-mar 143
      MessageDlg(Format(LNG_FILE_NOT_FOUND, [ParamStr(1)]), mtError, [mbOK], 0);
144
      result := '';
145
    end;
146
    Exit;
147
  end
148
  else
149
  begin
150
    if FileExists(DefaultIniFile) then
151
    begin
152
      result := DefaultIniFile;
153
      Exit;
154
    end;
155
 
156
    if FileExists(GetOwnCmdName + '.ini') then
157
    begin
158
      result := GetOwnCmdName + '.ini';
159
      Exit;
160
    end;
161
 
162
    if CompatOpenDialogExecute(OpenDialog1) then
163
    begin
164
      result := OpenDialog1.FileName;
165
      Exit;
166
    end;
167
 
168
    result := '';
169
    Exit;
170
  end;
171
end;
172
 
173
procedure TUD2MainForm.LoadTaskList;
174
var
175
  sl: TStringList;
176
  i: integer;
177
  ShortTaskName, iconString: string;
178
  iconIndex: integer;
179
  obj: TUD2ListViewEntry;
180
begin
73 daniel-mar 181
  TasksListView.Clear;
68 daniel-mar 182
  sl := TStringList.Create;
183
  try
184
    ud2.GetTaskListing(sl);
185
    for i := 0 to sl.Count-1 do
186
    begin
187
      ShortTaskName := sl.Names[i];
188
 
189
      Obj := TUD2ListViewEntry.Create;
190
      Obj.ShortTaskName := ShortTaskName;
191
      Obj.CloseAfterLaunching := ud2.ReadMetatagBool(ShortTaskName, TagCloseAfterLaunching, DefaultCloseAfterLaunching);
192
 
73 daniel-mar 193
      TasksListView.AddItem(sl.Values[ShortTaskName], TObject(Obj));
68 daniel-mar 194
 
195
      iconString := ud2.ReadMetatagString(ShortTaskName, TagIcon, '');
196
      if iconString <> '' then
197
      begin
73 daniel-mar 198
        iconIndex := AddIconRecToImageList(SplitIconString(iconString), TasksImageList);
68 daniel-mar 199
        if iconIndex <> -1 then
200
        begin
73 daniel-mar 201
          TasksListView.Items.Item[TasksListView.Items.Count-1].ImageIndex := iconIndex;
68 daniel-mar 202
        end;
203
      end;
204
    end;
205
  finally
206
    sl.Free;
207
  end;
208
end;
209
 
210
procedure TUD2MainForm.DoRun(ShortTaskName: string);
211
resourcestring
212
  LNG_TASK_NOT_EXISTS = 'The task "%s" does not exist in the INI file.';
213
  LNG_NOTHING_MATCHES = 'No identification string matches to your environment. No application was launched. Please check the Task Definition File.';
214
var
215
  slCmds: TStringList;
216
  i: integer;
217
  cmd: string;
218
begin
219
  if not ud2.TaskExists(ShortTaskName) then
220
  begin
221
    // This can happen if the task name is taken from command line
222
    MessageDlg(Format(LNG_TASK_NOT_EXISTS, [ShortTaskName]), mtError, [mbOK], 0);
73 daniel-mar 223
    ExitCode := EXITCODE_TASK_NOT_EXISTS;
68 daniel-mar 224
    Exit;
225
  end;
226
 
227
  slCmds := TStringList.Create;
228
  try
229
    ud2.GetCommandList(ShortTaskName, slCmds);
230
 
81 daniel-mar 231
    if (slCmds.Count = 0) and ud2.ReadMetatagBool(ShortTaskName, TagWarnIfNothingMatches, DefaultWarnIfNothingMatches) then
68 daniel-mar 232
    begin
233
      MessageDlg(LNG_NOTHING_MATCHES, mtWarning, [mbOK], 0);
81 daniel-mar 234
      ExitCode := EXITCODE_TASK_NOTHING_MATCHES;
68 daniel-mar 235
    end;
236
 
237
    for i := 0 to slCmds.Count-1 do
238
    begin
239
      cmd := slCmds.Strings[i];
240
      if cmd = '' then continue;
81 daniel-mar 241
      UD2_RunCMD(cmd, SW_NORMAL); // Idea: Let SW_NORMAL be configurable by the user?
68 daniel-mar 242
    end;
243
  finally
244
    slCmds.Free;
245
  end;
246
end;
247
 
248
procedure TUD2MainForm.FormDestroy(Sender: TObject);
249
var
250
  i: integer;
251
begin
252
  if Assigned(ud2) then ud2.Free;
73 daniel-mar 253
  for i := 0 to TasksListView.Items.Count-1 do
68 daniel-mar 254
  begin
73 daniel-mar 255
    TUD2ListViewEntry(TasksListView.Items.Item[i].Data).Free;
68 daniel-mar 256
  end;
257
end;
258
 
259
procedure TUD2MainForm.CheckForErrors;
260
begin
261
  ErrorsTabSheet.TabVisible := ud2.Errors.Count > 0;
262
  if ErrorsTabSheet.TabVisible then
263
  begin
264
    ErrorsMemo.Lines.Assign(ud2.Errors);
265
    PageControl1.ActivePage := ErrorsTabSheet;
266
  end;
267
end;
268
 
269
procedure TUD2MainForm.LoadDetectedIDs;
270
var
271
  i, j: integer;
272
  pl: TUD2Plugin;
273
  ude: TUD2IdentificationEntry;
274
begin
73 daniel-mar 275
  IdentificationsListView.Clear;
68 daniel-mar 276
  for i := 0 to ud2.LoadedPlugins.Count-1 do
277
  begin
278
    pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
279
    for j := 0 to pl.DetectedIdentifications.Count-1 do
280
    begin
281
      ude := pl.DetectedIdentifications.Items[j] as TUD2IdentificationEntry;
73 daniel-mar 282
      with IdentificationsListView.Items.Add do
68 daniel-mar 283
      begin
284
        Caption := pl.PluginName;
83 daniel-mar 285
        if ude.DynamicDataUsed then
286
          SubItems.Add(ude.DynamicData)
287
        else
288
          SubItems.Add('');
68 daniel-mar 289
        SubItems.Add(pl.IdentificationMethodName);
290
        SubItems.Add(ude.IdentificationString);
291
        SubItems.Add(GUIDToString(pl.PluginGUID));
292
      end;
293
    end;
294
  end;
295
 
73 daniel-mar 296
  for i := 0 to IdentificationsListView.Columns.Count-1 do
68 daniel-mar 297
  begin
73 daniel-mar 298
    IdentificationsListView.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
68 daniel-mar 299
  end;
300
end;
301
 
302
procedure TUD2MainForm.LoadINITemplate;
303
var
304
  i, j: integer;
305
  pl: TUD2Plugin;
306
  ude: TUD2IdentificationEntry;
83 daniel-mar 307
  idNames: TStringList;
68 daniel-mar 308
begin
309
  IniTemplateMemo.Clear;
310
  IniTemplateMemo.Lines.Add('[ExampleTask1]');
311
  IniTemplateMemo.Lines.Add('; Description: Optional but recommended');
312
  IniTemplateMemo.Lines.Add('Description=Run Task #1');
313
  IniTemplateMemo.Lines.Add('; WarnIfNothingMatches: Warns when no application was launched. Default: false.');
314
  IniTemplateMemo.Lines.Add('WarnIfNothingMatches=false');
315
  IniTemplateMemo.Lines.Add('; Optional: IconDLL + IconIndex');
316
  IniTemplateMemo.Lines.Add('Icon=%SystemRoot%\system32\Shell32.dll,3');
317
  IniTemplateMemo.Lines.Add('; Optional: Can be true or false');
318
  IniTemplateMemo.Lines.Add(TagCloseAfterLaunching+'=true');
319
 
320
  for i := 0 to ud2.LoadedPlugins.Count-1 do
321
  begin
322
    pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
323
    for j := 0 to pl.DetectedIdentifications.Count-1 do
324
    begin
325
      ude := pl.DetectedIdentifications.Items[j] as TUD2IdentificationEntry;
326
      IniTemplateMemo.Lines.Add(Format('; %s', [ude.Plugin.PluginName]));
83 daniel-mar 327
 
328
      idNames := TStringList.Create;
329
      try
330
        ude.GetIdNames(idNames);
331
        if idNames.Count >= 1 then
332
          IniTemplateMemo.Lines.Add(idNames.Strings[0]+'=calc.exe');
333
      finally
334
        idNames.Free;
335
      end;
336
 
68 daniel-mar 337
    end;
338
  end;
339
end;
340
 
341
procedure TUD2MainForm.LoadLoadedPluginList;
69 daniel-mar 342
resourcestring
343
  LNG_MS = '%dms';
68 daniel-mar 344
var
345
  i: integer;
346
  pl: TUD2Plugin;
347
begin
73 daniel-mar 348
  LoadedPluginsListView.Clear;
68 daniel-mar 349
  for i := 0 to ud2.LoadedPlugins.Count-1 do
350
  begin
351
    pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
73 daniel-mar 352
    with LoadedPluginsListView.Items.Add do
68 daniel-mar 353
    begin
354
      Caption := pl.PluginDLL;
355
      SubItems.Add(pl.PluginVendor);
356
      SubItems.Add(pl.PluginName);
357
      SubItems.Add(pl.PluginVersion);
358
      SubItems.Add(pl.IdentificationMethodName);
70 daniel-mar 359
      SubItems.Add(IntToStr(pl.DetectedIdentifications.Count));
69 daniel-mar 360
      SubItems.Add(Format(LNG_MS, [Max(1,pl.time)])); // at least show 1ms, otherwise it would be unloggical
70 daniel-mar 361
      SubItems.Add(pl.IdentificationProcedureStatusCodeDescribed);
68 daniel-mar 362
      SubItems.Add(pl.PluginGUIDString);
363
    end;
364
  end;
365
 
73 daniel-mar 366
  for i := 0 to LoadedPluginsListView.Columns.Count-1 do
68 daniel-mar 367
  begin
73 daniel-mar 368
    LoadedPluginsListView.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
68 daniel-mar 369
  end;
370
end;
371
 
73 daniel-mar 372
procedure TUD2MainForm.TasksListViewDblClick(Sender: TObject);
68 daniel-mar 373
var
374
  obj: TUD2ListViewEntry;
375
begin
73 daniel-mar 376
  if TasksListView.ItemIndex = -1 then exit;
377
  obj := TUD2ListViewEntry(TasksListView.Selected.Data);
68 daniel-mar 378
  DoRun(obj.ShortTaskName);
379
  if obj.CloseAfterLaunching then Close;
380
end;
381
 
73 daniel-mar 382
procedure TUD2MainForm.TasksListViewKeyPress(Sender: TObject; var Key: Char);
68 daniel-mar 383
begin
384
  if Key = #13 then
385
  begin
73 daniel-mar 386
    TasksListViewDblClick(Sender);
68 daniel-mar 387
  end;
388
end;
389
 
390
procedure TUD2MainForm.Button1Click(Sender: TObject);
391
begin
392
  UD2_RunCMD(ud2.IniFileName, SW_NORMAL);
393
end;
394
 
395
procedure TUD2MainForm.Button2Click(Sender: TObject);
396
begin
397
  if CompatSaveDialogExecute(SaveDialog1) then
398
  begin
399
    IniTemplateMemo.Lines.SaveToFile(SaveDialog1.FileName);
400
  end;
401
end;
402
 
403
procedure TUD2MainForm.URLLabelClick(Sender: TObject);
404
var
405
  s: string;
406
begin
407
  s := TLabel(Sender).Caption;
408
  if Pos('@', s) > 0 then
409
    s := 'mailto:' + s
410
  else
411
    s := 'http://' + s;
412
  UD2_RunCMD(s, SW_NORMAL);
413
end;
414
 
73 daniel-mar 415
procedure TUD2MainForm.TasksPopupMenuPopup(Sender: TObject);
68 daniel-mar 416
begin
73 daniel-mar 417
  Run1.Enabled := TasksListView.ItemIndex <> -1;
418
  Properties1.Enabled := TasksListView.ItemIndex <> -1;
68 daniel-mar 419
end;
420
 
421
procedure TUD2MainForm.Run1Click(Sender: TObject);
422
begin
73 daniel-mar 423
  TasksListViewDblClick(Sender);
68 daniel-mar 424
end;
425
 
426
procedure TUD2MainForm.Properties1Click(Sender: TObject);
427
var
428
  obj: TUD2ListViewEntry;
429
begin
73 daniel-mar 430
  if TasksListView.ItemIndex = -1 then exit;
431
  obj := TUD2ListViewEntry(TasksListView.Selected.Data);
68 daniel-mar 432
  if obj.TaskPropertiesForm = nil then
433
  begin
434
    obj.TaskPropertiesForm := TUD2TaskPropertiesForm.Create(Self, ud2, obj.ShortTaskName);
435
  end;
436
  obj.TaskPropertiesForm.Show;
437
end;
438
 
73 daniel-mar 439
procedure TUD2MainForm.IdentificationsPopupMenuPopup(Sender: TObject);
68 daniel-mar 440
begin
73 daniel-mar 441
  CopyTaskDefinitionExample1.Enabled := IdentificationsListView.ItemIndex <> -1;
68 daniel-mar 442
end;
443
 
444
procedure TUD2MainForm.CopyTaskDefinitionExample1Click(Sender: TObject);
445
var
446
  s: string;
447
begin
73 daniel-mar 448
  s := '; '+IdentificationsListView.Selected.Caption+#13#10+
449
       IdentificationsListView.Selected.SubItems[0] + ':' + IdentificationsListView.Selected.SubItems[1] + '=calc.exe'+#13#10+
68 daniel-mar 450
       #13#10+
451
       '; Alternatively:'+#13#10+
73 daniel-mar 452
       IdentificationsListView.Selected.SubItems[2] + ':' + IdentificationsListView.Selected.SubItems[1] + '=calc.exe'+#13#10;
68 daniel-mar 453
  Clipboard.AsText := s;
454
end;
455
 
456
procedure TUD2MainForm.ListViewCompare(Sender: TObject; Item1,
457
  Item2: TListItem; Data: Integer; var Compare: Integer);
458
var
459
  ListView: TVTSListView;
460
begin
461
  ListView := Sender as TVTSListView;
462
  if ListView.CurSortedColumn = 0 then
463
  begin
69 daniel-mar 464
    Compare := AlphaNumCompare(Item1.Caption, Item2.Caption);
68 daniel-mar 465
  end
466
  else
467
  begin
69 daniel-mar 468
    Compare := AlphaNumCompare(Item1.SubItems[ListView.CurSortedColumn-1],
469
                               Item2.SubItems[ListView.CurSortedColumn-1]);
68 daniel-mar 470
  end;
471
  if ListView.CurSortedDesc then Compare := -Compare;
472
end;
473
 
474
procedure TUD2MainForm.Button3Click(Sender: TObject);
475
begin
476
  VTS_CheckUpdates('userdetect2', VersionLabel.Caption);
477
end;
478
 
73 daniel-mar 479
procedure TUD2MainForm.LoadedPluginsPopupMenuPopup(Sender: TObject);
480
begin
481
  MenuItem1.Enabled := LoadedPluginsListView.ItemIndex <> -1;
482
end;
483
 
484
procedure TUD2MainForm.MenuItem1Click(Sender: TObject);
485
var
486
  s: string;
487
begin
80 daniel-mar 488
  s := '; ' + LoadedPluginsListView.Selected.SubItems.Strings[6];
73 daniel-mar 489
  Clipboard.AsText := s;
490
end;
491
 
81 daniel-mar 492
procedure TUD2MainForm.Run;
493
resourcestring
494
  LNG_SYNTAX = 'Syntax: %s [TaskDefinitionFile [/T TaskName] | /C IdentificationTerm [Command] | /?]';
495
var
496
  LoadedIniFile: string;
497
begin
498
  ExitCode := EXITCODE_OK;
499
 
500
  if ((ParamCount = 1) and CheckBoolParam(1, '?')) or
501
     (CheckBoolParam(2, 'T') and (ParamCount > 3)) or
502
     (CheckBoolParam(1, 'C') and (ParamCount > 3)) or
503
     (not CheckBoolParam(2, 'T') and not CheckBoolParam(1, 'C') and (ParamCount > 1)) then
504
  begin
505
    ExitCode := EXITCODE_SYNTAX_ERROR;
506
    MessageDlg(Format(LNG_SYNTAX, [GetOwnCmdName]), mtInformation, [mbOK], 0);
507
 
508
    Visible := false;
509
    Close;
510
    Exit;
511
  end;
512
 
513
  LoadedIniFile := GetIniFileName;
514
  if LoadedIniFile = '' then
515
  begin
516
    Visible := false;
517
    Close;
518
    Exit;
519
  end;
520
  ud2 := TUD2.Create(LoadedIniFile);
521
 
82 daniel-mar 522
  ud2.HandlePluginDir('',        '*.udp');
523
  ud2.HandlePluginDir('Plugins', '*.udp');
81 daniel-mar 524
  ud2.HandlePluginDir('Plugins', '*.dll');
525
 
526
  if CheckBoolParam(1, 'C') then
527
  begin
528
    if ud2.FulfilsEverySubterm(ParamStr(2)) then
529
    begin
530
      ExitCode := EXITCODE_OK;
531
 
532
      if ParamStr(3) <> '' then UD2_RunCMD(ParamStr(3), SW_NORMAL); // Idea: SW_NORMAL changeable via parameter
533
    end
534
    else
535
    begin
536
      ExitCode := EXITCODE_TASK_NOTHING_MATCHES;
537
    end;
538
 
539
    Visible := false;
540
    Close;
541
    Exit;
542
  end
543
  else if CheckBoolParam(2, 'T') then
544
  begin
545
    DoRun(ParamStr(3));
546
 
547
    Visible := false;
548
    Close;
549
    Exit;
550
  end
551
  else
552
  begin
553
    LoadTaskList;
554
    LoadDetectedIDs;
555
    LoadINITemplate;
556
    LoadLoadedPluginList;
557
    CheckForErrors;
558
 
559
    Visible := true;
560
    Exit;
561
  end;
562
end;
563
 
82 daniel-mar 564
procedure TUD2MainForm.FormCreate(Sender: TObject);
565
begin
566
  // To avoid accidental change of the default tab from the IDE VCL Designer
567
  PageControl1.ActivePage := TasksTabSheet;
568
end;
569
 
83 daniel-mar 570
procedure TUD2MainForm.Button5Click(Sender: TObject);
571
var
572
  idTerm: string;
573
  slCmd: TStrings;
574
begin
84 daniel-mar 575
  // TODO xxx: Auch eine Möglichkeit geben, einfach nur "Testecho(abc)" einzugeben und es kommt was bei raus
576
 
577
  if InputQuery('Enter example term', 'Example: Testecho(abc):abc=calc.exe', idTerm) then
83 daniel-mar 578
  begin
579
    slCmd := TStringList.Create;
580
    try
581
      ud2.CheckTerm(idTerm, slCmd);
582
      if slCmd.Count = 0 then
583
        ShowMessage('No commands would be executed.')
584
      else
585
        showmessage('Following commands would be executed:' + #13#10#13#10 + slCmd.Text);
586
    finally
587
      slCmd.Free;
588
    end;
589
  end;
590
  LoadDetectedIDs;
591
end;
592
 
68 daniel-mar 593
end.