小试牛刀破解别人的软件

 今天中午小试牛刀,一个朋友发了一个软件给我,让我看看能不能破解,我拿到软件后,运行,用SPY++拖到界面上看了一下,原来是Delphi写的软件,这时已经有20%的把握了,再用peid看一下加壳没有,发现乌龟没顶壳,哈哈哈,这下又增加20%的把握,接着DeDe进行反编译,得到汇编代码,输出工程文件,用Delphi打开该工程,找到注册窗口,直接进入注册函数,得到如下代码,简单看了一下,直接跳过注册判断,直接注册。用OllyICE修改汇编代码,保存文件,运行,注册,随便输入注册码,注册成功,搞定,收工。

XML/HTML代码
  1. procedure TFrmReg.Button2Click(Sender : TObject);   
  2. begin   
  3. (*   
  4. 005404E8   55                     push    ebp   
  5. 005404E9   8BEC                   mov     ebp, esp   
  6. 005404EB   81C410FEFFFF           add     esp, $FFFFFE10   
  7. 005404F1   53                     push    ebx   
  8. 005404F2   56                     push    esi   
  9. 005404F3   57                     push    edi   
  10. 005404F4   33C9                   xor     ecx, ecx   
  11. 005404F6   898D14FEFFFF           mov     [ebp+$FFFFFE14], ecx   
  12. 005404FC   898D10FEFFFF           mov     [ebp+$FFFFFE10], ecx   
  13. 00540502   898D18FEFFFF           mov     [ebp+$FFFFFE18], ecx   
  14. 00540508   898D1CFEFFFF           mov     [ebp+$FFFFFE1C], ecx   
  15. 0054050E   898D20FEFFFF           mov     [ebp+$FFFFFE20], ecx   
  16. 00540514   894DFC                 mov     [ebp-$04], ecx   
  17. 00540517   894DF8                 mov     [ebp-$08], ecx   
  18. 0054051A   894DF4                 mov     [ebp-$0C], ecx   
  19. 0054051D   894DF0                 mov     [ebp-$10], ecx   
  20. 00540520   8BF0                   mov     esi, eax   
  21. 00540522   33C0                   xor     eax, eax   
  22. 00540524   55                     push    ebp   
  23.   
  24. * Possible String Reference to: '閣<?胄_^[嬪]?   
  25. |   
  26. 00540525   68BC065400             push    $005406BC   
  27.   
  28. ***** TRY   
  29. |   
  30. 0054052A   64FF30                 push    dword ptr fs:[eax]   
  31. 0054052D   648920                 mov     fs:[eax], esp   
  32. 00540530   8D9520FEFFFF           lea     edx, [ebp+$FFFFFE20]   
  33. 00540536   8B8608030000           mov     eax, [esi+$0308]   
  34.   
  35. * Reference to: Controls.TControl.GetText(TControl):TCaption;   
  36. |   
  37. 0054053C   E847E0F1FF             call    0045E588   
  38. 00540541   83BD20FEFFFF00         cmp     dword ptr [ebp+$FFFFFE20], +$00   
  39. 00540548   750F                   jnz     00540559   
  40.   
  41. * Possible String Reference to: '请输入注册码'   
  42. |   
  43. 0054054A   B8D4065400             mov     eax, $005406D4   
  44.   
  45. * Reference to: Dialogs.ShowMessage(AnsiString);   
  46. |   
  47. 0054054F   E86C7EEFFF             call    004383C0   
  48. 00540554   E92D010000             jmp     00540686   
  49. 00540559   8D55FC                 lea     edx, [ebp-$04]   
  50. 0054055C   8B8608030000           mov     eax, [esi+$0308]   
  51.   
  52. * Reference to: Controls.TControl.GetText(TControl):TCaption;   
  53. |   
  54. 00540562   E821E0F1FF             call    0045E588   
  55. 00540567   8D951CFEFFFF           lea     edx, [ebp+$FFFFFE1C]   
  56. 0054056D   8BC6                   mov     eax, esi   
  57.   
  58. |   
  59. 0054056F   E8E0FEFFFF             call    00540454   
  60. 00540574   8B951CFEFFFF           mov     edx, [ebp+$FFFFFE1C]   
  61. 0054057A   8B45FC                 mov     eax, [ebp-$04]   
  62.   
  63. * Reference to: System.@LStrCmp;   
  64. |   
  65. 0054057D   E84249ECFF             call    00404EC4   
  66. 00540582   0F85F4000000           jnz     0054067C   
  67. 00540588   8D55F8                 lea     edx, [ebp-$08]   
  68. 0054058B   33C0                   xor     eax, eax   
  69.   
  70. * Reference to : TClientSocket._PROC_0050CC28()   
  71. |   
  72. 0054058D   E896C6FCFF             call    0050CC28   
  73. 00540592   8B45F8                 mov     eax, [ebp-$08]   
  74.   
  75. * Reference to: System.@LStrLen(String):Integer;   
  76. |           or: System.@DynArrayLength;   
  77. |           or: System.DynArraySize(Pointer):Integer;   
  78. |           or: Variants.DynArraySize(Pointer):Integer;   
  79. |   
  80. 00540595   E8DE47ECFF             call    00404D78   
  81. 0054059A   8BD8                   mov     ebx, eax   
  82. 0054059C   85DB                   test    ebx, ebx   
  83. 0054059E   7E32                   jle     005405D2   
  84. 005405A0   BF01000000             mov     edi, $00000001   
  85. 005405A5   8B45F8                 mov     eax, [ebp-$08]   
  86. 005405A8   0FB64438FF             movzx   eax, byte ptr [eax+edi-$01]   
  87. 005405AD   83C018                 add     eax, +$18   
  88. 005405B0   8D8D18FEFFFF           lea     ecx, [ebp+$FFFFFE18]   
  89. 005405B6   BA02000000             mov     edx, $00000002   
  90.   
  91. * Reference to: SysUtils.IntToHex(Integer;Integer):AnsiString;overload;   
  92. |   
  93. 005405BB   E83C94ECFF             call    004099FC   
  94. 005405C0   8B9518FEFFFF           mov     edx, [ebp+$FFFFFE18]   
  95. 005405C6   8D45F4                 lea     eax, [ebp-$0C]   
  96.   
  97. * Reference to: System.@LStrCat;   
  98. |   
  99. 005405C9   E8B247ECFF             call    00404D80   
  100. 005405CE   47                     inc     edi   
  101. 005405CF   4B                     dec     ebx   
  102. 005405D0   75D3                   jnz     005405A5
  103. 将这句修改为   jmp 005405D2 或者删除这条语句即完成破解.   
  104. 005405D2   8D9510FEFFFF           lea     edx, [ebp+$FFFFFE10]   
  105. 005405D8   33C0                   xor     eax, eax   
  106.   
  107. * Reference to: System.ParamStr(Integer):String;   
  108. |   
  109. 005405DA   E86925ECFF             call    00402B48   
  110. 005405DF   8B8510FEFFFF           mov     eax, [ebp+$FFFFFE10]   
  111. 005405E5   8D9514FEFFFF           lea     edx, [ebp+$FFFFFE14]   
  112.   
  113. * Reference to: SysUtils.ExtractFilePath(AnsiString):AnsiString;   
  114. |   
  115. 005405EB   E82499ECFF             call    00409F14   
  116. 005405F0   8B9514FEFFFF           mov     edx, [ebp+$FFFFFE14]   
  117. 005405F6   8D45F0                 lea     eax, [ebp-$10]   
  118.   
  119. * Possible String Reference to: 'smsinfo'   
  120. |   
  121. 005405F9   B9EC065400             mov     ecx, $005406EC   
  122.   
  123. * Reference to: System.@LStrCat3;   
  124. |   
  125. 005405FE   E8C147ECFF             call    00404DC4   
  126. 00540603   8B45F0                 mov     eax, [ebp-$10]   
  127.   
  128. * Reference to: SysUtils.FileCreate(AnsiString):Integer;overload;   
  129. |   
  130. 00540606   E8B996ECFF             call    00409CC4   
  131.   
  132. * Reference to: InGlobal.Sleep(Cardinal);   
  133. |           or: SConnect.CloseRegKey(HKEY);   
  134. |           or: System.EndThread(Integer);   
  135. |           or: SysUtils.FileClose(Integer);   
  136. |           or: SysUtils.StrNextChar(PChar):PChar;   
  137. |           or: Windows.LockSegment(System.THandle);   
  138. |   
  139. 0054060B   E87097ECFF             call    00409D80   
  140. 00540610   8B55F0                 mov     edx, [ebp-$10]   
  141. 00540613   8D8524FEFFFF           lea     eax, [ebp+$FFFFFE24]   
  142.   
  143. * Reference to: System.@Assign(TTextRec;TTextRec;String):Integer;   
  144. |   
  145. 00540619   E80E29ECFF             call    00402F2C   
  146. 0054061E   8D8524FEFFFF           lea     eax, [ebp+$FFFFFE24]   
  147.   
  148. * Reference to: System.@Append(TTextRec;TTextRec):Integer;   
  149. |   
  150. 00540624   E89F26ECFF             call    00402CC8   
  151.   
  152. |   
  153. 00540629   E85A23ECFF             call    00402988   
  154. 0054062E   8B55F4                 mov     edx, [ebp-$0C]   
  155. 00540631   8D8524FEFFFF           lea     eax, [ebp+$FFFFFE24]   
  156.   
  157. * Reference to: Classes.TStream.WriteComponent(TStream;TComponent);   
  158. |           or: Classes.TWriter.WriteRootComponent(TWriter;TComponent);   
  159. |           or: DB.TWideStringField.GetAsWideString(TWideStringField):WideString;   
  160. |           or: DB.TDateTimeField.GetValue(TDateTimeField;TDateTime;TDateTime):Boolean;   
  161. |           or: DB.TSQLTimeStampField.GetValue(TSQLTimeStampField;TSQLTimeStamp;TSQLTimeStamp):Boolean;   
  162. |           or: DB.TSQLTimeStampField.SetAsSQLTimeStamp(TSQLTimeStampField;TSQLTimeStamp;TSQLTimeStamp);   
  163. |   
  164. 00540637   E8584BECFF             call    00405194   
  165.   
  166. * Reference to: System.@WriteLn(TTextRec;TTextRec):Pointer;   
  167. |   
  168. 0054063C   E89B2FECFF             call    004035DC   
  169.   
  170. |   
  171. 00540641   E84223ECFF             call    00402988   
  172. 00540646   8D8524FEFFFF           lea     eax, [ebp+$FFFFFE24]   
  173.   
  174. * Reference to: System.Flush(Text;Text):Integer;   
  175. |   
  176. 0054064C   E88B29ECFF             call    00402FDC   
  177.   
  178. |   
  179. 00540651   E83223ECFF             call    00402988   
  180. 00540656   8D8524FEFFFF           lea     eax, [ebp+$FFFFFE24]   
  181.   
  182. * Reference to: System.@Close(TTextRec;TTextRec):Integer;   
  183. |   
  184. 0054065C   E89329ECFF             call    00402FF4   
  185.   
  186. |   
  187. 00540661   E82223ECFF             call    00402988   
  188.   
  189. * Possible String Reference to: '注册成功,请重启软件。'   
  190. |   
  191. 00540666   B8FC065400             mov     eax, $005406FC   
  192.   
  193. * Reference to: Dialogs.ShowMessage(AnsiString);   
  194. |   
  195. 0054066B   E8507DEFFF             call    004383C0   
  196. 00540670   C7864C02000001000000   mov     dword ptr [esi+$024C], $00000001   
  197. 0054067A   EB0A                   jmp     00540686   
  198.   
  199. * Possible String Reference to: '注册失败,注册码不正确.'   
  200. |   
  201. 0054067C   B81C075400             mov     eax, $0054071C   
  202.   
  203. * Reference to: Dialogs.ShowMessage(AnsiString);   
  204. |   
  205. 00540681   E83A7DEFFF             call    004383C0   
  206. 00540686   33C0                   xor     eax, eax   
  207. 00540688   5A                     pop     edx   
  208. 00540689   59                     pop     ecx   
  209. 0054068A   59                     pop     ecx   
  210. 0054068B   648910                 mov     fs:[eax], edx   
  211.   
  212. ****** FINALLY   
  213. |   
  214.   
  215. * Possible String Reference to: '_^[嬪]?   
  216. |   
  217. 0054068E   68C3065400             push    $005406C3   
  218. 00540693   8D8510FEFFFF           lea     eax, [ebp+$FFFFFE10]   
  219. 00540699   BA04000000             mov     edx, $00000004   
  220.   
  221. * Reference to: System.@LStrArrayClr(void;void;Integer);   
  222. |   
  223. 0054069E   E83944ECFF             call    00404ADC   
  224. 005406A3   8D8520FEFFFF           lea     eax, [ebp+$FFFFFE20]   
  225.   
  226. * Reference to: System.@LStrClr(void;void);   
  227. |   
  228. 005406A9   E80A44ECFF             call    00404AB8   
  229. 005406AE   8D45F0                 lea     eax, [ebp-$10]   
  230. 005406B1   BA04000000             mov     edx, $00000004   
  231.   
  232. * Reference to: System.@LStrArrayClr(void;void;Integer);   
  233. |   
  234. 005406B6   E82144ECFF             call    00404ADC   
  235. 005406BB   C3                     ret   
  236.   
  237.   
  238. * Reference to: System.@HandleFinally;   
  239. |   
  240. 005406BC   E9773CECFF             jmp     00404338   
  241. 005406C1   EBD0                   jmp     00540693   
  242.   
  243. ****** END   
  244. |   
  245. 005406C3   5F                     pop     edi   
  246. 005406C4   5E                     pop     esi   
  247. 005406C5   5B                     pop     ebx   
  248. 005406C6   8BE5                   mov     esp, ebp   
  249. 005406C8   5D                     pop     ebp   
  250. 005406C9   C3                     ret   
  251.   
  252. *)   
  253. end;  
Posted in 软件开发 at July 31, 2007. by 傻猫 .    Views: 7239    4 Comments

TEmbeddedWB Methods2

Methods 2


Navigate(by by Vino Rodrigues from
Borland): To display a Web page or document in the TEmbeddedWB component, wen need use the Navigate method programmatically. The syntax for the Navigate method is:
procedure
Navigate(const URL: WideString); overload;
procedure
Navigate(const URL: WideString; var Flags: OleVariant); overload;
procedure
Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant); overload; procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant); overload;
procedure
Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant; var Headers: OleVariant); overload;

Where:

  • URL specifies the UNC path name of a file or the Uniform Resource Locator (URL) of an Internet resource that the Web browser should display.

    If URL refers to an Internet protocol and a location on the Internet, your application must establish a connection before is can display the document. If the computer running your application is connected to a proxy server (a secure connection to the Internet through a LAN), or if it has a direct connection to the Internet, the TEmbeddedWB component downloads and displays the Web page or other Internet content immediately. If the computer running your application uses a modem and dial-up connection to the Internet, and that connection hasn't been established beforehand, the TEmbeddedWB component initiates the connection.

    If URL refers to an Internet protocol and a location on an intranet server, the computer running your application must be connected to the intranet and have permission to access that server.

    If URL refers to a standard file system path on a local hard drive or intranet, the TEmbeddedWB component opens the document and displays it immediately. The TEmbeddedWB component can open Microsoft Office documents, text files, and HTML documents that don't require features supported only by an Internet server. For example, the TEmbeddedWB component can't open HTML documents that use IDC/HTX files or Active Server Pages (ASP) files from the standard file system, but it can open HTML documents that contain only the HTML tags supported by Microsoft Internet Explorer.

    Note: If URL refers to a path in the standard file system that doesn't refer to a file name (for example, C:WindowsSystem), the TEmbeddedWB component displays the file system itself, much like My Computer.

     

  • Flags is a set of values that specify whether to add the resource to the history list, whether to read from or write to the cache, and whether to display the resource in a new window. It can be a sum of zero or more of the following:

    Constant Value Meaning
    NavOpenInNewWindow $01 Open the resource or file in a new window.
    NavNoHistory $02 Do not add the resource or file to the history list. The new page replaces the current page in the list.
    NavNoReadFromCache $04 Do not read from the disk cache for this navigation.
    NavNoWriteToCache $08 Do not write the results of this navigation to the disk cache.
    NavAllowAutosearch $10 If the navigation fails, the Web browser attempts to navigate common root domains (.com, .org, and so on). If this still fails, the URL is passed to a search engine.

     

     

  • TargetFrameName is the name of the frame in which the resource will be displayed, or nil if the resource should not be displayed in a named frame.

     

  • PostData contains the data sent to the server when using Navigate to generate an HTTP POST message. If PostData is nil, Navigate generates an HTTP GET message. PostData is ignored if URL does not specify an HTTP URL.

     

  • Headers contains any headers sent to the servers when the URL represents an HTTP URL. HTTP headers specify such things as the intended action required of the server, the type of data, and so on.

     
    procedure TForm1.Button1Click(Sender: TObject);
    var // Autor: Thomas Stutz
      
    Flags, Headers, TargetFrameName, PostData: OLEVariant;
      Url, Ref: string;
      IEApp: OLEVariant;
    begin
      
    Flags := '1';
      TargetFrameName := '';
      PostData := '';
      Url := 'http://www.dach.de/weiterempfehlen.php';
      Ref := 'http://www.dach.de/';
      
    // u cannot navigate to the url above without this referer
      
    Headers := 'Referer: ' + Ref + #10 + #13;
      EmbeddedWB1.Navigate(Url, Flags, TargetFrameName, PostData, Headers);
    end;


Navigate2: Use Navigate2 to locate and download a specific resource. Navigate can send an HTTP message to a specified URL and display the results, display the results of a specified file, or navigate to a resource that can't be expressed as an URL such as an item identifier list. URL specifies the UNC path name of a file, the Uniform Resource Locator of an Internet resource, or a pointer to an item identifier list (PIDL). Flags is a set of values that specify whether to add the resource to the history list, whether to read from or write to the cache, and whether to display the resource in a new window. It can be a sum of zero or more of the following:

Constant

TargetFrameName is the name of the frame in which the resource will be displayed, or NULL if the resource should not be displayed in a named frame. PostData contains the data sent to the server when usingNavigateto generate an HTTP POST message. If PostData is NULL,Navigategenerates an HTTP GET message. PostData is ignored if URL does not specify an HTTP URL. Headers contains any headers sent to the servers when the URL represents an HTTP URL. HTTP headers specify such things as the intended action required of the server, the type of data, and so on. (See TWebRequest object, whose properties represent many of the more common headers).

 

A nice example by
HHF Innovations:
Q: How can I pass PostData when I Navigate to a URL?

A: I call the below method with a URL destination, PostData in the format of 'animal=cat&color=brown' etc. and the TEmbeddedWB object that I want to load the URL inside of...

procedure TDBModule.Navigate(stURL, stPostData: String; var wbEmbeddedWB: TEmbeddedWB);var  vWebAddr, vPostData, vFlags, vFrame, vHeaders: OleVariant;  iLoop: Integer;begin  {Are we posting data to this Url?}  if Length(stPostData)> 0 then  begin    {Require this header information if there is stPostData.}    vHeaders:= 'Content-Type: application/x-www-form-urlencoded'+ #10#13#0;    {Set the variant type for the vPostData.}    vPostData:= VarArrayCreate([0, Length(stPostData)], varByte);    for iLoop := 0 to Length(stPostData)- 1 do    // Iterate    begin      vPostData[iLoop]:= Ord(stPostData[iLoop+ 1]);    end;    // for    {Final terminating Character.}    vPostData[Length(stPostData)]:= 0;    {Set the type of Variant, cast}    TVarData(vPostData).vType:= varArray;  end;  {And the other stuff.}  vWebAddr:= stURL;  {Make the call Rex.}  wbEmbeddedWB.Navigate2(vWebAddr, vFlags, vFrame, vPostData, vHeaders);end;  {End of Navigate procedure.}

This tip provided by Craig Foley based on techniques from Nathan Wilhelmi's Usenet posting to borland.public.delphi.internet on the 31/1/99

A: Here's another option:

procedure TForm1.SubmitPostForm;var  strPostData: string;  Data: Pointer;  URL, Flags, TargetFrameName, PostData, Headers: OleVariant;begin  {  <!-- submit this html form: -->  <form method="post" action="http://127.0.0.1/cgi-bin/register.pl">  <input type="text" name="FIRSTNAME" value="Hans">  <input type="text" name="LASTNAME" value="Gulo">  <input type="text" name="NOTE" value="thats it">  <input type="submit">  </form>  }  strPostData := 'FIRSTNAME=Hans&LASTNAME=Gulo&NOTE=thats+it';  PostData :=  VarArrayCreate([0, Length(strPostData) - 1], varByte);  Data := VarArrayLock(PostData);  try    Move(strPostData[1], Data^, Length(strPostData));  finally    VarArrayUnlock(PostData);  end;  URL := 'http://127.0.0.1/cgi-bin/register.pl';  Flags := EmptyParam;  TargetFrameName := EmptyParam;  Headers := EmptyParam; // TEmbeddedWB will see that we are providing                         // post data and then should automatically fill                         // this Headers with appropriate value  EmbeddedWB1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);end;

This tip provided by Hans Gulo.


Procedure NavigateFolder(CSIDL: Integer);

browsing on special folders—such as Desktop and My Computer:


Procedure NavigatePidl(pidl : PItemIdList);
EmbeddedWb1.NavigateFolder(CSIDL_Desktop);




Quit:Do not use this method. It is included in the TEmbeddedWB interface because the IEmbeddedWB2 interface is shared with Internet Explorer. Internet Explorer responds to Quit by shutting down

Refresh:(ByBorland) Call Refresh to reload the current document. This is useful when the Web browser is displaying the resource at an URL that may have changed. Refresh always sends a pragma:nocache header, telling the server not to return a cached copy. This can cause problems with some servers. To prevent the pragma:nocache header, or to refresh only expired pages, use the Refresh2 method instead.

Refresh2: (ByBorland) Call Refresh2 to reload the current document. Unlike theRefreshmethod, Refresh2 lets you specify what level of refresh to perform. Level indicates what type of information is refreshed. The following table lists the possible values:

Constant

When Level is omitted, a value of REFRESH_COMPLETELY is assumed.

Syntax
procedure Refresh2(); overload;
procedure Refresh2(var Level: OleVariant); overload;


Procedure SetFocusToDoc;

This procedure is added to make it possible to TAB the way to the content of the EmbeddedWB . It is also useful for functions, that need to have the focus set on the document in EmbeddedWB (ex. see OnShowHelp).

function HtmlHelp;

API call to make it easy to implement Help-file in the EmbeddedWB application. (see OnShowHelp).

function AssignDocument;

Opens a blank page in EmbeddedWB-control if document is unassigned. Used in LoadFromStrings and LoadFromStream.

function LoadFromStrings(aStrings : TStrings) : HRESULT;

Display content of aStream in EmbeddedWB. 

EmbeddedWB1.LoadFromStrings(Memo1.Lines);


function LoadFromStream(aStream : TStream) : HRESULT;

Display content of aStrings in EmbeddedWB.

procedure TForm1.Button1Click(Sender: TObject);
var

T : TMemoryStream;
begin
  T := TMemoryStream.Create;
  try
    T.LoadFromFile('C:\temp\test.htm');
    EmbeddedWb1.LoadFromStream(T);
  finally
  T.Free;
  end;
end;


function SaveToFile(const Fname : String) : HRESULT;

Save HTML-source from EmbeddedWB.Document to file Fname.

procedure TForm1.Button2Click(Sender: TObject);
begin
EmbeddedWb1.Go('http://www.microsoft.com');
EmbeddedWb1.SaveToFile('c:\microsoft.htm');
end;


function SaveToStrings(aStrings : TStrings) : HRESULT;

Save EmbeddedWb.document to stringlist.

procedure TForm1.Button1Click(Sender: TObject);
begin
EmbeddedWb1.Go('http://www.microsoft.com');
EmbeddedWb1.SaveToStrings(memo1.lines);
end;


function SaveToStream(aStream : TStream) : HRESULT;

Save EmbeddedWB.document to a stream. The following sample loads a webpage in the browser. When download is completed the HTML-source is displayed in Memo1 and saved to a file, using a TMemoryStream:

procedure TForm1.Button3Click(Sender: TObject);
var
  M : TMemoryStream;
begin
  M:=TMemoryStream.Create;
  EmbeddedWb1.Go('http://www.microsoft.com');
  EmbeddedWb1.SaveToStream(M);
  M.Seek(0,0);
  Memo1.Lines.AddFromStream(M);
  M.SavetoFile('c:\microsoft.htm');
  M.Free;
end;


function RegisterNameSpace(clsid : TGUID) : HRESULT;

Register the temporary namespacehandler clsid. There seems to be a unconfirmed bug in IInternetProtocol.RegisterNameSpace, so namespace-patterns cannot be added. Instead you can add your namespace in function "Start" in your namespacehandler-object:



ShowBrowserBar: Do not use this method. It is included in the TWebBrowser interface because the IWebBrowser2 interface is shared with Internet Explorer. Internet Explorer uses ShowBrowserBar to show or hide a specified browser bar.

Stop: Stop cancels any pending navigation or download operation and terminates any dynamic page elements, such as background sounds and animations.
Do not expect that stop will work at once like magic. It depends on several IE dll's so be patient.

function TMyNSHandler.Start(szUrl: PWideChar; OIProtSink: IInternetProtocolSink; OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): HResult; 
begin
if
Pos('http://' + <NameSpace> + '/', LowerCase(szUrl)) <> 1
then Result := INET_E_USE_DEFAULT_PROTOCOLHANDLER
else begin
...
end;


SetGlobalOffline

Use SetGlobalOffline to switch between 'Work Online' and 'Work Offline'. 

SetGlobalOffline(TRUE) = Work Offline;

SetglobalOffline(FALSE)= Work Online;

Use IsGlobalOffline to detect if your EmbeddedWB is in global offline mode. The following lines of code adds a menu item for switching between 'Work Offline' and 'Work Online':

procedure TForm1.Offline1Click(Sender: TObject);
var
State : Boolean;
begin

state:=IsGlobalOffline;
EmbeddedWb1.SetGlobalOffline(not State);
If State then Offline1.Caption:='Work Offline' else 
Offline1.Caption:='Work Online';
end;

SetGlobalOffline works exactly as 'Work Offline/Online'  in IE4/IE5.

Links:

Offline BrowsingThis function is based on source-code posted by Adam Stiles in the delphi-EmbeddedWB newsgroup (Message 426).


function UnregisterNameSpace : HRESULT;

Unregister a temporary pluggable namespacehandler.

function RegisterMIMEFilter(clsid: TGUID; MIME : PWideChar) : HRESULT;

Register the temporary pluggable MIME filter clsid to be used for MIME-type MIME.


function UnregisterMIMEFilter(MIME : PWideChar) : HRESULT;

Unregister the a temporary pluggable MIME filter for MIME-type MIME.

Zoom: The following lines of code are all you need to add a textsize menu to your application, similar to the one in Internet Explorer.

Create 5 Menuitems: Smallest, Small, Medium, Larger, Largest. 
Set Medium.Checked to True;
Set the Tag-value for the Menuitems from 0 (smallest) to 4 (largest).
Connect the 5 OnClick-events to the same function:

procedure TForm1.Smallest1Click(Sender: TObject);
begin
 Smallest1.Checked:=False;
 Small1.Checked:=False;
 Medium1.Checked:=False;
 Larger1.Checked:=False;
 largest1.checked:=False;
 EmbeddedWb1.Zoom((Sender as TMenuitem).Tag);
 (Sender as Tmenuitem).checked:=True;
end;

Posted in 软件开发 at July 31, 2007. by 傻猫 .    Views: 7612    No Comments

TEmbeddedWB Methods1

 

This page is still Under Construction

AddHtmlToAboutBlank: This function allow you to add a string to the blank pages (Like "About : Blank") to create your own personal blank page.
 
EmbeddedWB1.AddHtmlToAboutBlank('Enhanced Browser 2006'); 

AutoFillIEFormAndExcecute: A procedure that can help you analyze and auto fill common forms that contain field name like 'INPUT', 'Text', 'FindWindow',  'Submit' and 'Search'.
You must remember that web sites programmers not always use the standard text and it will not function without the equal text fields.
 
EmbeddedWB1.AutoFillIEFormAndExcecute;

AddToRestrictedSiteList(URL :String): A procedure that will add the URL string into the list of "Restricted Site List".
 
EmbeddedWB1.AddToRestrictedSiteList('porn.com');

AddToTreustedSiteList(URL :String): A procedure that will add the URL string into the list of "Trusted Site List".
 
EmbeddedWB1.AddToTrustedSiteList('microsoft.com');

AddToFavorites(URL: String, Title: String); A procedure that will add a site to your favorites sites. You can enter only URL but then you will loose the proper display.
 EmbeddedWB1.AddToFavorites('bsalsa.com', 'Embedded Web Browser page'); 

AssignDocument: A procedure which will navigate to "About:Blank" page and wait until the page is fully loaded.
 
EmbeddedWB1.AssignDocument; 

Assign(Source: TPersistent): This procedure comes from Classes.pas.
Call Assign to copy the properties or other attributes of one object from another.
 
EmbeddedWB1.Assign(Source); 

AfterConstruction: This procedure is called automatically after the object's last constructor has executed. Do not call it explicitly in your applications.
 
EmbeddedWB1.AfterConstruction;

BrowseProperties: The procedure comes from OleCtrls and NOT supported anymore.
 
EmbeddedWB1.BrowseProperties; 

Broadcast(var Message): This procedure comes from TWinControl.
Use Broadcast when you want to send the same message to each of the child controls contained within the windowed control. Specify the message to be passed as the value of the Message parameter
 
EmbeddedWB1.Broadcast(TheMessage); 

BeginDrag(Immediate: Boolean; Threshold: Integer):
Call BeginDrag to start a drag operation. BeginDrag is called in application code only when the value of the control's DragMode is dmManual. If DragMode is dmAutomatic, BeginDrag is called automatically. If the Immediate parameter is true, the mouse pointer changes to the value of the DragCursor property and dragging begins immediately. If Immediate is false, the mouse pointer doesn't change to the value of the DragCursor property and dragging doesn't begin until the user moves the mouse pointer the number of pixels specified by the Threshold parameter. If the caller passes a Threshold value less than 0 (such as the default value for this parameter), BeginDrag uses the DragThreshold property of the global Mouse variable. Setting Immediate to false allows the control to accept mouse clicks without beginning a drag-and-drop or drag-and-dock operation.
 
EmbeddedWB1.BeginDrag(true);

BringToFront: Comes from Controls. You should Call BringToFront to ensure that a form is visible or to reorder overlapping controls within a form.
Without BringToFront, controls are stacked in their order they were placed on the form. 
 
EmbeddedWB1.BringToFront;

BeforeDestruction: BeforeDestruction is called automatically immediately before the component's first destructor executes. Do not call it explicitly in your applications.
 
EmbeddedWB1.BeforeDestruction;

CheckOnlineStatus: Call CheckOnlineStatus function to check your online status. It will return true if you are online and false for offline.
 
If EmbeddedWB1.CheckOnlineStatus then...

CheckIfInTrustedList(URL:String): Call CheckIfInTrustedList function to check if a URL is in the Trusted List.
Return true if the URL is in the Trusted List
 if EmbeddedWB1.CheckIfInTrustedList('borland.com') then ...

CheckIfInRestrictedList(URL:String): Call CheckIfInRestrictedList function to check if a URL is in the Restricted List.
Return true if the URL is in the Restricted List
 if EmbeddedWB1.CheckIfInRestrictedList('borland.com') then ...

ClearCache: Call ClearCache procedure to clear all the pc cache.
You should remember that this procedure is irreversable and will delete also entire IE cache also.
 
EmbeddedWB1.ClearCache; 

ClearHistory: Call ClearHistory procedure to clear all the internet History.
You should remember that this procedure is irreversable and will delete also entire IE History also.
 
EmbeddedWB1.ClearHistory;

ClearTypedUrls: Call ClearTypedUrls procedure to clear all the Typed Urls as they appear in the address bar.
You should remember that this procedure is irreversable and will delete also entire IE Typed Urls also.
 
EmbeddedWB1.ClearTypedUrls; 

ClientToWindow(var pcx: SYSINT; var pcy: SYSINT):Do not use this method. It is included in the TEmbeddedWB interface because the IWebBrowser2 interface is shared with Internet Explorer. Internet Explorer uses ClientToWindow to convert between client coordinates and window coordinates.

Copy: Copy procedure will copy the selected text or image to the clipboard.
Remember to select something before trying to copy.
 
EmbeddedWB1.Copy;

CreateDesktopShortcut: This procedure will create a shortcut to the current web site location on your desktop.
The procedure supports the web site address, title and favicon.
 
EmbeddedWB1.CreateDesktopShortcut; 

CreateNewMail: This procedure will lunch your default Email client by creating a new mail without a context.
 
EmbeddedWB1.CreateNewMail;

Cut: Cut procedure will cut the selected text or image to the clipboard.
Remember to select something before trying to cut, and that cut procedure is availableunder its terms.
EmbeddedWB1.Cut;

Create(Owner: TComponent): The Create constructor allow  you to create TEmbeddedWB dynamically.
 
procedure TForm1.Button1Click(Sender: TObject);
  var
  WB: TEmbeddedWB;
  begin
    
WB := TEmbeddedWB.Create(nil);
    TControl(WB).Parent := panel1; //or whatever... 
    Wb.Align:=alClient;
    WB.Loaded;
    WB.Visible := True;
 
end;

or:

 WB := TEmbeddedWB.(self);

  with TControl(
WB) do
  Begin
    Parent := self; //or whatever...
    width:=800;
    height:=600;
  End;
  with
WB do
 begin

    Loaded;
    Visible := True;
    DownloadOptions:=[  DLCTL_NO_SCRIPTS , DLCTL_NO_JAVA
                     ,DLCTL_NO_RUNACTIVEXCTLS  ,DLCTL_NO_DLACTIVEXCTLS  ];
  End; 

CanFocus: Call CanFocus to find out if the control can receive input from the user. CanFocus returns true if both the control and its parent(s) have their Visible and Enabled properties set to true. If any of the Visible and Enabled properties of the control or the controls in which it is contained are not true, then CanFocus returns false.
 
If EmbeddedWb1.CanFocus then...

CleanupInstance:Do not call CleanupInstance directly. CleanupInstance is called automatically when the object instance is destroyed. CleanupInstance releases all long strings and variants. It sets long strings to empty and variants to Unassigned.

DesignMode:Use this function to change to design mode on and off.
DesignMode will return true for on state and false for off state.
 
if EmbeddedWb1.DesaignModethen..

Destroy: Destroy is the component destructor. You do not use it within your application.

DocumentLoaded: Use this function to query the loaded document.
It will return false if the document = nil and true if the document is assigned.
 
if EmbeddedWb1.DocumentLoadedthen..

ExploreFolder(Path: String): This procedure will lunch Windows Explorer by the given path using ShellAPI.
EmbeddedWB1.ExploreFolder('C:\Windows');

ExecWB: ExecWB lets you use the IOleCommandTarget interface to pass a command to the Web browser control. For more information, see the Microsoft documentation of IOleCommandTarget. cmdID specifies the command to execute. The Web Browser does not support all of the commands for which Microsoft providesconstants. Use the QueryStatusWB method to determine what commands can be used. cmdexecopt modifies how the command is executed. pvaIn specifies a Variant array that contains any input arguments. This value can be omitted if there are not input arguments. pvaOutspecifies a Variant that receives the results of the command, if any. This value can be omitted if there are no results
if ( ActiveControl is TWebBrowser ) then begin WebBrowser1.ExecWB( OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT ); 

FillForm(FieldName: string; Value: string):This function allow you to auto insert details into a web page
 
procedure TfrmMain.FillFormWithPersonalDetails1Click(Sender: TObject);
begin
 EmbeddedWB1.Navigate('http://edit.yahoo.com/config/eval_register?.
done=http://groups.yahoo.com%2fgroup%2fdelphi-webbrowser%2f&.src=ygrp&.intl=us');
while EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE do
 begin
    Forms.Application.ProcessMessages;
 end;
   withEmbeddedWB1do
   begin
     FillForm('login', 'Mozart');
     FillForm('passwd', 'Bethoven');
     FillForm('.fn', 'lol1');
     FillForm('.ln', 'lol2');
     FillForm('.ln', 'lol2');
     FillForm('.pw', 'lol3333');
     FillForm('.pw2', 'lol444');
     FillForm('.pw_a', 'lolypop');
     FillForm('.pwqa_a', 'lolypop');
     FillForm('.em', 'loly@pop.com');
     FillForm('.pc', '123456');
     FillForm('.secword', ':)');
 
 end;
end;

FrameCount: This function will return a LongInt that contain the document frames number.
 
i:= EmbeddedWB1.FramesCount;

FrameCountFromDocument(SourceDocIHtmlDocument2)):This function is an enhanced FrameCount and  will return a integer that contain the document frames number.
 
i:= EmbeddedWB1.FramesCountFromDocument('bla.html');

GetCachedFileFromURL(strUL: string; var strLocalFile: string): This function will return the path to a specific file in the cache
procedure TfrmMain.GetCachedPathClick(Sender: TObject);
var
str : string;
begin
  EmbeddedWB1.GetCachedFileFromURL(IEAddress1.Text, str);
  ShowMessage(str);
end; 

GetCookie: This function will return the Cookie name as a string, if the page contains a cookie. If the page does not contain a cookie, it will return an empty string.
 
procedure TfrmMain.CookiesCheck1Click(Sender: TObject);
 var
 st : string;
begin
     st:= EmbeddedWB1.GetCookie;
     SetLength(st, 180);
  if st <> ''then ShowMessage('The web site has just added a cookie:
     +#10+#13+ st) else ShowMessage('No cookies were found.');
end;

GetCookiesPath: If you Call this function the result will be the IE Cookies path.
 
procedure TfrmMain.GetCookiesClick(Sender: TObject);
 var
 st : string;
begin
     st:= EmbeddedWB1.GetCookiesPath;
     ShowMessage('Cookies Path: '+ st);
end; 

GetHistoryPath:If you Call this function the result will be the IE History path.
procedure TfrmMain.GetHistoryClick(Sender: TObject);
 var
 st : string;
begin
     st:= EmbeddedWB1.GetHistoryPath;
     ShowMessage('History Path: '+ st);
end;  

GetFavoritesPath: If you Call this function the result will be the IE Favorites path.
procedure TfrmMain.GetFavoritesClick(Sender: TObject);
 var
 st : string;
begin
     st:= EmbeddedWB1.GetFavoritesPath;
     ShowMessage('Favorites Path: '+ st);
end;  

GetFrame(FrameNo : Integer) : IWebbrowser2;:Returns Iwebbrowser2-interface to the specified frame. You can use it to print a particular frame, view frame-source etc

GetDefaultBrowserFromRegistry: This function will return the Default Browser name as a string (if there is a Default Browser). If no Default Browser is set, then it will return 'No default browser was found' string.
procedure TfrmMain.GetBrowserClick(Sender: TObject);
 var
 st : string;
begin
     st:= EmbeddedWB1.GetDefaultBrowserFromRegistry;
     ShowMessage('Default Browser: '+ st);
end;   

GetIEHomePage: This function will return the IE Home Page  as a string.
 
procedure TfrmMain.GetIEHomePageClick(Sender: TObject);
 var
 st : string;
begin
     st:= EmbeddedWB1.GetIEHomePage;
     ShowMessage('Default Browser: '+ st);
end;

GetIEHandle(WebBrowser: TEmbeddedWB; ClassName: string): HWND: This function returns the handle of the Internet Explorer window (HWND) to assist the programer Invoke Hidden Commands in the EmbeddedWB.
The following codes demonstrates an innovative way to invoke hidden commands to show modal dialogs such as "Add To Favorite" dialog, "Import/Export Wizard" dialog in your WebBrowser-based application Command IDs Handled by 'Shell DocObject View'
Const Uses:
const ID_IE_FILE_PAGESETUP           = 259;
const ID_IE_FILE_PRINT               = 260;
const ID_IE_FILE_NEWWINDOW           = 275;
const ID_IE_FILE_PRINTPREVIEW        = 277;
const ID_IE_FILE_NEWMAIL             = 279;
const ID_IE_FILE_SENDPAGE            = 282;
const ID_IE_FILE_SENDLINK            = 283;
const ID_IE_FILE_SENDDESKTOPSHORTCUT = 284;
const ID_IE_HELP_VERSIONINFO         = 336;
const ID_IE_HELP_HELPINDEX           = 337;
const ID_IE_HELP_WEBTUTORIAL         = 338;
const ID_IE_HELP_FREESTUFF           = 341;
const ID_IE_HELP_PRODUCTUPDATE       = 342;
const ID_IE_HELP_FAQ                 = 343;
const ID_IE_HELP_ONLINESUPPORT       = 344;
const ID_IE_HELP_FEEDBACK            = 345;
const ID_IE_HELP_BESTPAGE            = 346;
const ID_IE_HELP_SEARCHWEB           = 347;
const ID_IE_HELP_MSHOME              = 348;
const ID_IE_HELP_VISITINTERNET       = 349;
const ID_IE_HELP_STARTPAGE           = 350;
const ID_IE_HELP_NETSCAPEUSER        = 351;
const ID_IE_FILE_IMPORTEXPORT        = 374;
const ID_IE_HELP_ENHANCEDSECURITY    = 375;
const ID_IE_FILE_ADDTRUST            = 376;
const ID_IE_FILE_ADDLOCAL            = 377;
const ID_IE_FILE_NEWPUBLISHINFO      = 387;
const ID_IE_FILE_NEWPEOPLE           = 390;
const ID_IE_FILE_NEWCALL              =395;
Command IDs Handled by 'Internet Explorer_Server'
const 
ID_IE_CONTEXTMENU_NEWWINDOW    = 2137;
const ID_IE_CONTEXTMENU_ADDFAV       = 2261;
const ID_IE_CONTEXTMENU_REFRESH      = 6042;

 
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
  
//Invoke "Add To Favorite" Dialog
  
SendMessage(
GetIEHandle(web, 'Internet Explorer_Server'), WM_COMMAND,
  ID_IE_CONTEXTMENU_ADDFAV, 0);
end;

 procedure TForm1.ToolButton3Click(Sender: TObject);
begin
  
//Invoke "Import/Export Wizard" Dialog
  
SendMessage(
GetIEHandle(web, 'Shell DocObject View'), WM_COMMAND,
  ID_IE_FILE_IMPORTEXPORT, 0);
end;

Function GetIEVersion : String; Use this function to determine which version of Internet Explorer is installed on the computer.
The function returns the fileversion of shdocvw.dll. 
The following chart lists the different versions of the Shdocvw.dll file and the corresponding versions of Internet Explorer:

Version Product
--------------------------------------------------------------
4.70.1155 Internet Explorer 3.0
4.70.1158 Internet Explorer 3.0 (OSR2)
4.70.1215 Internet Explorer 3.01
4.70.1300 Internet Explorer 3.02
4.71.1008.3 Internet Explorer 4.0 PP2
4.71.1712.5 Internet Explorer 4.0
4.72.2106.7 Internet Explorer 4.01
4.72.3110.3 Internet Explorer 4.01 Service Pack 1
4.72.3612.1707 Internet Explorer 4.01 SP2
5.00.0518.5 Internet Explorer 5 Developer Preview (Beta 1)
5.00.0910.1308 Internet Explorer 5 Beta (Beta 2)
5.00.2014.213 Internet Explorer 5
5.0.2717.2000 Internet Explorer 5 with Update for "Malformed
Favorites Icon" Security Issue installed
5.00.2721.1400 Internet Explorer 5 with Update for "ImportExport
Favorites()" Security Issue installed
5.00.2919.800 Internet Explorer 5 (Windows 2000 RC1, build 5.00.2072)
5.00.2919.3800 Internet Explorer 5 (Windows 2000 RC2, build 5.00.2128)
5.00.2919.6307 Internet Explorer 5.01
5.50.3825.1300 Internet Explorer 5.5 Developer Preview (Beta)


Link:
Determing Which Version of Internet Explorer you are using

GetLastVisitedPage(var LastVisitedPage: string): Call this function to get the last visited page (before your browser was closed).
You must use SaveLastVisitedPage function on you form close event to enable this feature.
 
procedure TfrmMain.GetLastVisitedPageClick(Sender: TObject);
 var
   st : string;
begin
     st:= EmbeddedWB1.GetLastVisitedPage;
     ShowMessage('Default Browser: '+ st);
end;

GetIPAndHostName(var HostName, IPaddr, WSAErr: string): Boolean: Call this function to get the pc Host name and IP address (True result).
In case of an error, WSAErr will hold an error string and the result will be false.
procedure TfrmMain.GetHostAndIP1Click(Sender: TObject);
var
 HostN,HostIP,Err : string;
 begin
   if EmbeddedWB1.GetIPAndHostName(HostN, HostIP, Err)then
      MessageDlg('PC Host Name: '+HostN + #10+#13+'Your Internal
      IP: ' + HostIP, mtInformation, [mbOk], 0)
     else MessageDlg(Err, mtError, [mbOk], 0);
 
end; 

GetSpecialFolderPath(CallerHandle: THandle; CSIDL: Integer): PChar: Call the function to retrive the path to windows special folders path.

Const Uses:

  • CSIDL_ALTSTARTUP

  • CSIDL_APPDATA

  • CSIDL_BITBUCKET

  • CSIDL_COMMON_ALTSTARTUP

  • CSIDL_COMMON_DESKTOPDIRECTORY

  • CSIDL_COMMON_FAVORITES

  • CSIDL_COMMON_PROGRAMS

  • CSIDL_COMMON_STARTMENU

  • CSIDL_COMMON_STARTUP

  • CSIDL_CONTROLS

  • CSIDL_COOKIES

  • CSIDL_DESKTOP

  • CSIDL_DESKTOPDIRECTORY

  • CSIDL_DRIVES

  • CSIDL_FAVORITES

  • CSIDL_FONTS

  • CSIDL_HISTORY

  • CSIDL_INTERNET

  • CSIDL_INTERNET_CACHE

  • CSIDL_NETHOOD

  • CSIDL_NETWORK

  • CSIDL_PERSONAL

  • CSIDL_PRINTERS

  • CSIDL_PRINTHOOD

  • CSIDL_PROGRAMS

  • CSIDL_RECENT

  • CSIDL_SENDTO

  • CSIDL_STARTMENU

  • CSIDL_STARTUP

  • CSIDL_TEMPLATES

procedure TForm1.Button1Click(Sender: TObject);
begin
  
OrganizeFavorite(Handle, GetSpecialFolderPath(Handle,
                   CSIDL_FAVORITES));
end;

GetBmpFromBrowser(FileName : String): Boolean: Call GetBmpFromBrowser to create a screen capture of your page. Remember to enter a valid name or path with name for the file.
Result will be true if the process will end succesfuly.
 procedure TfrmMain.getAScreanCapture1Click(Sender: TObject);
 
begin
 if
EmbeddedWB1.GetBmpFromBrowser('site.bmp')then
    
begin
       UpdateImage;
      Image1.Picture.LoadFromFile('.site.bmp');
      ShowMessage('The screen capture is in your application       folder.');
 
   end;
end

GetDocument: IHtmlDocument2 The result of this function will be the current loaded document as IHtmlDocument2.
In case of an error, a proper message will be shown.
 
if EmbeddedWB1.GetDocument then..

GetJPEGfromBrowser(FileName: string; SourceHeight, SourceWidth, TargetHeight, TargetWidth: integer): Boolean;
This function is a different method to get a screen capture.
This method is more flexible and you can set also the height and width.
 
procedure TfrmMain.GetJpegPageCapture1Click(Sender: TObject);
begin
 
if EmbeddedWB1.GetJpegFromBrowser('.\Site.jpg', Height, Width, Height, Width) then
   begin
      Image1.Picture.LoadFromFile('.\Site.jpg');
     ShowMessage('The page screen capture is in your application folder.')
  
  end;
end;

 
GoBack: 
Navigates to the previous item in the history list.
Call GoBack to return to the last document in the history list. GoBack has no effect unless the history list contains additional documents.

Note:

The Navigate or Navigate2 command can change the history list, depending on the specified flags.

GoForward: Navigates to the next item in the history list.
 
Call GoForward to return to the next document in the history list. GoForward reverses the effect of the last GoBack command.

GoHome:Navigates to the current start page.
 Call GoHome to navigate to the registered home or start page. The URL for this page is specified in the Registry at

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
under the name Startpage. You can change this value using the TRegistry or TRegistryIniFile object, or using Navigation tab of the Internet Explorer's Options dialog.
 

GoSearch:Navigates to the current search page.
Call GoSearch to navigate to the registered search page. The URL for this page is specified in the Registry at
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
under the name SearchPage. You can change this value using the TRegistry or TRegistryIniFile object, or using Navigation tab of the Internet Explorer's Options dialog.

Posted in 软件开发 at July 31, 2007. by 傻猫 .    Views: 14831    No Comments

终于生病了

这两天感冒了,一直流鼻涕,昨天用完一圈纸,专门用来擦鼻涕,恼火啊。。

吃了“白加黑”还是一样流鼻涕,今天狂喝水,一次就是一大杯,WC差不多去了20多次,脚都跑软了,TNND

感冒不是病,难受起来要人命,真的是啊。

Posted in 我的生活 at July 30, 2007. by 傻猫 .    Views: 4458    3 Comments

[恐怖]当红明星50年以后的衰老模样

近日有娱乐圈内人曝料,说刘德华、张曼玉、巩俐这些大牌明星都是靠打美容针才保持青春容颜的,想想也是,岁月不留情,有网友PS了当红韩国明星50年后的模样,虽然有些夸张,但能自然面对年老,才是最大牌的明星。

看看50年后的这个大牌名星是什么模样,恐不恐怖自己说。。。。


20070728193050e6789.jpg

20070728193140e285e.jpg

20070728193417ab4ba.jpg

20070728193600d3685.jpg

200707281956208be97.jpg

2007072819363188e31.jpg

20070728193652712df.jpg

20070728194048534b6.jpg

2007072819350226156.jpg

2007072819371601578.jpg

Posted in 休闲娱乐 at July 30, 2007. by 傻猫 .    Views: 2777    No Comments

九维版“杨二车那姆”

九维版“杨二车那姆”


杨二.jpg

Posted in 休闲娱乐 at July 27, 2007. by 傻猫 .    Views: 4602    2 Comments

︻$▅▆▇◤ 屠龙在手,谁与争锋

从我换手机号后,从我换了QQ签名以后,好像人品(RP)值爆涨,做事也顺利多了,昨天,就天昨天晚上,去年被击坏的电视台居然自己好了,,昨天晚上还看了《天龙八部》,哇哈哈哈。。。。。。

从松平沟旅游回来,运气甚好,去公司楼下移动营业厅挑了一个新手机号,生日靓号,159 8282 66** ,真的很爽啊。还有,最近似乎很走桃花,好多朋友都在给我介绍女朋友,真的谢谢了啊。我又何尝不想找一个可以白头到老人的呢,只是现在已经不是20出头了,玩不起啊,一晃就25岁了,也不想再受到伤害,偶不要24小时的爱情,我要天长地久的爱情。

如果爱情这怀酒谁先喝先伤的话,那我先干了,你随意。

Posted in 我的生活 at July 27, 2007. by 傻猫 .    Views: 2673    No Comments

CIF single chip 摄像头驱动下载

CIF single chip 驱动下载
极难找的杂牌摄像头驱动!
安装时Windows提示找到“CIF single chip”,我尝试了十几个驱动都不行,
最后才找到这个,下载安装就搞掂!
下载地址:http://www.chinadhcp.com/pic/SC120.zip

程程的电脑摄像头驱动就是这个.
解压密码为(红色部分): samool.com


sc-120.part02.rar

sc-120.part01.rar

sc-120.part03.rar

sc-120.part04.rar

sc-120.part05.rar

sc-120.part06.rar

Posted in 杂七杂八 at July 27, 2007. by 傻猫 .    Views: 19076    23 Comments