Skip to content

Commit 4c01c3b

Browse files
authored
Updated command line params and context menu by x-dragan-milosevic1993
Updated command line params and context menu
2 parents 01ec03c + 4cb7f3e commit 4c01c3b

File tree

9 files changed

+135
-32
lines changed

9 files changed

+135
-32
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@ Application allows you to block internet access to other applications using the
1010
- **Blocking access in a single click**<br>
1111
![](https://user-images.githubusercontent.com/9499881/169485181-faea855c-6ce7-49d0-8962-10fd798ea125.png)<br>
1212

13-
Right-click on a program to block its internet access.
13+
Right-click on a program to block or unblock its internet access.
1414
- **Support Drag and Drop**
1515

1616
Move programs to the "Firewall Easy" interface and access to the internet will be blocked for them.
17+
- **Command Line Arguments**
18+
```batch
19+
FirewallEasy.exe /block "C:\Path\To\App.exe"
20+
FirewallEasy.exe /unblock "C:\Path\To\App.exe"
21+
```
22+
23+
Invoke the functions to block or unblock applications from accessing the internet via clis or scripts.
1724

1825
## Screenshot
1926
![](https://github.com/r57zone/FirewallEasy/assets/9499881/f9770084-5913-42ad-9aff-764379bf0104)

Source/Languages/English.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ ID_EXIT=Exit
1616
ID_RULE_SUCCESSFULLY_CREATED=Rule for application "%s" successfully created
1717
ID_RULE_ALREADY_EXISTS=Rule for app "%s" already exists
1818
ID_RULE_SUCCESSFULLY_REMOVED=Rule for application "%s" successfully removed
19+
ID_RULE_NOT_FOUND=Rule for app "%s" does not exist
1920
ID_CHOOSE_RULE=Choose rule
2021
ID_RULES_SUCCESSFULLY_CREATED=Rules successfully created:
2122
ID_FAILED_CREATE_RULES=Failed to create rules
23+
ID_RULES_SUCCESSFULLY_REMOVED=Rules successfully removed:
24+
ID_FAILED_REMOVE_RULES=Failed to remove rules
2225
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS=Removed rules for nonexistent applications:
2326
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND=Rules for nonexistent applications not found
2427
ID_LAST_UPDATE=Last update:
25-
ID_BLOCK_ACCESS=Block internet access
28+
ID_CONTEXT_MENU=Firewall rules
29+
ID_BLOCK_ACCESS=Block internet access
30+
ID_UNBLOCK_ACCESS=Unblock internet access

Source/Languages/French.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ ID_EXIT=Quitter
1616
ID_RULE_SUCCESSFULLY_CREATED=Règle pour l'application "%s" créée avec succès
1717
ID_RULE_ALREADY_EXISTS=Règle pour l'application "%s" existe déjà
1818
ID_RULE_SUCCESSFULLY_REMOVED=Règle pour l'application "%s" retirée avec succès
19+
ID_RULE_NOT_FOUND=
1920
ID_CHOOSE_RULE=Choisir une règle
2021
ID_RULES_SUCCESSFULLY_CREATED=Règles créées avec succès :
2122
ID_FAILED_CREATE_RULES=Échec de la création des règles
23+
ID_RULES_SUCCESSFULLY_REMOVED=
24+
ID_FAILED_REMOVE_RULES=
2225
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS=Règles retirées pour les applications inexistantes :
2326
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND=Règles pour les applications inexistantes introuvables
2427
ID_LAST_UPDATE=Dernière mise à jour:
25-
ID_BLOCK_ACCESS=Bloquer l'accès Internet
28+
ID_CONTEXT_MENU=
29+
ID_BLOCK_ACCESS=Bloquer l'accès Internet
30+
ID_UNBLOCK_ACCESS=

Source/Languages/German.ini

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ ID_EXIT=Beenden
1616
ID_RULE_SUCCESSFULLY_CREATED=Regel für "%s" erfolgreich erstellt
1717
ID_RULE_ALREADY_EXISTS=Regel für "%s" existiert bereits
1818
ID_RULE_SUCCESSFULLY_REMOVED=Regel für "%s" erfolgreich entfernt
19+
ID_RULE_NOT_FOUND=
1920
ID_CHOOSE_RULE=Regel auswählen
2021
ID_RULES_SUCCESSFULLY_CREATED=Regeln erfolgreich erstellt:
2122
ID_FAILED_CREATE_RULES=Erstellen der Regeln fehlgeschlagen
23+
ID_RULES_SUCCESSFULLY_REMOVED=
24+
ID_FAILED_REMOVE_RULES=
2225
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS=Regeln für nicht-existierende Anwendungen entfernt:
2326
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND=Keine Regeln für nicht-existierende Anwendungen gefunden
2427
ID_LAST_UPDATE=Letztes Update:
28+
ID_CONTEXT_MENU=
2529
ID_BLOCK_ACCESS=Internetzugriff blockieren
30+
ID_UNBLOCK_ACCESS=

Source/Languages/Japanese.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ ID_EXIT=
1616
ID_RULE_SUCCESSFULLY_CREATED=「%s」のルールを作成しました
1717
ID_RULE_ALREADY_EXISTS=「%s」のルールは既に存在します
1818
ID_RULE_SUCCESSFULLY_REMOVED=「%s」のルールを削除しました
19+
ID_RULE_NOT_FOUND=
1920
ID_CHOOSE_RULE=ルールを選択
2021
ID_RULES_SUCCESSFULLY_CREATED=ルールの作成に成功しました:
2122
ID_FAILED_CREATE_RULES=ルールの作成に失敗しました
23+
ID_RULES_SUCCESSFULLY_REMOVED=
24+
ID_FAILED_REMOVE_RULES=
2225
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS=存在しないアプリケーションのルールを削除:
2326
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND=アプリケーションのルールがありません
2427
ID_LAST_UPDATE=最終更新日:
25-
ID_BLOCK_ACCESS=インターネットの接続をブロック
28+
ID_CONTEXT_MENU=
29+
ID_BLOCK_ACCESS=インターネットの接続をブロック
30+
ID_UNBLOCK_ACCESS=

Source/Languages/Russian.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ ID_EXIT=
1616
ID_RULE_SUCCESSFULLY_CREATED=Правило для приложения "%s" успешно создано
1717
ID_RULE_ALREADY_EXISTS=Правило для приложения "%s" уже существует
1818
ID_RULE_SUCCESSFULLY_REMOVED=Правило для приложения "%s" успешно удалено
19+
ID_RULE_NOT_FOUND=
1920
ID_CHOOSE_RULE=Выберите правило
2021
ID_RULES_SUCCESSFULLY_CREATED=Правил успешно создано:
2122
ID_FAILED_CREATE_RULES=Не удалось создать правила
23+
ID_RULES_SUCCESSFULLY_REMOVED=
24+
ID_FAILED_REMOVE_RULES=
2225
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS=Удалено правил для несуществующих приложений:
2326
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND=Правил для несуществующих приложений не найдено
2427
ID_LAST_UPDATE=Последнее обновление:
25-
ID_BLOCK_ACCESS=Заблокировать доступ в интернет
28+
ID_CONTEXT_MENU=
29+
ID_BLOCK_ACCESS=Заблокировать доступ в интернет
30+
ID_UNBLOCK_ACCESS=

Source/Languages/Spanish.ini

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ ID_EXIT=Salir
1616
ID_RULE_SUCCESSFULLY_CREATED=Regla para la aplicacion "%s" creada correctamente
1717
ID_RULE_ALREADY_EXISTS=Regla para la aplicacion "%s" ya existe
1818
ID_RULE_SUCCESSFULLY_REMOVED=Regla para la aplicacion "%s" removida correctamente
19+
ID_RULE_NOT_FOUND=
1920
ID_CHOOSE_RULE=Seleccione la regla
2021
ID_RULES_SUCCESSFULLY_CREATED=Reglas creadas satisfactoriamente:
2122
ID_FAILED_CREATE_RULES=Fallo al crear regla
23+
ID_RULES_SUCCESSFULLY_REMOVED=
24+
ID_FAILED_REMOVE_RULES=
2225
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS=Reglas eliminadas para aplicaciones inexistentes:
2326
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND=No se encuentran reglas para aplicaciones inexistentes
2427
ID_LAST_UPDATE=Ultima actualizacion:
25-
ID_BLOCK_ACCESS=Bloquear acceso a Internet
28+
ID_CONTEXT_MENU=
29+
ID_BLOCK_ACCESS=Bloquear acceso a Internet
30+
ID_UNBLOCK_ACCESS=

Source/RemoveContextMenu.reg

-114 Bytes
Binary file not shown.

Source/Unit1.pas

Lines changed: 92 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ TMain = class(TForm)
5757
private
5858
procedure LoadRegRules;
5959
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
60+
procedure HandleParams;
6061
{ Private declarations }
6162
public
6263
{ Public declarations }
@@ -67,14 +68,15 @@ TMain = class(TForm)
6768
RuleNames, RulePaths: TStringList;
6869
CloseDuplicate: boolean;
6970
BlockedCount: integer;
71+
UnblockedCount: integer;
7072

7173
// Ïåðåâîä / Tranlate
7274
ID_SEARCH: string;
7375

7476
ID_ABOUT, ID_LAST_UPDATE: string;
7577

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,
7880
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS, ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND: string;
7981

8082
const
@@ -247,7 +249,7 @@ procedure TMain.LoadRegRules;
247249
Reg:=TRegistry.Create;
248250
SubKeyNames:=TStringList.Create;
249251
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');
251253
Reg.GetValueNames(Rules);
252254
for i:=0 to Rules.Count - 1 do begin
253255
RegName:=Reg.ReadString(Rules.Strings[i]);
@@ -278,6 +280,60 @@ procedure SendMessageToHandle(TrgWND: HWND; MsgToHandle: string);
278280
SendMessage(TrgWND, WM_COPYDATA, Integer(Application.Handle), Integer(@CDS));
279281
end;
280282

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+
281337
function GetLocaleInformation(flag: integer): string;
282338
var
283339
pcLCA: array [0..20] of Char;
@@ -289,7 +345,7 @@ function GetLocaleInformation(flag: integer): string;
289345

290346
procedure TMain.FormCreate(Sender: TObject);
291347
var
292-
WND: HWND; Ini: TIniFile; Reg: TRegistry;
348+
Ini: TIniFile; Reg: TRegistry;
293349
begin
294350
// Ïåðåâîä / Translate
295351
if FileExists(ExtractFilePath(ParamStr(0)) + 'Languages\' + GetLocaleInformation(LOCALE_SENGLANGUAGE) + '.ini') then
@@ -320,9 +376,12 @@ procedure TMain.FormCreate(Sender: TObject);
320376
ID_RULE_SUCCESSFULLY_CREATED:=Ini.ReadString('Main', 'ID_RULE_SUCCESSFULLY_CREATED', '');
321377
ID_RULE_ALREADY_EXISTS:=Ini.ReadString('Main', 'ID_RULE_ALREADY_EXISTS', '');
322378
ID_RULE_SUCCESSFULLY_REMOVED:=Ini.ReadString('Main', 'ID_RULE_SUCCESSFULLY_REMOVED', '');
379+
ID_RULE_NOT_FOUND:=Ini.ReadString('Main', 'ID_RULE_NOT_FOUND', '');
323380
ID_CHOOSE_RULE:=Ini.ReadString('Main', 'ID_CHOOSE_RULE', '');
324381
ID_RULES_SUCCESSFULLY_CREATED:=Ini.ReadString('Main', 'ID_RULES_SUCCESSFULLY_CREATED', '');
325382
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', '');
326385
ID_REMOVED_RULES_FOR_NONEXISTENT_APPS:=Ini.ReadString('Main', 'ID_REMOVED_RULES_FOR_NONEXISTENT_APPS', '');
327386
ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND:=Ini.ReadString('Main', 'ID_RULES_FOR_NONEXISTENT_APPS_NOT_FOUND', '');
328387

@@ -337,30 +396,25 @@ procedure TMain.FormCreate(Sender: TObject);
337396
Reg:=TRegistry.Create;
338397
Reg.RootKey:=HKEY_CLASSES_ROOT;
339398
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', ''));
341400
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"');
344412
end;
345413
Reg.CloseKey;
346414
Reg.Free;
347415
Ini.Free;
348416

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;
364418

365419
if CloseDuplicate = false then
366420
Caption:='Firewall Easy';
@@ -406,12 +460,24 @@ procedure TMain.ListViewKeyUp(Sender: TObject; var Key: Word;
406460
end;
407461

408462
procedure TMain.WMCopyData(var Msg: TWMCopyData);
463+
var
464+
Input: string;
409465
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
411469
Inc(BlockedCount);
412470
LoadRegRules;
413471
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+
415481
Msg.Result:=Integer(True);
416482
end;
417483

@@ -527,8 +593,8 @@ procedure TMain.ExportBtnClick(Sender: TObject);
527593

528594
procedure TMain.AboutBtnClick(Sender: TObject);
529595
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 +
532598
'https://r57zone.github.io' + #13#10 +
533599
'r57zone@gmail.com'), PChar(ID_ABOUT), MB_ICONINFORMATION);
534600
end;

0 commit comments

Comments
 (0)