uses Winapi.ActiveX; procedure AddFirewallOutException(const Caption, AppPath: string); var Profile: Integer; Policy2: OleVariant; RObject: OleVariant; NewRule: OleVariant; const NET_FW_RULE_DIR_IN = 1; NET_FW_RULE_DIR_OUT = 2; NET_FW_ACTION_BLOCK = 0; NET_FW_ACTION_ALLOW = 1; NET_FW_IP_PROTOCOL_ANY = $00000100; NET_FW_PROFILE2_ALL = $7FFFFFFF; NET_FW_IP_PROTOCOL_TCP = 6; begin if Caption = '' then Exit; Profile := NET_FW_PROFILE2_ALL; Policy2 := CreateOleObject('HNetCfg.FwPolicy2'); RObject := Policy2.Rules; NewRule := CreateOleObject('HNetCfg.FWRule'); NewRule.Name := Caption; NewRule.Description := Caption; if AppPath <> '' then NewRule.ApplicationName := AppPath; NewRule.direction := NET_FW_RULE_DIR_OUT; NewRule.Protocol := NET_FW_IP_PROTOCOL_ANY; NewRule.Enabled := True; NewRule.Grouping := ''; NewRule.Profiles := Profile; NewRule.Action := NET_FW_ACTION_BLOCK; RObject.Add(NewRule); end; procedure DeleteFromWinFirewall(const RuleName: string); var Policy2: OleVariant; RObject: OleVariant; begin Policy2 := CreateOleObject('HNetCfg.FwPolicy2'); RObject := Policy2.Rules; RObject.Remove(RuleName); end; function FindFireWallRule(const ruleName: string): Boolean; var fwPolicy2: OleVariant; RulesObject: OleVariant; rule: OleVariant; oEnum: IEnumvariant; CurrentProfiles: Integer; iValue: LongWord; begin fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2'); RulesObject := fwPolicy2.Rules; CurrentProfiles := fwPolicy2.CurrentProfileTypes; oEnum := IUnknown(RulesObject._NewEnum) as IEnumVariant; while oEnum.Next(1, rule, iValue) = 0 do begin if UpperCase(ruleName) = UpperCase(rule.Name) then Exit(True); end; Result := False; end; procedure TForm1.Button1Click(Sender: TObject); var sText: AnsiString; begin sText := AnsiString(Edit1.Text); FUdp.SendPort := 9000; FUdp.SendBuf('192.168.x.x', PAnsiChar(sText), Length(sText), True); end; const xxx = 'aaaaa3'; procedure TForm1.Button2Click(Sender: TObject); begin DeleteFromWinFirewall(xxx); end; procedure TForm1.Button3Click(Sender: TObject); begin if not FindFireWallRule(xxx) then begin ShowMessage('not found.'); AddFirewallOutException(xxx, 'C:\Users\WS\Desktop\Project1.exe'); end; end;