日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)其它知識(shí) → 采用多線程技術(shù)實(shí)現(xiàn)快速批量申請(qǐng)QQ號(hào)碼代碼

      采用多線程技術(shù)實(shí)現(xiàn)快速批量申請(qǐng)QQ號(hào)碼代碼

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2010/11/25 8:41:12字體大小:A-A+

      作者:佚名點(diǎn)擊:1400次評(píng)論:0次標(biāo)簽: QQ 快速申請(qǐng)

      格式工廠v4.0.5.0 官方正式版
      • 類型:視頻轉(zhuǎn)換大。45.8M語(yǔ)言:中文 評(píng)分:7.7
      • 標(biāo)簽:
      立即下載

      騰訊在其QQ免費(fèi)注冊(cè)頁(yè)面http://reg.qq.com/中,為了限制用戶注冊(cè),設(shè)置了多種限制手段,尤其是在其JS頁(yè)面中設(shè)置了多種算法,防止用戶批量注冊(cè)。

      本文主要分析QQ是如何在WEB前臺(tái)實(shí)現(xiàn)防止用戶批量的注冊(cè),并且提供了相應(yīng)的技術(shù)解決方案,程序早都做好了,沒(méi)有外放,看到博客園上有其他人對(duì)外寫(xiě)了這樣的文章,但是比較簡(jiǎn)陋,因此這里將我的設(shè)計(jì)方案跟各位分析一下

      首先看我的最終實(shí)現(xiàn)效果圖,比較簡(jiǎn)陋一些,多線程實(shí)現(xiàn)的,如果有什么疑問(wèn),可以跟我聯(lián)系,本人聯(lián)系QQ:8112857.



      在開(kāi)始注冊(cè)前邊的框框里邊輸入想要一次性批量申請(qǐng)QQ號(hào)碼的數(shù)量,然后點(diǎn)擊開(kāi)始注冊(cè),系統(tǒng)自動(dòng)的生成相應(yīng)的線程,然后開(kāi)始進(jìn)行排隊(duì)打碼,在每個(gè)輸入框輸入相應(yīng)的注冊(cè)碼以后,點(diǎn)擊回車,系統(tǒng)會(huì)自動(dòng)的進(jìn)行注冊(cè),并跳轉(zhuǎn)到另外一個(gè)框框里邊,并將正確的QQ號(hào)碼自動(dòng)保存到TXT文本里邊。系統(tǒng)我在實(shí)現(xiàn)的時(shí)候,沒(méi)有考慮最后的臨界區(qū)的問(wèn)題,因此如果在沒(méi)有輸入驗(yàn)證碼,并且關(guān)閉的時(shí)候,系統(tǒng)會(huì)假死,當(dāng)然了,這個(gè)問(wèn)題不影響使用,下面我說(shuō)明下我的設(shè)計(jì)方案。

      1.分析QQ注冊(cè)提交

      實(shí)際上QQ注冊(cè)頁(yè)面利用JAVASCRIPT操縱和很多COOKIES信息,而且利用COOKIES信息也進(jìn)行了一系列的操作,而實(shí)際上我們完全可以給屏蔽掉,將關(guān)于操縱COOKIE的所有信息都給屏蔽掉,因此就是解析來(lái)的步驟

      第一步,獲取驗(yàn)證碼,并且顯示出來(lái),這里我使用的是我們公司自己的控件,PNHTTP,你們也可以使用相應(yīng)的組件,譬如說(shuō)MSXML之類的只要能夠?qū)崿F(xiàn)GET或者POST方式的

      TRegThread(aThread).Bmp:= Http.HttpBmp('http://captcha.qq.com/getimage?aid=1007901&0.9408595752591837'); //遠(yuǎn)程獲取驗(yàn)證碼,并保存到TBITMAP里邊

      第二步,用戶輸入驗(yàn)證碼,及其其他的內(nèi)容信息以后,還不能直接的提交,騰訊在這里對(duì)數(shù)據(jù)進(jìn)行了一個(gè)加操作,首先像checkconn頁(yè)面發(fā)出一個(gè)GET申請(qǐng),這個(gè)操作主要就是獲取一串JSON代碼,里邊包含了需要提交的各變量的名稱,也就是FORM里邊的INPUT變量的名稱,這個(gè)變量的名稱騰訊做的比較變態(tài),還進(jìn)行了一些算法,經(jīng)過(guò)分析,我給還原過(guò)來(lái)如下

      獲取表單變量
      1 FormParams:= Http.HttpGet('http://reg.qq.com/cgi-bin/checkconn?seed0.8865932116432269'); ///獲取checkconn頁(yè)面內(nèi)容
      2 StrCookie:= Http.CookieMgr.CookieCollection.Cookie['PCCOOKIE','qq.com'].Value; ///獲取'PCCOOKIE'這個(gè)COOKIE里邊保存的COOKIE信息
      3 StrCookie:= copy(StrCookie,length(StrCookie)-1,2); ///獲取COOKIE的倒數(shù)兩位
      4 LBase:= HexToInt(StrCookie); ///將COOKIE倒數(shù)兩位進(jìn)行十六進(jìn)制轉(zhuǎn)換
      5
      6 ParamArray[0]:= 'QQ'; ///申請(qǐng)類型1
      7 ParamArray[1]:= 'EMAIL'; ///申請(qǐng)類型2
      8 ParamArray[2]:= 'zeze'; ///QQ昵稱
      9 ParamArray[3]:= '0'; ///QQ性別
      10 ParamArray[4]:= '1985'; ///出生年
      11 ParamArray[5]:= '1'; ///出生月
      12 ParamArray[6]:= '2'; ///出生日
      13 ParamArray[7]:= '1'; ///忘記了
      14 ParamArray[8]:= '2'; ///忘記了
      15 ParamArray[9]:= 'abc111111'; ///密碼
      16 ParamArray[10]:= 'abc111111'; ///重復(fù)密碼
      17 ParamArray[11]:= '1'; ///國(guó)家代碼
      18 ParamArray[12]:= '11'; ///省份代碼
      19 ParamArray[13]:= '1'; ///區(qū)域代碼
      20 ParamArray[14]:= RndStr; ///驗(yàn)證碼
      21
      22 try
      23 SListA:= FPNSplit(Copy(FormParams,33,402),',');
      24 SListB:= FPNSplit(Copy(FormParams,447,64),',');
      25 ///上邊的是處理CHECKCONN頁(yè)面的內(nèi)容,實(shí)際上是JSON格式的,可以直接采用JSON解析,但是我這里嫌麻煩,所以自己用的分割函數(shù)直接處理
      26 FormParams:= ''; ///需要提交的變量名
      27 ///下邊的是對(duì)CHECKCONN返回內(nèi)容的解密算法
      28 for i := 0 to 12 do begin
      29 IdxA:= StrToInt(SListB[i]) xor LBase;
      30 IdxB:= 12-i;
      31 IdxA:= IdxA xor 6818;
      32 IdxA:= IdxA xor 8315;
      33 IdxA:= IdxA xor 5123;
      34 IdxA:= IdxA xor 2252;
      35 for j := 0 to 5 do
      36 IdxA:= IdxA xor 0;
      37 IdxA:= IdxA mod 15;
      38
      39 FormParams:= FormParams+ Copy(SListA[IdxB],2,28)+ '='+ ParamArray[IdxA]+ '&'; ///這里是構(gòu)造提交數(shù)據(jù)信息
      40 end;
      41
      42 finally
      43 SListA.Free;
      44 SListB.Free;
      45 end;
      46
      47
      48

      上邊通過(guò)FormParams變量,將所需要提交的信息保存了下來(lái),接下來(lái)我們開(kāi)始像服務(wù)器提交

      提交注冊(cè),并檢測(cè)結(jié)果
      1 StrResult:= Http.HttpPost('http://reg.qq.com/cgi-bin/getnum',FormParams,True);
      2 Reg:= TPerlRegEx.Create(nil);
      3 try
      4 Reg.Subject:= StrResult;
      5 Reg.RegEx:= '您獲得的號(hào)碼為:\<span id\=\"aq\-uin\" class\=\"number\">([\s\S]*?)\<';
      6 if Reg.MatchAgain then begin
      7 StrQQ:= Reg.SubExpressions[1];
      8 FPNWriteLnText('注冊(cè)成功的QQ.txt',StrQQ,False);
      9 end else begin
      10 FPNWriteLnText('注冊(cè)失敗線程.txt',TRegData(aDataObj).FId,False);
      11 end;
      12 finally
      13 Reg.Free;
      14 end;
      15


      以上的過(guò)程就完成了騰訊的注冊(cè)流程,但是僅僅這樣是不夠的,因?yàn)槲覀兯枰淖罱K目的是多線程,多線程怎么實(shí)現(xiàn)呢?我這里采用DELPHI線程池的方式

      代碼
      1 TCoding= record ///這里是記錄打碼區(qū)的狀態(tài)
      2 Status: integer; //忙碌1,空閑0,等待用戶輸入數(shù)據(jù)2,用戶已經(jīng)輸入,等待處理3
      3 ShowBegin: integer; //開(kāi)始顯示驗(yàn)證碼的時(shí)間
      4 end;
      5
      6 ///線程池中的線程處理類,可以派生,也可以不用派生
      7 TRegThread = class(TPNPoolThread)
      8 private
      9 MyCodeIdx: integer;
      10 bmp: TBitmap;
      11 procedure ShowImg1;
      12 procedure ShowImg;
      13 public
      14 destructor Destroy;
      15 end;
      16
      17 TRegData= class(TPNTaskObject)
      18 private
      19 FId: String; //編號(hào)
      20 public
      21 constructor Create(const AId: string);
      22 function Duplicate(DataObj: TPNTaskObject;
      23 const Processing: Boolean): Boolean; ///判斷兩個(gè)任務(wù)是否重復(fù),此函數(shù)必須在派生類寫(xiě)明
      24 function Info: string; override; ///輸出信息,覆蓋
      25 end;
      26

      相關(guān)打碼區(qū)函數(shù)
      1 var
      2 MainForm: TMainForm;
      3 Codings: array[1..9] of TCoding;
      4 CodingCs: TPNCriticalSection; ///申請(qǐng)打碼資源的CS
      5
      6 RegId: integer;
      7
      8 StrLog: string; ///日志數(shù)據(jù)
      9 PoolReg: TPNThreadPool; ///線程池
      10 csLog: TPNCriticalSection; ///保存日志的臨界區(qū)
      11
      12 function CodingApply: integer; //申請(qǐng)打碼顯示資源,如果申請(qǐng)成功,返回顯示的標(biāo)號(hào),否則返回-1
      13 function CodingRelease(CodeIdx: Integer): string; //釋放顯示資源,返回的是打碼的信息
      14 function CodingWait(CodeIdx: Integer): Boolean; //將狀態(tài)更改為等待
      15 function CodingOK(CodeIdx: Integer): Boolean; //將狀態(tài)更改為處理完畢
      16 function CodingStatus(CodeIdx: Integer): integer; //獲取當(dāng)前狀態(tài)
      17


      具體的線程池設(shè)置代碼,對(duì)于申請(qǐng)打碼區(qū)資源,及其釋放打碼區(qū)資源,都寫(xiě)得有具體的方案

      代碼
      1
      2 function CodingApply: integer;
      3 var
      4 i: integer;
      5 begin
      6 CodingCs.Enter;
      7 Result:= -1;
      8 try
      9 for i := 1 to 9 do begin
      10 if Codings[i].Status=0 then begin
      11 Result:= i;
      12 Codings[i].Status:= 1;
      13 Break;
      14 end;
      15 end;
      16 finally
      17 CodingCs.Leave;
      18 Sleep(0);
      19 end;
      20 end;
      21
      22 function CodingRelease(CodeIdx: Integer): string;
      23 begin
      24 if (CodeIdx<0) or (CodeIdx>9) then Exit;
      25 CodingCs.Enter;
      26 try
      27 try
      28 Result:= TEdit(MainForm.FindComponent('Input'+ IntToStr(CodeIdx))).Text;
      29 except
      30 Result:= '';
      31 end;
      32 Codings[CodeIdx].Status:= 0;
      33 finally
      34 CodingCs.Leave;
      35 Sleep(0);
      36 end;
      37 end;
      38
      39 function CodingWait(CodeIdx: Integer): Boolean;
      40 begin
      41 if (CodeIdx<0) or (CodeIdx>9) then Exit;
      42 Result:= True;
      43 CodingCs.Enter;
      44 try
      45 try
      46 Codings[CodeIdx].Status:= 2;
      47 except
      48 Result:= False;
      49 end;
      50 finally
      51 CodingCs.Leave;
      52 Sleep(0);
      53 end;
      54 end;
      55
      56 function CodingOK(CodeIdx: Integer): Boolean;
      57 begin
      58 if (CodeIdx<0) or (CodeIdx>9) then Exit;
      59 Result:= True;
      60 CodingCs.Enter;
      61 try
      62 try
      63 Codings[CodeIdx].Status:= 3;
      64 except
      65 Result:= False;
      66 end;
      67 finally
      68 CodingCs.Leave;
      69 Sleep(0);
      70 end;
      71 end;
      72 function CodingStatus(CodeIdx: Integer): integer;
      73 begin
      74 if (CodeIdx<0) or (CodeIdx>9) then Exit;
      75 CodingCs.Enter;
      76 try
      77 Result:= Codings[CodeIdx].Status;
      78 finally
      79 CodingCs.Leave;
      80 Sleep(0);
      81 end;
      82 end;
      83
      84 constructor TRegData.Create(const AId: string);
      85 begin
      86 FId:= AId;
      87 end;
      88
      89 function TRegData.Duplicate(DataObj: TPNTaskObject;
      90 const Processing: Boolean): Boolean;
      91 begin
      92 Result := (not Processing) and
      93 (FId = TRegData(DataObj).FId);
      94 end;
      95
      96 function TRegData.Info: string;
      97 begin
      98 Result:= 'FId='+ FId+ ';';
      99 end;
      100
      101
      102 procedure TRegThread.ShowImg1;
      103 begin
      104 try
      105 TImage(MainForm.FindComponent('Img'+ IntToStr(MyCodeIdx))).Picture.Assign(bmp);
      106 TEdit(MainForm.FindComponent('Input'+ IntToStr(MyCodeIdx))).Text:= '';
      107 except
      108 end;
      109 CodingWait(MyCodeIdx);
      110 end;
      111 procedure TRegThread.ShowImg;
      112 begin
      113 Synchronize(ShowImg1);
      114 end;
      115 destructor TRegThread.Destroy;
      116 begin
      117 try
      118 if bmp<>nil then bmp.Free;
      119 except
      120 end;
      121 inherited Destroy;
      122 end;
      123
      124 function HexToInt(const S: String): DWORD;
      125 asm
      126 PUSH EBX
      127 PUSH ESI
      128
      129 MOV ESI, EAX //字符串地址
      130 MOV EDX, [EAX-4] //讀取字符串長(zhǎng)度
      131
      132 XOR EAX, EAX //初始化返回值
      133 XOR ECX, ECX //臨時(shí)變量
      134
      135 TEST ESI, ESI //判斷是否為空指針
      136 JZ @@2
      137 TEST EDX, EDX //判斷字符串是否為空
      138 JLE @@2
      139 MOV BL, $20
      140 @@0:
      141 MOV CL, [ESI]
      142 INC ESI
      143
      144 OR CL, BL //如果有字母則被轉(zhuǎn)換為小寫(xiě)字母
      145 SUB CL, '0'
      146 JB @@2 // < '0' 的字符
      147 CMP CL, $09
      148 JBE @@1 // '0'..'9' 的字符
      149 SUB CL, 'a'-'0'-10
      150 CMP CL, $0A
      151 JB @@2 // < 'a' 的字符
      152 CMP CL, $0F
      153 JA @@2 // > 'f' 的字符
      154 @@1: // '0'..'9', 'A'..'F', 'a'..'f'
      155 SHL EAX, 4
      156 OR EAX, ECX
      157 DEC EDX
      158 JNZ @@0
      159 JMP @@3
      160 @@2:
      161 XOR EAX, EAX // 非法16進(jìn)制字符串
      162 @@3:
      163 POP ESI
      164 POP EBX
      165 RET
      166 end;
      167
      168 procedure TMainForm.DownProcessRequest(Sender: TPNThreadPool;
      169 aDataObj: TPNTaskObject; aThread: TPNPoolThread);
      170 var
      171 Http: TPNHttp;
      172 i,j,LBase,IdxA,IdxB: integer;
      173 RndStr,FormParams,StrResult,StrQQ,StrCookie,StrIP: string;
      174 SListA,SListB: TStringList;
      175 Reg: TPerlRegEx;
      176 ParamArray: array[0..14] of string;
      177 begin
      178 // FPNWriteLnText('日志.txt',TRegData(aDataObj).FId+'開(kāi)始注冊(cè)',False);
      179 Http:= TPNHttp.Create(nil,True,True);
      180 Randomize;
      181 StrIP:= '1.193.86.'+ IntToStr(Random(255)+ 1);
      182 // StrIP:= IntToStr(Random(255)+ 1)+'.'+ IntToStr(Random(255)+ 1)+'.'+ IntToStr(Random(255)+ 1)+'.'+ IntToStr(Random(255)+ 1);
      183 Http.Request.CustomHeaders.Add('X-Forwarded-For:'+ StrIP);
      184 try
      185 try
      186 Http.HttpGet('http://reg.qq.com/');
      187 // FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','首頁(yè):'+ Http.HttpHeader,False);
      188 TRegThread(aThread).MyCodeIdx:= CodingApply;
      189 ///等待獲取打碼資源
      190 while TRegThread(aThread).MyCodeIdx=-1 do begin
      191 sleep(500);
      192 TRegThread(aThread).MyCodeIdx:= CodingApply;
      193 end;
      194 try
      195 TRegThread(aThread).Bmp:= Http.HttpBmp('http://captcha.qq.com/getimage?aid=1007901&0.9408595752591837');
      196 // FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','驗(yàn)證碼:'+ Http.HttpHeader,False);
      197 TRegThread(aThread).ShowImg;
      198 finally
      199 if TRegThread(aThread).Bmp<>nil then
      200 TRegThread(aThread).Bmp.Free;
      201 end;
      202 while CodingStatus(TRegThread(aThread).MyCodeIdx)=2 do begin
      203 Sleep(200);
      204 end;
      205 RndStr:= CodingRelease(TRegThread(aThread).MyCodeIdx);
      206 // FPNWriteLnText('日志.txt',TRegData(aDataObj).FId+':RndStr='+ RndStr,False);
      207 FormParams:= Http.HttpGet('http://reg.qq.com/cgi-bin/checkconn?seed0.8865932116432269');
      208 // FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','CheckConn:'+ Http.HttpHeader,False);
      209 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt','返回的參數(shù)集:'+ FormParams,False);
      210 // FormParams:= Copy(FormParams,33,402);
      211 StrCookie:= Http.CookieMgr.CookieCollection.Cookie['PCCOOKIE','qq.com'].Value;
      212 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt','PCCOOKIE值為:'+ StrCookie,False);
      213 StrCookie:= copy(StrCookie,length(StrCookie)-1,2);
      214 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt','LBASE值為:'+ StrCookie,False);
      215 LBase:= HexToInt(StrCookie);
      216
      217 ParamArray[0]:= 'QQ';
      218 ParamArray[1]:= 'EMAIL';
      219 ParamArray[2]:= 'zeze';
      220 ParamArray[3]:= '0';
      221 ParamArray[4]:= '1985';
      222 ParamArray[5]:= '1';
      223 ParamArray[6]:= '2';
      224 ParamArray[7]:= '1';
      225 ParamArray[8]:= '2';
      226 ParamArray[9]:= 'abc111111';
      227 ParamArray[10]:= 'abc111111';
      228 ParamArray[11]:= '1';
      229 ParamArray[12]:= '11';
      230 ParamArray[13]:= '1';
      231 ParamArray[14]:= RndStr;
      232 try
      233 SListA:= FPNSplit(Copy(FormParams,33,402),',');
      234 SListB:= FPNSplit(Copy(FormParams,447,64),',');
      235 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt',Copy(FormParams,447,64),False);
      236 FormParams:= '';
      237 for i := 0 to 12 do begin
      238 IdxA:= StrToInt(SListB[i]) xor LBase;
      239 IdxB:= 12-i;
      240 IdxA:= IdxA xor 6818;
      241 IdxA:= IdxA xor 8315;
      242 IdxA:= IdxA xor 5123;
      243 IdxA:= IdxA xor 2252;
      244 for j := 0 to 5 do
      245 IdxA:= IdxA xor 0;
      246 IdxA:= IdxA mod 15;
      247 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt','IdxA:'+ IntToStr(IdxA),False);
      248
      249 FormParams:= FormParams+ Copy(SListA[IdxB],2,28)+ '='+ ParamArray[IdxA]+ '&'
      250 end;
      251
      252 // FormParams:= Copy(SList[0],2,28)+ '=1&'+ Copy(SList[1],2,28)+ '=1&'+ Copy(SList[2],2,28)+ '=pop67579818&'
      253 // + Copy(SList[3],2,28)+ '=1983&'+ Copy(SList[4],2,28)+ '='+ RndStr+'&' + Copy(SList[5],2,28)+ '=1&'
      254 // + Copy(SList[6],2,28)+ '=lovezeze&'+ Copy(SList[7],2,28)+ '=pop67579818&'+ Copy(SList[8],2,28)+ '=0&'
      255 // + Copy(SList[9],2,28)+ '=1&'+ Copy(SList[10],2,28)+ '=2&'+ Copy(SList[11],2,28)+ '=11&'
      256 // + Copy(SList[12],2,28)+ '=1';
      257 finally
      258 SListA.Free;
      259 SListB.Free;
      260 end;
      261 for i := 0 to Http.CookieMgr.CookieCollection.Count - 1 do
      262 StrCookie:= StrCookie+ Http.CookieMgr.CookieCollection.Items[i].CookieName+ ':'
      263 + Http.CookieMgr.CookieCollection.Items[i].CookieText;
      264 StrResult:= Http.HttpPost('http://reg.qq.com/cgi-bin/getnum',FormParams,True);
      265 // FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','POST時(shí)候:'+ Http.HttpHeader,False);
      266 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt','提交COOKIE為:'+ StrCookie,False);
      267 // FPNWriteLnText(TRegData(aDataObj).FId+'數(shù)據(jù)日志.txt','提交參數(shù)為:'+ FormParams,False);
      268 // FPNWriteLnText(TRegData(aDataObj).FId+'返回?cái)?shù)據(jù).txt',StrResult,False);
      269 Reg:= TPerlRegEx.Create(nil);
      270 try
      271 Reg.Subject:= StrResult;
      272 Reg.RegEx:= '您獲得的號(hào)碼為:\<span id\=\"aq\-uin\" class\=\"number\">([\s\S]*?)\<';
      273 if Reg.MatchAgain then begin
      274 StrQQ:= Reg.SubExpressions[1];
      275 FPNWriteLnText('注冊(cè)成功的QQ.txt',StrQQ,False);
      276 end else begin
      277 FPNWriteLnText('注冊(cè)失敗線程.txt',TRegData(aDataObj).FId,False);
      278 end;
      279 // FPNWriteLnText(TRegData(aDataObj).FId+'匹配結(jié)果.txt',StrResult,False);
      280 finally
      281 Reg.Free;
      282 end;
      283 except
      284
      285 end;
      286 finally
      287 Http.Free;
      288 end;
      289 end;
      290
      291 procedure TMainForm.btn1Click(Sender: TObject);
      292 var
      293 i: integer;
      294 begin
      295 for i := 1 to StrToInt(RegNum.Text) do begin
      296 RegId:= RegId+ 1;
      297 PoolReg.AddRequest(TRegData.Create(IntToStr(RegId)));
      298 end;
      299 end;
      300
      301 procedure TMainForm.FormCreate(Sender: TObject);
      302 begin
      303 RegId:= 0;
      304 CodingCs:= TPNCriticalSection.Create;
      305 PoolReg := TPNThreadPool.Create(nil);
      306 with PoolReg do begin
      307 OnProcessRequest := DownProcessRequest; ///線程處理函數(shù)
      308 AdjustInterval := 5 * 1000; ///減少線程間隔時(shí)間,5秒
      309 MinAtLeast := False; ///是否設(shè)置最小線程數(shù)
      310 ThreadDeadTimeout := 10 * 1000; ///線程死亡超時(shí)時(shí)間
      311 ThreadsMinCount := 10; ///最小線程數(shù)
      312 ThreadsMaxCount := 50; ///最大線程數(shù)
      313 uTerminateWaitTime := 2 * 1000; ///掛起等待時(shí)間
      314 end;
      315
      316 end;
      317
      318 procedure TMainForm.FormDestroy(Sender: TObject);
      319 begin
      320 PoolReg.Free;
      321 CodingCs.Free;
      322 end;
      323
      324 procedure TMainForm.Input1KeyPress(Sender: TObject; var Key: Char);
      325 var
      326 CodeIdx: integer;
      327 ObjName: string;
      328 begin
      329 if Key= Char(13) then begin
      330 ObjName:= (Sender as TRzEdit).Name;
      331 CodeIdx:= StrToInt(Copy(ObjName,6,1));
      332 CodingOK(CodeIdx);
      333 if CodeIdx=9 then
      334 CodeIdx:= 1
      335 else
      336 CodeIdx:= CodeIdx+ 1;
      337 TRzEdit(FindComponent('Input'+ IntToStr(CodeIdx))).SetFocus;
      338 end;
      339 end;
      340

      本文只是對(duì)QQ注冊(cè)頁(yè)面進(jìn)行一些分析,供大家參考,其實(shí)大家在做WEB設(shè)計(jì)的時(shí)候,如何防止批量注冊(cè)這塊,也可以參考下QQ,比較變態(tài)一些,但是感覺(jué)騰訊做的還不完善。

        xv格式轉(zhuǎn)換器
        (31)xv格式轉(zhuǎn)換器
        經(jīng)常使用迅雷下載視頻的網(wǎng)友應(yīng)該會(huì)常見(jiàn)到或者格式的視頻,這些格式是迅雷的專屬格式,只能使用迅雷看看播放器來(lái)觀看。不過(guò)有些用戶不想用迅雷看看卻下載了這個(gè)格式的視頻的,可以使用視頻格式轉(zhuǎn)換器來(lái)將其轉(zhuǎn)換成常見(jiàn)的視頻格式就可以用一般播放器觀看了。...更多>>
        dvd轉(zhuǎn)換器
        (32)dvd轉(zhuǎn)換器
        隨著網(wǎng)絡(luò)視頻的不斷發(fā)展,使用光盤(pán)看視頻的人越來(lái)越少,更多的人選擇了直接在網(wǎng)絡(luò)媒體上看視頻。不過(guò)的畫(huà)質(zhì)與可收藏性讓很多人還是對(duì)其有所留戀,但是由于光盤(pán)的播放方式比較單一還是很麻煩的,其實(shí)在視頻格式發(fā)展至今格式的視頻已經(jīng)變得很容易去轉(zhuǎn)換,市面上有很多轉(zhuǎn)換器可以讓我們輕松的將普通格式視頻與視頻互轉(zhuǎn)。在一般人的概念中,轉(zhuǎn)換器被歸類于視頻轉(zhuǎn)換器類軟件,但事實(shí)上,由于光盤(pán)具有程序廣告花絮等的特殊性,光盤(pán)也不同...更多>>
        格式工廠
        (25)格式工廠
        格式工廠是我們用的最多也是最好用的格式轉(zhuǎn)換工具。格式工廠是一款萬(wàn)能的格式轉(zhuǎn)換器,可以轉(zhuǎn)換各種音頻視頻文件格式,由于官方提供的是安裝版,很多用戶都在找格式工廠綠色版,西西為您提供綠色版格式工廠免費(fèi)下載格式工廠支持格式所有類型視頻轉(zhuǎn)到。所有類型音頻轉(zhuǎn)到。所有類型圖片轉(zhuǎn)到。抓取到視頻文件,抓取音樂(lè)到音頻文件。文件支持黑莓安卓等指定格式。支持,水印,音視頻混流。格式工廠的特長(zhǎng)支持幾乎所有類型多媒體格式到常用...更多>>
        avi格式轉(zhuǎn)換器
        (34)avi格式轉(zhuǎn)換器
        西西軟件園提供格式轉(zhuǎn)換器下載免費(fèi)版大全,最好用的格式轉(zhuǎn)換器一站式下載。格式轉(zhuǎn)換器合輯采集自網(wǎng)絡(luò),均為官方免費(fèi)版,請(qǐng)放心使用是什么格式叫做音頻視頻交錯(cuò)格式。它是由公司開(kāi)發(fā)的一種數(shù)字音頻與視頻文件格式,原先僅僅用于微軟的視窗視頻操作環(huán)境,,現(xiàn)在已被大多數(shù)操作系統(tǒng)直接支持。格式允許視頻和音頻交錯(cuò)在一起同步播放,但文件沒(méi)有限定壓縮標(biāo)準(zhǔn),即文件格式不具有兼容性。不同壓縮標(biāo)準(zhǔn)生成的文件,就必須使用相應(yīng)的解壓縮...更多>>
        3gp格式轉(zhuǎn)換器
        (65)3gp格式轉(zhuǎn)換器
        是什么格式是手機(jī)視頻格式,是一種流媒體的視頻編碼格式,使用戶能夠發(fā)送大量的數(shù)據(jù)到移動(dòng)電話網(wǎng)絡(luò),從而明確傳輸大型文件,如音頻,視頻和數(shù)據(jù)網(wǎng)絡(luò)的手機(jī)。是格式的一種簡(jiǎn)化版本,減少了儲(chǔ)存空間和較低的頻寬需求,讓手機(jī)上有限的儲(chǔ)存空間可以使用。格式轉(zhuǎn)換器哪個(gè)好小編為您提供一系列格式轉(zhuǎn)換器下載大全,關(guān)于哪個(gè)裝喚器好用些,西西個(gè)人使用的一直是格式工廠,支持的比較多,現(xiàn)在也是一個(gè)品牌了,值得擁有。當(dāng)然,,其實(shí)還是要...更多>>

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門(mén)評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)