procedure TfrmMain.btnSettingClick(Sender: TObject); begin if btnSetting.Caption = '設置' then begin btnSetting.Caption := '隱藏'; frmMain.ClientHeight := 223; GroupBox2.Visible := False; GroupBox1.Visible := True end else begin btnSetting.Caption := '設置'; GroupBox1.Visible := False; frmMain.ClientHeight := 95; end; end;
procedure TfrmMain.btnAboutClick(Sender: TObject); begin ShowMessage(IntToStr(Get_Enterbox)); ShowMessage(str); if btnAbout.Caption = '關於' then begin btnAbout.Caption := '隱藏'; FrmMain.ClientHeight := 223; GroupBox1.Visible := False; GroupBox2.Visible := True; end else begin btnAbout.Caption := '關於'; GroupBox2.Visible := False; FrmMain.ClientHeight := 95; end; end;
file://單擊打開按鈕執行以下部分 procedure TfrmMain.btnOpenClick(Sender: TObject); begin if OpenDlg.Execute then begin IPFilePath := OpenDlg.FileName; end; if IPFilePath = '' then Exit else begin btnStart.Enabled := True; end;
end; file://獲取系統所在目錄 function TfrmMain.GetSysDir: String; var SysDir: PChar; begin GetMem(SysDir, MAX_PATH); GetSystemDirectory(SysDir, MAX_PATH); Result := StrPas(SysDir); FreeMem(SysDir, MAX_PATH); end; file://獲取遠程桌面程序窗口句柄 function TfrmMain.Get_Remote_Hwnd: HWND; var RHwnd: HWND; begin RHwnd := FindWindow('#32770', '遠程桌面連接'); if RHwnd <> 0 then Result := RHwnd else Result := 0; end; file://獲取IP輸入筐句柄 function TfrmMain.Get_IPBox_Hwnd: THandle; var IPBoxHwnd: THandle; begin IPBoxHwnd := FindWindowEx( Get_Remote_Hwnd, 0, 'ComboBoxEx32', nil ); if IPBoxHwnd <> 0 then Result := IPBoxHwnd else Result := IPBoxHwnd; end; file://向IP地址輸入筐中發送IP地址字符串 procedure TfrmMain.Set_IPText(IPbox: THandle; IP: String); var IPText: PChar; IPBuf: Integer; begin GetMem(IPText, Length(IP)); StrCopy(IPText, PChar(IP)); try IPBuf := LongInt(IPText); SendMessage( IPbox, WM_SETTEXT, 0, IPBuf ); finally FreeMem(IPText, Length(IP)); end; end; file://獲取連接按鈕句柄 function TfrmMain.Get_ConnectHwnd: HWND; var BtnHwnd: HWND; begin BtnHwnd := FindWindowEx( Get_Remote_Hwnd, 0, 'Button', '連接(&N)' ); if BtnHwnd <> 0 then Result := BtnHwnd else Result := 0; end; file://獲取取消按鈕句柄 function TfrmMain.GetCloseHwnd: HWND; var BtnClose: HWND; begin BtnClose := FindWindowEx( Get_Remote_Hwnd, 0, 'Button', '取消', ); if BtnClose <> 0 then Result := BtnClose else Result := 0; end; file://獲取中斷網絡連接窗口句柄&該窗口確認按鈕句柄 function TfrmMain.Get_IntermitFrmHwnd(Name: String): HWND; var FrmHwnd: HWND; BtnHwnd: HWND; begin if (Name = 'F') or (Name = 'f') then begin FrmHwnd := FindWindow('#32770', '中斷遠程桌面連接'); if FrmHwnd <> 0 then Result := FrmHwnd else Result := 0; end; if (Name = 'B') or (Name = 'b') then begin BtnHwnd := FindWindowEx( FindWindow('#32770', '中斷遠程桌面連接'), 0, 'Button', '確定', ); if BtnHwnd <> 0 then Result := BtnHwnd else Result := BtnHwnd; end; end; file://把IP文件讀入Memo控件 procedure TfrmMain.ReadTomemIP(IPPath: String); var TF: TextFile; IPStr: String; begin memIP.Clear; if FileExists(IPPath) then begin AssignFile(TF, IPPath); Reset(TF); while not Eof(TF) do begin Readln(TF, IPStr); memIP.Lines.Add(IPStr); end; CloseFile(TF); end else begin ShowMessage('請導入IP文件'); end;
end;
file://讀入Memo中IP並連接 procedure TfrmMain.ReadIPFiles(Line: Integer); begin Howline := memIP.Lines.Count; if Line <= (Howline - 1) then begin Str := memIP.Lines.Strings[Line]; Set_IPText(Get_IPBox_Hwnd, Str); SendMessage( Get_ConnectHwnd, WM_LBUTTONDOWN, MK_LBUTTON, 0 ); SendMessage( Get_ConnectHwnd, WM_LBUTTONUP, 0, 0 ); end else begin timWait.Enabled := False; timLoop.Enabled := False; MessageBox( frmMain.Handle, 'IP已經全部過濾', '輸入法漏洞過濾程序', MB_OK + MB_ICONINFORMATION ); end; end;
file://取得登陸窗口句柄 function TfrmMain.Get_EnterBox: HWND; var Ebox: HWND; sIP: String; begin sIP := Str + ' - 遠程桌面'; Ebox := FindWindow('TSSHELLWND', PChar(sIP)); if Ebox <> 0 then Result := Ebox else Result := 0; end; file://寫入過濾後的IP procedure TfrmMain.WriteIP(s, FileName: String); var TF: TextFile; IP: String; begin WIP := s; if FileExists(FileName) then begin if s <> WIP then begin AssignFile(TF, FileName ); Append(TF); Writeln(TF, s); CloseFile(TF); end; end; end;file://創建保存過濾後IP的文件 procedure TfrmMain.CreateIPFile(FileName: String); var fHwnd: Integer; TF: TextFile; begin if not FileExists(FileName) then begin fHwnd := FileCreate(FileName); FileClose(fHwnd); AssignFile(TF, FileName); Append(TF); Writeln(TF, '過濾過的IP:'); CloseFile(TF); end; end;
file://單擊開始按鈕以下部分 procedure TfrmMain.btnStartClick(Sender: TObject); begin WinExec(PChar(GetSysDir + 'mstsc.exe'), SW_SHOWNORMAL); ReadTomemIP(IPFilePath); timLoop.Enabled := True; timWait.Enabled := True; btnStart.Enabled := False; btnStop.Enabled := True; btnPause.Enabled := True; CloseWindow(frmMain.Handle); end; file://取得指定坐標顏色 function TfrmMain.GetColor(x, y: Integer): Integer; var WindowDC: THandle; Color: Integer; begin WindowDC := GetDC(0); Color := GetPixel(WindowDC, x, y); Result := Color; end;
procedure TfrmMain.SendKeyboard(KA: TKAction); begin if KA = CTAB then begin Keybd_event(VK_TAB, 0, 0, 0); Keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); end; end;
procedure TfrmMain.Sendmose(a, x, y: Integer); begin if a = 1 then begin SetCursorPos(x, y); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); end; if a = 2 then begin SetCursorPos(x, y); mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); end; end;
procedure TfrmMain.timLoopTimer(Sender: TObject); begin if Get_IntermitFrmHwnd('F') <> 0 then begin SendMessage( Get_IntermitFrmHwnd('B'), WM_LBUTTONDOWN, MK_LBUTTON, 0 ); SendMessage( Get_IntermitFrmHwnd('B'), WM_LBUTTONUP, 0, 0 ); I := 0; end; if Get_EnterBox <> 0 then begin hEnterBox := Get_EnterBox; timWait.Enabled := false; if (TimKeyAction.Enabled <> True) then timKeyAction.Enabled := True; end; if (Get_EnterBox <> 0) and (Get_EnterBox <> hEnterBox) then begin timWait.Enabled := false; end; if GetColor(186, 570) = 16777215 then begin Sendmose(1, 1009, 10); Sendmose(1, 735, 13); CreateIPFile('c:MyIP.txt'); WriteIP(Str, 'c:MyIP.txt'); Sleep(10); end;
procedure TfrmMain.timWaitTimer(Sender: TObject); begin Inc(I); if I = Waittime then begin SendMessage( GetCloseHwnd, WM_LBUTTONDOWN, MK_LBUTTON, 0 ); SendMessage( GetCloseHwnd, WM_LBUTTONUP, 0, 0 ); I := 0; end; if I = 1 then begin Inc(K); ReadIPFiles((K - 1)); end; end;