iSafer_Main.pas
上传用户:xiuanze55
上传日期:2017-08-03
资源大小:1080k
文件大小:28k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit iSafer_Main;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, TrayIcon, Menus, StdCtrls, Buttons, ComCtrls, ExtCtrls, ImgList,
  6.   Registry, ShellAPI, IniFiles;
  7. type
  8.     TForm_Main = class(TForm)
  9.     TrayIcon: TTrayIcon;
  10.     Popup_Tray: TPopupMenu;
  11.     Tray_Open: TMenuItem;
  12.     N2: TMenuItem;
  13.     Tray_Close: TMenuItem;
  14.     Tray_Option: TMenuItem;
  15.     Image_Skin: TImage;
  16.     Btn_Safer: TImage;
  17.     Btn_Option: TImage;
  18.     Btn_Vaccine: TImage;
  19.     Label_Message: TLabel;
  20.     Btn_Minimize: TImage;
  21.     Btn_Close: TImage;
  22.     mnuTrayAbout: TMenuItem;
  23.     Tray_VirusVaccine: TMenuItem;
  24.     Tray_Help: TMenuItem;
  25.     ScreenLock: TMenuItem;
  26.     Lock: TMenuItem;
  27.     N1: TMenuItem;
  28.     ChangePassword: TMenuItem;
  29.     //For Init and Uinit fire wall
  30.     procedure PSMFW_InitActionExecute(Sender: TObject);
  31.     procedure PSMFW_UnInitActionExecute(Sender: TObject);
  32.     procedure BtnStatusCheck(BtnCaller: String);
  33.     procedure FormCreate(Sender: TObject);
  34.     procedure FormDestroy(Sender: TObject);
  35.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  36.     procedure TrayIconClick(Sender: TObject);
  37.     procedure TrayIconDblClick(Sender: TObject);
  38.     procedure Tray_OpenClick(Sender: TObject);
  39.     procedure Tray_OptionClick(Sender: TObject);
  40.     procedure Tray_CloseClick(Sender: TObject);
  41.     procedure Btn_SaferMouseDown(Sender: TObject; Button: TMouseButton;
  42.       Shift: TShiftState; X, Y: Integer);
  43.     procedure Btn_SaferMouseMove(Sender: TObject; Shift: TShiftState; X,
  44.       Y: Integer);
  45.     procedure Btn_SaferMouseUp(Sender: TObject; Button: TMouseButton;
  46.       Shift: TShiftState; X, Y: Integer);
  47.     procedure Btn_SaferClick(Sender: TObject);
  48.     procedure Btn_OptionMouseDown(Sender: TObject; Button: TMouseButton;
  49.       Shift: TShiftState; X, Y: Integer);
  50.     procedure Btn_OptionMouseMove(Sender: TObject; Shift: TShiftState; X,
  51.       Y: Integer);
  52.     procedure Btn_OptionMouseUp(Sender: TObject; Button: TMouseButton;
  53.       Shift: TShiftState; X, Y: Integer);
  54.     procedure Btn_OptionClick(Sender: TObject);
  55.     procedure Btn_VaccineMouseDown(Sender: TObject; Button: TMouseButton;
  56.       Shift: TShiftState; X, Y: Integer);
  57.     procedure Btn_VaccineMouseMove(Sender: TObject; Shift: TShiftState; X,
  58.       Y: Integer);
  59.     procedure Btn_VaccineMouseUp(Sender: TObject; Button: TMouseButton;
  60.       Shift: TShiftState; X, Y: Integer);
  61.     procedure Btn_VaccineClick(Sender: TObject);
  62.     procedure Btn_MinimizeClick(Sender: TObject);
  63.     procedure Btn_CloseClick(Sender: TObject);
  64.     procedure Image_SkinMouseDown(Sender: TObject; Button: TMouseButton;
  65.       Shift: TShiftState; X, Y: Integer);
  66.     procedure Image_SkinMouseMove(Sender: TObject; Shift: TShiftState; X,
  67.       Y: Integer);
  68.     procedure Image_SkinMouseUp(Sender: TObject; Button: TMouseButton;
  69.       Shift: TShiftState; X, Y: Integer);
  70.     procedure Label_MessageMouseMove(Sender: TObject; Shift: TShiftState;
  71.       X, Y: Integer);
  72.     procedure Tray_VirusVaccineClick(Sender: TObject);
  73.     procedure Tray_HelpClick(Sender: TObject);
  74.     procedure mnuTrayAboutClick(Sender: TObject);
  75.     procedure LockClick(Sender: TObject);
  76.     procedure ChangePasswordClick(Sender: TObject);
  77.     //procedure Tray_ChangePasswordClick(Sender: TObject);
  78.     //procedure Tray_LockScreenClick(Sender: TObject);
  79.     //procedure cmdScreenLockClick(Sender: TObject);
  80.   private
  81.     { Private declarations }
  82.   public
  83.      Setup_9x: Boolean;
  84.      bFWStart: Boolean;
  85.      bFWBlock: Boolean;
  86.      bLogStart: Boolean;
  87.      lastTime: TSystemTime;
  88.      //DDT 20040326
  89.      procedure TrapMSG(var MSGX: TMessage);
  90.      //
  91.   end;
  92. var
  93.   Form_Main: TForm_Main;
  94.   OS: TOSVersionInfo;
  95.   bMouseDown: Boolean;
  96.   posX, posY: Integer;
  97.   SourceRect, DestRect: TRect;
  98.   Stat_Safer, Stat_Option, Stat_Vaccine: Integer; // 滚瓢 惑怕 (0:Normal, 1:Over, 2:Click)
  99. //Some parameters used for debugging.
  100.      LogWindowParam: Boolean;
  101.      UnInjectLibParam:Boolean;
  102.   //ScreenLock*********************
  103.   ScreenLockDLLHandle: THandle;
  104.   //*******************************
  105. implementation
  106. uses iSafer_Resource, iSafer_Option,madCodeHook, FWDebug, ISaferAbout,
  107.   iSafer_FWRule;// iShieldUnit_95, iShieldUnit_NT;
  108. {$R *.dfm}
  109. //DDT 20040326
  110. procedure TForm_Main.TrapMSG(var MSGX: TMessage);
  111. begin
  112.   case MSGX.Msg of
  113.     WM_USER + 10:// User run Second Instance
  114.       Tray_OpenClick(nil);
  115.     else WndProc(MSGX);
  116.   end;
  117. End;
  118. //DDT END
  119. {
  120. Init FireWall
  121. }
  122. procedure TForm_Main.PSMFW_InitActionExecute(Sender: TObject); // 规拳寒 扁瓷 角青
  123. var
  124.      i, nTemp: Integer;
  125.      nLevel: Integer;
  126.      strLine, strTemp: String;
  127.      ruleItem: array[0..3] of String;
  128.      bSuccess: Boolean;
  129.      strFileName: String;
  130.      ListItem: TListItem;
  131.      TempFile: TextFile;
  132.      IniFile: TIniFile;
  133.      bCheck:Boolean;
  134. begin
  135.      //Start Firewall
  136.      bCheck:= InjectLibrary(ALL_SESSIONS Or SYSTEM_PROCESSES, 'PSMFireW.dll');
  137.      if( not bCheck) then
  138.           begin
  139.                Showmessage('Error in starting Firewall!'#13#10'You must have the administrator right to start Firewall.');
  140.                Form_Main.bFWStart:=false;
  141.           end
  142.      else
  143.           begin //Successfully started FireWall
  144.                Form_Main.bFWStart:=true;
  145.                ApplyFWStatus(0);
  146.           end;
  147.      // iSafer 滚瓢 惑怕 汲沥
  148.      if bFWStart then begin
  149.           with Form_Main do begin
  150.                SourceRect:= Rect((0*50)+1, (3*30)+1, (0*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  151.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  152.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  153.                Application.ProcessMessages;
  154.           end;
  155.           Form_Main.Label_Message.Caption:= 'Firewall is started';
  156.      end else begin
  157.           with Form_Main do begin
  158.                SourceRect:= Rect((0*50)+1, (2*30)+1, (0*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  159.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  160.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  161.                Application.ProcessMessages;
  162.           end;
  163.           Form_Main.Label_Message.Caption:= 'Firewall is stopped';
  164.      end;
  165.      Application.ProcessMessages;
  166. end;
  167. {
  168. Unintialized FireWall
  169. }
  170. procedure TForm_Main.PSMFW_UnInitActionExecute(Sender: TObject); // 规拳寒 扁瓷 吝瘤
  171. var
  172.      bCheck:Boolean;
  173. begin
  174.      //Stop FireWall
  175.      //bCheck:=UnInjectLibrary (ALL_SESSIONS Or SYSTEM_PROCESSES, 'PSMFireW.dll');
  176.      //For test, Uninject will be called in some special case !!!!!!!!
  177.      if(UnInjectLibParam) then
  178.          bCheck:=UnInjectLibrary (ALL_SESSIONS Or SYSTEM_PROCESSES, 'PSMFireW.dll')
  179.      else
  180.           bCheck:=True; //From March 16, UnInject willnot be called when Stopping FW
  181.      if not bCheck then
  182.           Showmessage('Error stopping Firewall!')
  183.      else
  184.        begin
  185.          bFWStart:=false; //Successfully stop FireWall
  186.          ApplyFWStatus(2);//Set FW Stop-status
  187.        end;
  188.      // iSafer 滚瓢 惑怕 汲沥
  189.      //Form_Main.bFWStart:= Form_Option.FDriverLoaded;
  190.      if bFWStart then begin
  191.           with Form_Main do begin
  192.                SourceRect:= Rect((0*50)+1, (3*30)+1, (0*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  193.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  194.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  195.                Application.ProcessMessages;
  196.           end;
  197.           Form_Main.Label_Message.Caption:= 'Firewall is started';
  198.      end else begin
  199.           with Form_Main do begin
  200.                SourceRect:= Rect((0*50)+1, (2*30)+1, (0*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  201.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  202.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  203.                Application.ProcessMessages;
  204.           end;
  205.           Form_Main.Label_Message.Caption:= 'Firewall is stopped';
  206.      end;
  207.      {Start FW service here ! Feb 13, 2004}
  208. end;
  209. // 滚瓢 惑怕 眉农窍扁
  210. procedure TForm_Main.BtnStatusCheck(BtnCaller: String);
  211. begin
  212.      // 滚瓢 惑怕 函版
  213.      if (BtnCaller <> 'Btn_Safer') and (Stat_Safer = 1) then begin
  214.           Stat_Safer:= 0;
  215.           Application.ProcessMessages;
  216.           if bFWStart then begin
  217.                SourceRect:= Rect((0*50)+1, (3*30)+1, (0*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  218.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  219.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  220.           end else begin
  221.                SourceRect:= Rect((0*50)+1, (2*30)+1, (0*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  222.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  223.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  224.           end;
  225.           Application.ProcessMessages;
  226.      end;
  227.      if (BtnCaller <> 'Btn_Option') and (Stat_Option = 1) then begin
  228.           Stat_Option:= 0;
  229.           Application.ProcessMessages;
  230.           SourceRect:= Rect((0*50)+1, (4*30)+1, (0*50)+Btn_Option.Width, (4*30)+Btn_Option.Height);
  231.           DestRect:= Rect(0, 0, Btn_Option.Width-1, Btn_Option.Height-1);
  232.           Btn_Option.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  233.           Application.ProcessMessages;
  234.      end;
  235.      if (BtnCaller <> 'Btn_Vaccine') and (Stat_Vaccine = 1) then begin
  236.           Stat_Vaccine:= 0;
  237.           Application.ProcessMessages;
  238.           SourceRect:= Rect((0*50)+1, (5*30)+1, (0*50)+Btn_Vaccine.Width, (5*30)+Btn_Vaccine.Height);
  239.           DestRect:= Rect(0, 0, Btn_Vaccine.Width-1, Btn_Vaccine.Height-1);
  240.           Btn_Vaccine.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  241.           Application.ProcessMessages;
  242.      end;
  243. end;
  244. procedure TForm_Main.FormCreate(Sender: TObject);
  245. var
  246.      sDir: array [0..255] of Char;
  247.      IniFile: TIniFile;
  248.      reg: TRegistry;
  249. begin
  250.      {// 吝汗 角青 规瘤
  251.      CreateMutex(nil, False, 'iSafer - PSMKorea');
  252.      if GetLastError=ERROR_ALREADY_EXISTS then begin
  253.           showmessage('橇肺弊伐捞 捞固 角青吝涝聪促.');
  254.           Halt(0);
  255.      end;}
  256.      //DDT 20040306
  257.      WindowProc:=TrapMSG;//Change the WindowProc to User's proc.
  258.      //DDT END
  259.      // 函荐 檬扁汲沥
  260.      Setup_9x:= False;
  261.      bFWStart:= False;
  262.      bFWBlock:= False;
  263.      bLogStart:= False;
  264.      GetLocalTime(lastTime);
  265.      bMouseDown:= False;
  266.      posX:= 0;
  267.      posY:= 0;
  268.      Stat_Safer:= 0;
  269.      Stat_Option:= 0;
  270.      Stat_Vaccine:= 0;
  271.  
  272.      // Form 檬扁困摹 汲沥
  273.      Form_Main.Left:= GetSystemMetrics(SM_CXFULLSCREEN)-Form_Main.Width;
  274.      Form_Main.Top:= GetSystemMetrics(SM_CYFULLSCREEN)+GetSystemMetrics(SM_CYCAPTION)-Form_Main.Height;
  275.         {
  276.      // OS 滚傈 沥焊 舅酒郴扁
  277.      ZeroMemory(@OS,SizeOf(OS));
  278.      OS.dwOSVersionInfoSize:=SizeOf(OS);
  279.      GetVersionEx(OS);
  280.      // PC 规拳寒 葛碘 汲摹/角青 咯何 眉农 (for Win 9x)
  281.      if OS.dwPlatformId <> VER_PLATFORM_WIN32_NT then begin
  282.           if (ParamStr(1) = '/b') then begin
  283.                IniFile:= TIniFile.Create(ExtractFilePath(Application.ExeName) + 'safer.ini');
  284.                IniFile.WriteInteger('FW', 'Setup_9x', 1);
  285.                IniFile.Free;
  286.                Halt(0);
  287.           end else begin
  288.                IniFile:= TIniFile.Create(ExtractFilePath(Application.ExeName) + 'safer.ini');
  289.                if (IniFile.ReadInteger('FW', 'Setup_9x', 0) = 1) then Setup_9x:= True;
  290.                IniFile.Free;
  291.           end;
  292.      end;
  293.      // PC 规拳寒 葛碘 汲摹 (for Win 9x)
  294.      if (OS.dwPlatformId <> VER_PLATFORM_WIN32_NT) and (not Setup_9x) then begin
  295.           // 1. iLoader.vxd, iShield.vxd 甫 WindowsSystem 弃歹俊 汗荤茄促.
  296.           GetSystemDirectory(sDir, sizeof(sDir));
  297.           CopyFile('iLoader.vxd', PChar(String(sDir) + 'iLoader.vxd'), True);
  298.           CopyFile('iShield.vxd', PChar(String(sDir) + 'iShield.vxd'), True);
  299.           // 2. 饭瘤胶飘府俊 沥焊甫 殿废茄促.
  300.           reg:= TRegistry.Create;
  301.           reg.RootKey:= HKEY_LOCAL_MACHINE;
  302.           reg.OpenKey('SystemCurrentControlSetServicesVxDILOADER', true);
  303.           reg.WriteString('StaticVxd', 'iloader.vxd');
  304.           reg.CloseKey;
  305.           reg.Free;
  306.           // 3. 矫累橇肺弊伐俊 沥焊甫 殿废茄促.
  307.           reg:= TRegistry.Create;
  308.           reg.RootKey:= HKEY_LOCAL_MACHINE;
  309.           reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', true);
  310.           reg.WriteString('iSafer Manager', ExtractFilePath(Application.ExeName) + 'iSafer.exe /b');
  311.           reg.CloseKey;
  312.           reg.Free;
  313.      end;
  314.      }
  315.   LogWindowParam:=False;
  316.   UnInjectLibParam:=False;
  317.   if(ParamCount>=1) and(ParamStr(1)='debug') then
  318.   begin
  319.      Application.CreateForm(TDebugFW, DebugFW);
  320.      LogWindowParam:=True;
  321.   end;
  322.   if ((ParamCount>=1) and(ParamStr(1)='uninject')) then
  323.   begin
  324.      UnInjectLibParam:=True;
  325.   end ;
  326.   if ((ParamCount>=2) and (ParamStr(1)='debug')and(ParamStr(2)='uninject')) then
  327.   begin
  328.        LogWindowParam:=True;
  329.        UnInjectLibParam:=True;
  330.   end;
  331. end;
  332. procedure TForm_Main.FormDestroy(Sender: TObject);
  333. begin
  334.      //UnInit FireWall in the case it is running FW --HUY Note
  335.      if bFWStart then begin
  336.           //if not UnInjectLibrary (ALL_SESSIONS Or SYSTEM_PROCESSES, 'PSMFireW.dll')
  337.           // then Showmessage('Error stopping Firewall!');
  338.          //bFWStart:=False;
  339.          //PSMFW_UnInitActionExecute(NIl);
  340.          bFWStart:=false; //Successfully stop FireWall
  341.          ApplyFWStatus(2);//Set FW Stop-status
  342.      end;
  343.      // Tray Icon 角青 辆丰窍扁
  344.      TrayIcon.Active:= False;
  345. end;
  346. procedure TForm_Main.FormClose(Sender: TObject; var Action: TCloseAction);
  347. begin
  348.      // 肺弊沤祸 辆丰
  349.      {
  350.      if bFWStart then begin
  351.           if OS.dwPlatformId = VER_PLATFORM_WIN32_NT then begin
  352.                iShieldUnit_NT.iShieldSetLogCallback(nil);
  353.                iShieldUnit_NT.iShieldUnInitDriver;
  354.           end else if Form_Main.Setup_9x then begin
  355.                iShieldUnit_95.iShieldSetLogCallback(nil);
  356.                iShieldUnit_95.iShieldUnInitDriver;
  357.           end;
  358.      end;
  359.      }
  360.      //Unitial FW huynote
  361.      // Tray Icon 角青 辆丰窍扁
  362.      TrayIcon.Active:= False;
  363. end;
  364. procedure TForm_Main.TrayIconClick(Sender: TObject);
  365. begin
  366.      Tray_OpenClick(self);
  367. end;
  368. procedure TForm_Main.TrayIconDblClick(Sender: TObject);
  369. begin
  370.      Tray_OpenClick(self);
  371. end;
  372. procedure TForm_Main.Tray_OpenClick(Sender: TObject);
  373. begin
  374.      // Application 焊咯林扁
  375.      if (not IsWindowVisible(Form_Main.Handle)) then begin
  376.           ShowWindow(Application.Handle,SW_SHOWMINIMIZED);
  377.           ShowWindow(Application.Handle,SW_SHOWNORMAL);
  378.      end;
  379.      SetForegroundWindow(Form_Main.Handle);
  380.      // Tray Icon 角青 辆丰窍扁
  381.      TrayIcon.Active:= False;
  382. end;
  383. procedure TForm_Main.Tray_OptionClick(Sender: TObject);
  384. begin
  385.      Btn_OptionClick(self);
  386. end;
  387. procedure TForm_Main.Tray_CloseClick(Sender: TObject);
  388. begin
  389.      Btn_CloseClick(self);
  390. end;
  391. procedure TForm_Main.Btn_SaferMouseDown(Sender: TObject;
  392.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Safer 滚瓢 Down
  393. begin
  394.      Stat_Safer:= 2;
  395.      Application.ProcessMessages;
  396.      if bFWStart then begin
  397.           SourceRect:= Rect((2*50)+1, (3*30)+1, (2*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  398.           DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  399.           Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  400.      end else begin
  401.           SourceRect:= Rect((2*50)+1, (2*30)+1, (2*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  402.           DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  403.           Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  404.      end;
  405.      Application.ProcessMessages;
  406. end;
  407. procedure TForm_Main.Btn_SaferMouseMove(Sender: TObject;
  408.   Shift: TShiftState; X, Y: Integer);   // Safer 滚瓢 Move
  409. begin
  410.      if (Stat_Safer = 0) then begin
  411.           Stat_Safer:= 1;
  412.           Application.ProcessMessages;
  413.           if bFWStart then begin
  414.                SourceRect:= Rect((1*50)+1, (3*30)+1, (1*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  415.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  416.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  417.           end else begin
  418.                SourceRect:= Rect((1*50)+1, (2*30)+1, (1*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  419.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  420.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  421.           end;
  422.           BtnStatusCheck('Btn_Safer');
  423.           Application.ProcessMessages;
  424.      end;
  425. end;
  426. procedure TForm_Main.Btn_SaferMouseUp(Sender: TObject;
  427.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Safer 滚瓢 Up
  428. begin
  429.      if (Stat_Safer > 0) then begin
  430.           Stat_Safer:= 0;
  431.           Application.ProcessMessages;
  432.           if bFWStart then begin
  433.                SourceRect:= Rect((0*50)+1, (3*30)+1, (0*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  434.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  435.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  436.           end else begin
  437.                SourceRect:= Rect((0*50)+1, (2*30)+1, (0*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  438.                DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  439.                Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  440.           end;
  441.           Application.ProcessMessages;
  442.      end;
  443. end;
  444. //Start FirWall
  445. procedure TForm_Main.Btn_SaferClick(Sender: TObject);       // Safer 滚瓢 Click
  446. begin
  447.      Stat_Safer:= 0;
  448.      Application.ProcessMessages;
  449.      if bFWStart then begin
  450.           SourceRect:= Rect((0*50)+1, (3*30)+1, (0*50)+Btn_Safer.Width, (3*30)+Btn_Safer.Height);
  451.           DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  452.           Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  453.      end else begin
  454.           SourceRect:= Rect((0*50)+1, (2*30)+1, (0*50)+Btn_Safer.Width, (2*30)+Btn_Safer.Height);
  455.           DestRect:= Rect(0, 0, Btn_Safer.Width-1, Btn_Safer.Height-1);
  456.           Btn_Safer.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  457.      end;
  458.      Application.ProcessMessages;
  459.           {Started Already}
  460.           if bFWStart then begin
  461.                if Application.MessageBox('Do you really want to stop the firewall?', 'iSafer', MB_YESNO) = IDYES then begin
  462.                     PSMFW_UnInitActionExecute(nil);
  463.                end;
  464.           end else
  465.           {Start FireWall!!!}
  466.           begin
  467.                PSMFW_InitActionExecute(nil);
  468.           end;
  469.      
  470. end;
  471. procedure TForm_Main.Btn_OptionMouseDown(Sender: TObject;
  472.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Option 滚瓢 Down
  473. begin
  474.      Stat_Option:= 2;
  475.      Application.ProcessMessages;
  476.      SourceRect:= Rect((2*50)+1, (4*30)+1, (2*50)+Btn_Option.Width, (4*30)+Btn_Option.Height);
  477.      DestRect:= Rect(0, 0, Btn_Option.Width-1, Btn_Option.Height-1);
  478.      Btn_Option.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  479.      Application.ProcessMessages;
  480. end;
  481. procedure TForm_Main.Btn_OptionMouseMove(Sender: TObject;
  482.   Shift: TShiftState; X, Y: Integer);   // Option 滚瓢 Move
  483. begin
  484.      if (Stat_Option = 0) then begin
  485.           Stat_Option:= 1;
  486.           Application.ProcessMessages;
  487.           SourceRect:= Rect((1*50)+1, (4*30)+1, (1*50)+Btn_Option.Width, (4*30)+Btn_Option.Height);
  488.           DestRect:= Rect(0, 0, Btn_Option.Width-1, Btn_Option.Height-1);
  489.           Btn_Option.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  490.           BtnStatusCheck('Btn_Option');
  491.           Application.ProcessMessages;
  492.      end;
  493. end;
  494. procedure TForm_Main.Btn_OptionMouseUp(Sender: TObject;
  495.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Option 滚瓢 Up
  496. begin
  497.      if (Stat_Option > 0) then begin
  498.           Stat_Option:= 0;
  499.           Application.ProcessMessages;
  500.           SourceRect:= Rect((0*50)+1, (4*30)+1, (0*50)+Btn_Option.Width, (4*30)+Btn_Option.Height);
  501.           DestRect:= Rect(0, 0, Btn_Option.Width-1, Btn_Option.Height-1);
  502.           Btn_Option.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  503.           Application.ProcessMessages;
  504.      end;
  505. end;
  506. procedure TForm_Main.Btn_OptionClick(Sender: TObject);      // Option 滚瓢 Click
  507. begin
  508.      Stat_Option:= 0;
  509.      Application.ProcessMessages;
  510.      SourceRect:= Rect((0*50)+1, (4*30)+1, (0*50)+Btn_Option.Width, (4*30)+Btn_Option.Height);
  511.      DestRect:= Rect(0, 0, Btn_Option.Width-1, Btn_Option.Height-1);
  512.      Btn_Option.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  513.      Application.ProcessMessages;
  514.      // Show firewall option dialogs
  515.      Form_Option.Show;
  516.      //For debug
  517.      if(ParamCount>=1) and(ParamStr(1)='debug') then
  518.      begin
  519.           DebugFW.Show;
  520.      end
  521. end;
  522. procedure TForm_Main.Btn_VaccineMouseDown(Sender: TObject;
  523.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Vaccine 滚瓢 Down
  524. begin
  525.      Stat_Vaccine:= 2;
  526.      Application.ProcessMessages;
  527.      SourceRect:= Rect((2*50)+1, (5*30)+1, (2*50)+Btn_Vaccine.Width, (5*30)+Btn_Vaccine.Height);
  528.      DestRect:= Rect(0, 0, Btn_Vaccine.Width-1, Btn_Vaccine.Height-1);
  529.      Btn_Vaccine.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  530.      Application.ProcessMessages;
  531. end;
  532. procedure TForm_Main.Btn_VaccineMouseMove(Sender: TObject;
  533.   Shift: TShiftState; X, Y: Integer);   // Vaccine 滚瓢 Move
  534. begin
  535.      if (Stat_Vaccine = 0) then begin
  536.           Stat_Vaccine:= 1;
  537.           Application.ProcessMessages;
  538.           SourceRect:= Rect((1*50)+1, (5*30)+1, (1*50)+Btn_Vaccine.Width, (5*30)+Btn_Vaccine.Height);
  539.           DestRect:= Rect(0, 0, Btn_Vaccine.Width-1, Btn_Vaccine.Height-1);
  540.           Btn_Vaccine.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  541.           BtnStatusCheck('Btn_Vaccine');
  542.           Application.ProcessMessages;
  543.      end;
  544. end;
  545. procedure TForm_Main.Btn_VaccineMouseUp(Sender: TObject;
  546.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Vaccine 滚瓢 Up
  547. begin
  548.      if (Stat_Vaccine > 0) then begin
  549.           Stat_Vaccine:= 0;
  550.           Application.ProcessMessages;
  551.           SourceRect:= Rect((0*50)+1, (5*30)+1, (0*50)+Btn_Vaccine.Width, (5*30)+Btn_Vaccine.Height);
  552.           DestRect:= Rect(0, 0, Btn_Vaccine.Width-1, Btn_Vaccine.Height-1);
  553.           Btn_Vaccine.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  554.           Application.ProcessMessages;
  555.      end;
  556. end;
  557. procedure TForm_Main.Btn_VaccineClick(Sender: TObject);     // Vaccine 滚瓢 Click
  558. begin
  559.   Btn_Vaccine.Enabled:=False;
  560.   LockClick(nil);
  561.   Btn_Vaccine.Enabled:=True;
  562.       {
  563.      Stat_Vaccine:= 0;
  564.      Application.ProcessMessages;
  565.      SourceRect:= Rect((0*50)+1, (5*30)+1, (0*50)+Btn_Vaccine.Width, (5*30)+Btn_Vaccine.Height);
  566.      DestRect:= Rect(0, 0, Btn_Vaccine.Width-1, Btn_Vaccine.Height-1);
  567.      Btn_Vaccine.Canvas.CopyRect(DestRect, Form_Resource.Image_BtnList.Canvas, SourceRect);
  568.      Application.ProcessMessages;
  569.      Btn_Vaccine.Enabled:=False;
  570.      //20031212: Includes full path
  571.      ShellExecute(handle, 'Open', Pchar(ExtractFilePath(Application.ExeName)+'vSafer.exe'), nil, nil, SW_SHOW);
  572.      Btn_Vaccine.Enabled:=True;
  573.      }
  574. end;
  575. procedure TForm_Main.Btn_MinimizeClick(Sender: TObject);    // 弥家拳 滚瓢 Click
  576. begin
  577.      // Tray Icon 角青窍扁
  578.      TrayIcon.Active:= True;
  579.      // Application 见扁扁
  580.      if(Form_Option.Visible)then
  581.         Form_Option.Close;
  582.      Application.Minimize;
  583.      ShowWindow(Application.Handle,SW_HIDE);
  584. end;
  585. procedure TForm_Main.Btn_CloseClick(Sender: TObject);       // 辆丰 滚瓢 Click
  586. begin
  587.      if Application.MessageBox('Do you really want to exit?', 'iSafer', MB_YESNO) = IDYES then begin
  588.       PSMFW_UnInitActionExecute(nil);
  589.       Halt(0);
  590.      end;
  591. end;
  592. procedure TForm_Main.Image_SkinMouseDown(Sender: TObject;
  593.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  594. begin
  595.      // Form 捞悼窍扁
  596.      bMouseDown:= True;
  597.      posX:= X;
  598.      posY:= Y;
  599. end;
  600. procedure TForm_Main.Image_SkinMouseMove(Sender: TObject;
  601.   Shift: TShiftState; X, Y: Integer);
  602. var
  603.      tmpX, tmpY: Integer;
  604. begin
  605.      if bMouseDown then begin
  606.           // Form 捞悼窍扁
  607.           tmpX:= Form_Main.Left + (X - posX);
  608.           tmpY:= Form_Main.Top + (Y - posY);
  609.           if tmpX < 0 then tmpX:= 0;
  610.           if tmpX > GetSystemMetrics(SM_CXFULLSCREEN)-Form_Main.Width then tmpX:= GetSystemMetrics(SM_CXFULLSCREEN)-Form_Main.Width;
  611.           if tmpY < 0 then tmpY:= 0;
  612.           if tmpY > GetSystemMetrics(SM_CYFULLSCREEN)+GetSystemMetrics(SM_CYCAPTION)-Form_Main.Height then tmpY:= GetSystemMetrics(SM_CYFULLSCREEN)+GetSystemMetrics(SM_CYCAPTION)-Form_Main.Height;
  613.           Form_Main.Left:= tmpX;
  614.           Form_Main.Top:= tmpY;
  615.      end else begin
  616.           if (Stat_Safer = 1) or (Stat_Option = 1) or (Stat_Vaccine = 1) then begin
  617.                BtnStatusCheck('');
  618.           end;
  619.      end;
  620. end;
  621. procedure TForm_Main.Image_SkinMouseUp(Sender: TObject;
  622.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  623. begin
  624.      // Form 捞悼窍扁
  625.      bMouseDown:= False;
  626. end;
  627. procedure TForm_Main.Label_MessageMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);
  628. begin
  629.      if (Stat_Safer = 1) or (Stat_Option = 1) or (Stat_Vaccine = 1) then begin
  630.           BtnStatusCheck('');
  631.      end;
  632. end;
  633. // Add on 10th March, 2004
  634. procedure TForm_Main.Tray_VirusVaccineClick(Sender: TObject);
  635. begin
  636.      ShellExecute(handle, 'Open', Pchar(ExtractFilePath(Application.ExeName)+'vSafer.exe'), nil, nil, SW_SHOW);
  637. end;
  638. //Execuate help utility
  639. procedure TForm_Main.Tray_HelpClick(Sender: TObject);
  640. begin
  641.     ShellExecute(handle, 'Open', Pchar(ExtractFilePath(Application.ExeName)+'iSaferHelp.chm'), nil, nil, SW_SHOW);
  642. end;
  643. procedure TForm_Main.mnuTrayAboutClick(Sender: TObject);
  644. begin
  645.      ISaferAboutDlg.ShowModal();
  646. end;
  647. procedure TForm_Main.LockClick(Sender: TObject);
  648. type
  649.      tLockScrFunc = function(HWND: DWORD): DWord; stdcall;
  650. var
  651.         LockScr: tLockScrFunc;
  652. begin
  653.         {If the ScreenLock DLL is not loaded yet, load it}
  654.         if ScreenLockDLLHandle < 32 then ScreenLockDLLHandle:= LoadLibrary('PSMScrLk.dll');
  655.         if ScreenLockDLLHandle < 32 then ShowMessage('Error loading PSMScrLk.dll!')
  656.         else
  657.         begin
  658.                 @LockScr:= GetProcAddress(ScreenLockDLLHandle, 'LockScr');
  659.                 if not (@LockScr = nil) then begin
  660.                         LockScr(0);
  661.                 end;
  662.                 {NOTE!!!: DO NOT CALL FreeLibrary(), we must keep the process in the DLL running!!!}
  663.                 {We will call FreeLibrary() when iSafer exits}
  664.                 {FreeLibrary(ScreenLockDLLHandle);}
  665.         end;
  666. end;
  667. procedure TForm_Main.ChangePasswordClick(Sender: TObject);
  668. type
  669.      tChangePWFunc = function(): DWord; stdcall;
  670. var
  671.         ChangePW: tChangePWFunc;
  672. begin
  673.         {If the ScreenLock DLL is not loaded yet, load it}
  674.         if ScreenLockDLLHandle < 32 then ScreenLockDLLHandle:= LoadLibrary('PSMScrLk.dll');
  675.         if ScreenLockDLLHandle < 32 then ShowMessage('Error loading PSMScrLk.dll!')
  676.         else
  677.         begin
  678.                 @ChangePW:= GetProcAddress(ScreenLockDLLHandle, 'ChangePW');
  679.                 if not (@ChangePW = nil) then begin
  680.                         ChangePW();
  681.                 end;
  682.                 {NOTE!!!: DO NOT CALL FreeLibrary(), we must keep the process in the DLL running!!!}
  683.                 {We will call FreeLibrary() when iSafer exits}
  684.                 {FreeLibrary(ScreenLockDLLHandle);}
  685.         end;
  686. end;
  687. end.