@@ -57,6 +57,7 @@ TMain = class(TForm)
57
57
private
58
58
procedure LoadRegRules ;
59
59
procedure WMCopyData (var Msg: TWMCopyData); message WM_COPYDATA;
60
+ procedure HandleParams ;
60
61
{ Private declarations }
61
62
public
62
63
{ Public declarations }
@@ -67,14 +68,15 @@ TMain = class(TForm)
67
68
RuleNames, RulePaths: TStringList;
68
69
CloseDuplicate: boolean;
69
70
BlockedCount: integer;
71
+ UnblockedCount: integer;
70
72
71
73
// Ïåðåâîä / Tranlate
72
74
ID_SEARCH: string;
73
75
74
76
ID_ABOUT, ID_LAST_UPDATE: string;
75
77
76
- ID_RULE_SUCCESSFULLY_CREATED, ID_RULE_ALREADY_EXISTS, ID_RULE_SUCCESSFULLY_REMOVED,
77
- ID_CHOOSE_RULE, ID_RULES_SUCCESSFULLY_CREATED, ID_FAILED_CREATE_RULES,
78
+ ID_RULE_SUCCESSFULLY_CREATED, ID_RULE_ALREADY_EXISTS, ID_RULE_SUCCESSFULLY_REMOVED, ID_RULE_NOT_FOUND, ID_CHOOSE_RULE,
79
+ ID_RULES_SUCCESSFULLY_CREATED, ID_FAILED_CREATE_RULES, ID_RULES_SUCCESSFULLY_REMOVED, ID_FAILED_REMOVE_RULES ,
78
80
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS, ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND: string;
79
81
80
82
const
@@ -247,7 +249,7 @@ procedure TMain.LoadRegRules;
247
249
Reg:=TRegistry.Create;
248
250
SubKeyNames:=TStringList.Create;
249
251
Reg.RootKey:=HKEY_LOCAL_MACHINE;
250
- Reg.OpenKeyReadOnly(' SYSTEM\ControlSet001 \services\SharedAccess\Parameters\FirewallPolicy\FirewallRules' );
252
+ Reg.OpenKeyReadOnly(' SYSTEM\CurrentControlSet \services\SharedAccess\Parameters\FirewallPolicy\FirewallRules' );
251
253
Reg.GetValueNames(Rules);
252
254
for i:=0 to Rules.Count - 1 do begin
253
255
RegName:=Reg.ReadString(Rules.Strings[i]);
@@ -278,6 +280,60 @@ procedure SendMessageToHandle(TrgWND: HWND; MsgToHandle: string);
278
280
SendMessage(TrgWND, WM_COPYDATA, Integer(Application.Handle), Integer(@CDS));
279
281
end ;
280
282
283
+ procedure TMain.HandleParams ;
284
+ var
285
+ i: Integer;
286
+ WND: HWND;
287
+ Msg: String;
288
+ begin
289
+ // Ïîâòîðíûé çàïóñê, ïåðåäà÷à ParamStr
290
+ if ParamCount >= 2 then begin
291
+ if AnsiLowerCase(ExtractFileExt(ParamStr(2 ))) = ' .exe' then begin
292
+
293
+ // Handles /block
294
+ if AnsiLowerCase(ParamStr(1 )) = ' /block' then begin
295
+ if Pos(AnsiLowerCase(ExpandFileName(ParamStr(2 ))), AnsiLowerCase(RulePaths.Text)) = 0 then begin
296
+ AddRulesForApp(ExpandFileName(ParamStr(2 )));
297
+ StatusBar.SimpleText:=' ' + Format(ID_RULE_SUCCESSFULLY_CREATED, [CutStr(ExtractFileName(ParamStr(2 )), 22 )]);
298
+ Inc(BlockedCount);
299
+ Msg:=' %ADDED%' ;
300
+
301
+ end else begin
302
+ StatusBar.SimpleText:=' ' + Format(ID_RULE_ALREADY_EXISTS, [CutStr(ExtractFileName(ParamStr(2 )), 22 )]);
303
+ Msg:=' %EXISTS%' ;
304
+ end ;
305
+
306
+ // Handles /unblock
307
+ end else if AnsiLowerCase(ParamStr(1 )) = ' /unblock' then begin
308
+ if Pos(AnsiLowerCase(ExpandFileName(ParamStr(2 ))), AnsiLowerCase(RulePaths.Text)) > 0 then begin
309
+ for i:=0 to RuleNames.Count - 1 do begin
310
+ if AnsiLowerCase(ExpandFileName(ParamStr(2 ))) = AnsiLowerCase(RulePaths.Strings[i]) then begin
311
+ RemoveAppRules(RuleNames.Strings[i]);
312
+ StatusBar.SimpleText:=' ' + Format(ID_RULE_SUCCESSFULLY_REMOVED, [CutStr(ExtractFileName(ParamStr(2 )), 22 )]);
313
+ Inc(UnblockedCount);
314
+ Msg:=' %REMOVED%' ;
315
+
316
+ Break;
317
+ end ;
318
+ end ;
319
+
320
+ end else begin
321
+ StatusBar.SimpleText:=' ' + Format(ID_RULE_NOT_FOUND, [CutStr(ExtractFileName(ParamStr(2 )), 22 )]);
322
+ Msg:=' %MISSING%' ;
323
+ end ;
324
+ end ;
325
+
326
+ if Msg <> ' ' then begin
327
+ WND:=FindWindow(' TMain' , ' Firewall Easy' );
328
+ if WND <> 0 then begin
329
+ CloseDuplicate:=true;
330
+ SendMessageToHandle(WND, Msg);
331
+ end ;
332
+ end ;
333
+ end ;
334
+ end ;
335
+ end ;
336
+
281
337
function GetLocaleInformation (flag: integer): string;
282
338
var
283
339
pcLCA: array [0 ..20 ] of Char;
@@ -289,7 +345,7 @@ function GetLocaleInformation(flag: integer): string;
289
345
290
346
procedure TMain.FormCreate (Sender: TObject);
291
347
var
292
- WND: HWND; Ini: TIniFile; Reg: TRegistry;
348
+ Ini: TIniFile; Reg: TRegistry;
293
349
begin
294
350
// Ïåðåâîä / Translate
295
351
if FileExists(ExtractFilePath(ParamStr(0 )) + ' Languages\' + GetLocaleInformation(LOCALE_SENGLANGUAGE) + ' .ini' ) then
@@ -320,9 +376,12 @@ procedure TMain.FormCreate(Sender: TObject);
320
376
ID_RULE_SUCCESSFULLY_CREATED:=Ini.ReadString(' Main' , ' ID_RULE_SUCCESSFULLY_CREATED' , ' ' );
321
377
ID_RULE_ALREADY_EXISTS:=Ini.ReadString(' Main' , ' ID_RULE_ALREADY_EXISTS' , ' ' );
322
378
ID_RULE_SUCCESSFULLY_REMOVED:=Ini.ReadString(' Main' , ' ID_RULE_SUCCESSFULLY_REMOVED' , ' ' );
379
+ ID_RULE_NOT_FOUND:=Ini.ReadString(' Main' , ' ID_RULE_NOT_FOUND' , ' ' );
323
380
ID_CHOOSE_RULE:=Ini.ReadString(' Main' , ' ID_CHOOSE_RULE' , ' ' );
324
381
ID_RULES_SUCCESSFULLY_CREATED:=Ini.ReadString(' Main' , ' ID_RULES_SUCCESSFULLY_CREATED' , ' ' );
325
382
ID_FAILED_CREATE_RULES:=Ini.ReadString(' Main' , ' ID_FAILED_CREATE_RULES' , ' ' );
383
+ ID_RULES_SUCCESSFULLY_REMOVED:=Ini.ReadString(' Main' , ' ID_RULES_SUCCESSFULLY_REMOVED' , ' ' );
384
+ ID_FAILED_REMOVE_RULES:=Ini.ReadString(' Main' , ' ID_FAILED_REMOVE_RULES' , ' ' );
326
385
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS:=Ini.ReadString(' Main' , ' ID_REMOVED_RULES_FOR_NONEXISTENT_APPS' , ' ' );
327
386
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND:=Ini.ReadString(' Main' , ' ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND' , ' ' );
328
387
@@ -337,30 +396,25 @@ procedure TMain.FormCreate(Sender: TObject);
337
396
Reg:=TRegistry.Create;
338
397
Reg.RootKey:=HKEY_CLASSES_ROOT;
339
398
if (Reg.OpenKeyReadOnly(' \exefile\shell\FirewallEasy' ) = false) and (Reg.OpenKey(' \exefile\shell\FirewallEasy' , true)) then begin
340
- Reg.WriteString(' ' , Ini.ReadString(' Main' , ' ID_BLOCK_ACCESS ' , ' ' ));
399
+ Reg.WriteString(' MUIVerb ' , Ini.ReadString(' Main' , ' ID_CONTEXT_MENU ' , ' ' ));
341
400
Reg.WriteString(' Icon' , ParamStr(0 ));
342
- Reg.OpenKey(' \exefile\shell\FirewallEasy\command' , true);
343
- Reg.WriteString(' ' , ParamStr(0 ) + ' "%1"' );
401
+ Reg.WriteString(' SubCommands' , ' ' );
402
+ Reg.OpenKey(' \exefile\shell\FirewallEasy\Shell\Block' , true);
403
+ Reg.WriteString(' MUIVerb' , Ini.ReadString(' Main' , ' ID_BLOCK_ACCESS' , ' ' ));
404
+ Reg.WriteString(' HasLUAShield' , ' ' );
405
+ Reg.OpenKey(' \exefile\shell\FirewallEasy\Shell\Block\Command' , true);
406
+ Reg.WriteString(' ' , ' "' + ParamStr(0 ) + ' " /block "%1"' );
407
+ Reg.OpenKey(' \exefile\shell\FirewallEasy\Shell\Unblock' , true);
408
+ Reg.WriteString(' MUIVerb' , Ini.ReadString(' Main' , ' ID_UNBLOCK_ACCESS' , ' ' ));
409
+ Reg.WriteString(' HasLUAShield' , ' ' );
410
+ Reg.OpenKey(' \exefile\shell\FirewallEasy\Shell\Unblock\Command' , true);
411
+ Reg.WriteString(' ' , ' "' + ParamStr(0 ) + ' " /unblock "%1"' );
344
412
end ;
345
413
Reg.CloseKey;
346
414
Reg.Free;
347
415
Ini.Free;
348
416
349
- // Ïîâòîðíûé çàïóñê, ïåðåäà÷à ParamStr(1)
350
- if ParamCount > 0 then
351
- if AnsiLowerCase(ExtractFileExt(ParamStr(1 ))) = ' .exe' then begin
352
- if Pos(ParamStr(1 ), RulePaths.Text) = 0 then begin
353
- AddRulesForApp(ParamStr(1 ));
354
- StatusBar.SimpleText:=' ' + Format(ID_RULE_SUCCESSFULLY_CREATED, [CutStr(ExtractFileName(ParamStr(1 )), 22 )]);
355
- Inc(BlockedCount);
356
- WND:=FindWindow(' TMain' , ' Firewall Easy' );
357
- if WND <> 0 then begin
358
- CloseDuplicate:=true;
359
- SendMessageToHandle(WND, ' %ADDED%' );
360
- end ;
361
-
362
- end else StatusBar.SimpleText:=' ' + Format(ID_RULE_ALREADY_EXISTS, [CutStr(ExtractFileName(ParamStr(1 )), 22 )]);
363
- end ;
417
+ HandleParams;
364
418
365
419
if CloseDuplicate = false then
366
420
Caption:=' Firewall Easy' ;
@@ -406,12 +460,24 @@ procedure TMain.ListViewKeyUp(Sender: TObject; var Key: Word;
406
460
end ;
407
461
408
462
procedure TMain.WMCopyData (var Msg: TWMCopyData);
463
+ var
464
+ Input: string;
409
465
begin
410
- if PChar(TWMCopyData(Msg).CopyDataStruct.lpData) = ' %ADDED%' then begin
466
+ Input:=PChar(TWMCopyData(Msg).CopyDataStruct.lpData);
467
+
468
+ if Input = ' %ADDED%' then begin
411
469
Inc(BlockedCount);
412
470
LoadRegRules;
413
471
StatusBar.SimpleText:=' ' + ID_RULES_SUCCESSFULLY_CREATED + ' ' + IntToStr(BlockedCount);
414
- end ;
472
+ end else if Input = ' %REMOVED%' then begin
473
+ Inc(UnblockedCount);
474
+ LoadRegRules;
475
+ StatusBar.SimpleText:=' ' + ID_RULES_SUCCESSFULLY_REMOVED + ' ' + IntToStr(UnblockedCount);
476
+ end else if Input = ' %EXISTS%' then
477
+ StatusBar.SimpleText:=' ' + ID_FAILED_CREATE_RULES
478
+ else if Input = ' %MISSING%' then
479
+ StatusBar.SimpleText:=' ' + ID_FAILED_REMOVE_RULES;
480
+
415
481
Msg.Result:=Integer(True);
416
482
end ;
417
483
@@ -527,8 +593,8 @@ procedure TMain.ExportBtnClick(Sender: TObject);
527
593
528
594
procedure TMain.AboutBtnClick (Sender: TObject);
529
595
begin
530
- Application.MessageBox(PChar(Caption + ' 0.7.1 ' + #13 #10 +
531
- ID_LAST_UPDATE + ' 31.03.2024 ' + #13 #10 +
596
+ Application.MessageBox(PChar(Caption + ' 0.8 ' + #13 #10 +
597
+ ID_LAST_UPDATE + ' 25.05.2025 ' + #13 #10 +
532
598
' https://r57zone.github.io' + #13 #10 +
533
599
' r57zone@gmail.com' ), PChar(ID_ABOUT), MB_ICONINFORMATION);
534
600
end ;
0 commit comments