ZT文萃

本博不原创,转帖自己感兴趣那些事人物,什么入眼贴什么,随心所欲。
posts - 93, comments - 5, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理


转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html

 

一.获得控制台用户输入的信息

     public String getInputMessage() throws IOException...{
         System.out.println("请输入您的命令∶");
         byte buffer[]=new byte[1024];
         int count=System.in.read(buffer);
         char[] ch=new char[count-2];//最后两位为结束符,删去不要
         for(int i=0;i<count-2;i++)
             ch[i]=(char)buffer[i];
         String str=new String(ch);
         return str;
     }
     可以返回用户输入的信息,不足之处在于不支持中文输入,有待进一步改进。

     二.复制文件
     1.以文件流的方式复制文件

     public void copyFile(String src,String dest) throws IOException...{
         FileInputStream in=new FileInputStream(src);
         File file=new File(dest);
         if(!file.exists())
             file.createNewFile();
         FileOutputStream out=new FileOutputStream(file);
         int c;
         byte buffer[]=new byte[1024];
         while((c=in.read(buffer))!=-1)...{
             for(int i=0;i<c;i++)
                 out.write(buffer[i]);        
         }
         in.close();
         out.close();
     }
     该方法经过测试,支持中文处理,并且可以复制多种类型,比如txt,xml,jpg,doc等多种格式

     三.写文件

     1.利用PrintStream写文件


     public void PrintStreamDemo()...{
         try ...{
             FileOutputStream out=new FileOutputStream("D:/test.txt");
             PrintStream p=new PrintStream(out);
             for(int i=0;i<10;i++)
                 p.println("This is "+i+" line");
         } catch (FileNotFoundException e) ...{
             e.printStackTrace();
         }
     }
     2.利用StringBuffer写文件
public void StringBufferDemo() throws IOException......{
         File file=new File("/root/sms.log");
         if(!file.exists())
             file.createNewFile();
         FileOutputStream out=new FileOutputStream(file,true);        
         for(int i=0;i<10000;i++)......{
             StringBuffer sb=new StringBuffer();
             sb.append("这是第"+i+"行:前面介绍的各种方法都不关用,为什么总是奇怪的问题 ");
             out.write(sb.toString().getBytes("utf-8"));
         }        
         out.close();
     }
     该方法可以设定使用何种编码,有效解决中文问题。
四.文件重命名
    
     public void renameFile(String path,String oldname,String newname)...{
         if(!oldname.equals(newname))...{//新的文件名和以前文件名不同时,才有必要进行重命名
             File oldfile=new File(path+"/"+oldname);
             File newfile=new File(path+"/"+newname);
             if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名
                 System.out.println(newname+"已经存在!");
             else...{
                 oldfile.renameTo(newfile);
             }
         }         
     }

  五.转移文件目录
     转移文件目录不等同于复制文件,复制文件是复制后两个目录都存在该文件,而转移文件目录则是转移后,只有新目录中存在该文件。
    
     public void changeDirectory(String filename,String oldpath,String newpath,boolean cover)...{
         if(!oldpath.equals(newpath))...{
             File oldfile=new File(oldpath+"/"+filename);
             File newfile=new File(newpath+"/"+filename);
             if(newfile.exists())...{//若在待转移目录下,已经存在待转移文件
                 if(cover)//覆盖
                     oldfile.renameTo(newfile);
                 else
                     System.out.println("在新目录下已经存在:"+filename);
             }
             else...{
                 oldfile.renameTo(newfile);
             }
         }       
     }
     六.读文件
     1.利用FileInputStream读取文件
    
     public String FileInputStreamDemo(String path) throws IOException...{
         File file=new File(path);
         if(!file.exists()||file.isDirectory())
             throw new FileNotFoundException();
         FileInputStream fis=new FileInputStream(file);
         byte[] buf = new byte[1024];
         StringBuffer sb=new StringBuffer();
         while((fis.read(buf))!=-1)...{
             sb.append(new String(buf));    
             buf=new byte[1024];//重新生成,避免和上次读取的数据重复
         }
         return sb.toString();
     }
2.利用BufferedReader读取

     在IO操作,利用BufferedReader和BufferedWriter效率会更高一点


    
     public String BufferedReaderDemo(String path) throws IOException...{
         File file=new File(path);
         if(!file.exists()||file.isDirectory())
             throw new FileNotFoundException();
         BufferedReader br=new BufferedReader(new FileReader(file));
         String temp=null;
         StringBuffer sb=new StringBuffer();
         temp=br.readLine();
         while(temp!=null)...{
             sb.append(temp+" ");
             temp=br.readLine();
         }
         return sb.toString();
     }


     3.利用dom4j读取xml文件

    
     public Document readXml(String path) throws DocumentException, IOException...{
         File file=new File(path);
         BufferedReader bufferedreader = new BufferedReader(new FileReader(file));
         SAXReader saxreader = new SAXReader();
         Document document = (Document)saxreader.read(bufferedreader);
         bufferedreader.close();
         return document;
     }
     七.创建文件(文件夹)


1.创建文件夹  
     public void createDir(String path)...{
         File dir=new File(path);
         if(!dir.exists())
             dir.mkdir();
     }
2.创建新文件
     public void createFile(String path,String filename) throws IOException...{
         File file=new File(path+"/"+filename);
         if(!file.exists())
             file.createNewFile();
     }
     八.删除文件(目录)
1.删除文件     
     public void delFile(String path,String filename)...{
         File file=new File(path+"/"+filename);
         if(file.exists()&&file.isFile())
             file.delete();
     }
2.删除目录
要利用File类的delete()方法删除目录时,必须保证该目录下没有文件或者子目录,否则删除失败,因此在实际应用中,我们要删除目录,必须利用递归删除该目录下的所有子目录和文件,然后再删除该目录。  
     public void delDir(String path)...{
         File dir=new File(path);
         if(dir.exists())...{
             File[] tmp=dir.listFiles();
             for(int i=0;i<tmp.length;i++)...{
                 if(tmp[i].isDirectory())...{
                     delDir(path+"/"+tmp[i].getName());
                 }
                 else...{
                     tmp[i].delete();
                 }
             }
             dir.delete();
         }
     }
From zhuocheng (cnblogs.com/zhuocheng)

posted @ 2013-11-20 16:46 ZT文萃 阅读(148) | 评论 (0)编辑 收藏

http://kb.cnblogs.com/page/152694/


目录:

  一、引入

  二、经历了就能理解

  三、读书要分级

  四、只读经典

  五、别吝惜你动笔的那点时间

  六、再提笔记

  七、大学课程之授课方法

  八、我是怎么泡图书馆的

  一、引入

  看到这个题目的时候你可能会感到有点好笑:“这还用问,看书就是把书看了一遍呗..” 没错,我们从小到大就是这样想的,也是这样看书的,信手拈来一本叫作"书"的东西,从头到尾就开看了!随时年龄的增长,我们的“阅历”也多了起来了,但你 是不是也有和我一样的感觉——书是读了不少,真正入脑的,能融入自己思想的内容却少之又少,而且随着年头的增加,你越来越不记得自己读过这些书,更不用提 书里到底大概是些什么内容了!这就是我们长久以来的读书方式。。。 你会不会也这样想,如果我能把我从小到大读过的书都能记下来形成自己的思想,那我现在得多牛啊!是呢,我也常常这样想!于是为了让自己更有思想,就去读更 多的书,然后在短短的几年,或者只是几个月,甚至仅仅是几天以后,生活的琐事会渐渐把你关于那些书的缓存挤掉,你的大脑又变成了一块被重新格式化的硬盘, 那些书又与你无关了。

  说实话,我曾经就是这种情况,并且被其深深的困扰过,花了大量的时间去阅读,但是在脑子里留下的却是星星点点的零碎的内容,于是很快这些零星的 内容也会悄悄的跑掉,剩下的只有一个好笑的自欺欺人的解释——这本书我读过。。。就这样,我骗了自己二十几年,这二十几年里,不管是教科书,还是小人书, 不管是专业书,还是小说,真是读了不少书啊!我花了多少时间在这件事上面呢,少说也有二十年吧,可是,要问我对哪本书的内容真的印象最深的,真的很难回答 的出来,更别说去吸取书的精华了。估计和我一样有这样困扰的人肯定很多。你是吗?

  二、经历了就能理解

  我经常会想难道我就真的没有从读书中受益过吗?当然有!“咳,咳。。”我要写条sql去数据库里查一下,数据库里垃圾有点多,估计得花点时 间,“select * from lifecycle where benefit from reading ——>execute!"  (一分钟。。。二分钟。。。五分钟。。十五分钟过去了,数据终于出来了,垃圾数据把系统性能拖的太慢了,是需要作作调优的时候了),好了,你很幸运,系统 没有宕掉,下面这些数据留给你们参考:

  1、我自认为英语水平还凑合,几次重要的升学考试和就业面试中,都没有在英语这块栽过跟头,由于后来集中学习日语的原因,英语过了CET-6后 就很少碰,这个原因我下面会解释。现在很多学生中为英语发愁的不在少数,往往其他各科成绩都很好偏偏英语不能达标,错失了好的升学机会。我回顾自己从小学 英语的经历,总有一个点在那闪光,那是我学习英语的转折点。那时是小学四年级,学校刚刚开设英语课,那时和其他的孩子一样,我的英语成绩不怎么样,很吃 力。我老爸对我的学习比较严格,当他发现我的英语不行的时候,他开始跟我急了,那时我也真怕他,当老子就是威武啊~我爸是高中毕业,他那时的外语水平差不 多也就是我四五年级的那个水平的,但是他还是选择了硬顶上来!他拿出课本让我逐句的翻译对话,我还大概记得那对话的内容:

  A:what's this?

  B: it's a pen.

  A: what's that?

  B: it's a pencile.

  A: and what's this?

  B: it's a pencilebox.

  A: can you spell it ?

  B: yes.p-e-n-c-i-l-e-b-o-x,pencilebox.

  A: thank you.

  B: your welcome.

  熟悉吧?后来还有很多学者指责我国小学英语教材的落俗套,以致学生跟人对话只会说“what's this” “How are you? fine, thank you. and you?” 之类的,这些我们都暂且不谈。就说我那段时间是怎么被老爸蹂躏的吧。。。

  当时有好多的对话内容我翻译不出来,于是就被无情的鄙视了,并且死规定,以后每天晚上都要默写课文、单词!我那时是真怕他呀,为了应付这一关我 是想出了一堆的作蔽手段,小抄、写手上、写桌面上。。。都用过了,每天像过堂一样的接受蹂躏,给我幼小的心灵带来沉重的压力,就这么坚持了有多半年。于 是,后面的事情你们都猜到了,我的英语成绩上来了,随便找出来一篇课文来我都能熟悉的背出来,得到了来自各方面的肯定和鼓励,回头想想,这都是对心理体验 非常好的正能量,直到今天,我都能对英语有信心。从这件事里我总结出一个关键词:“折腾”。

  2、高考的经历。对于都经历过高考的人们,这个艰辛的过程我就不再多多描绘了,地球人都知道的。我在这想说的是,在这个备考的过程中对我进步影 响最大的一个方面,这也是我高考制胜的法宝。那时我有幸和一名来自山东的转校生(也叫高考移民)同桌,他是我高中时期最好的朋友之一,就是他的学习习惯深 深的影响了我,他后来考上了中国公安大学,现在是国家保密机构的人员了,国家机密不多说。他有一个什么习惯呢?做笔记!

  你看到这可能在笑,“原来就是作笔记啊,这谁不知道,谁不作笔记啊”,没错,我们从小都会要求作笔记,有时候我们也会假意的去作一些笔记,但很多的时候是东记一笔,西记一笔,记完就忘了,也找不见了。我说的记笔记不是这种情况。

  在高考那个大环境下,每天我们都会被大量的习题淹没,多的时候每天要做十几张卷子,那时真是麻木了。我的这个朋友就习惯把每次做完的试卷都从头 到尾做个总结,把自己不知道的盲点记在一个本子上,随时翻看。我尝试了这个学习方法后,收效非常大,通过自己的实践也对做笔记有了更深的理解,下面说说我 的理解:

  (1)做笔记一定要找个厚点的本子,品质要好,但不要过于花哨的,简约的最好。因为你要能预见,当你养成这个好习惯以后,你遇到什么新的东西都 想往上面记几笔,如果页数太少了,你又要换个新本,这样就会对你的知识系统产生分隔,你会更偏向于经常翻看新的本子,旧的本子就被你束之高阁起来了,渐渐 那些你曾经领悟的东西又会变的模糊。

  (2)请勿分门别类的记笔记。拿高考这几门课举例,那时我有很多同学的作法是数学一个本,语文一个本,英语一个本,化学一个本。。。基本上是一 门课一个笔记本,分门别类,互不干扰。这样并不是最佳的解决方案。我们俩当时的做法就是所有的内容都记到一个本子上,不分科,新的内容就直接追加到旧的内 容的后面,形式上也不要记的太整齐,形式可以多样,圈圈点点,勾勾叉叉,这样更容易在你的大脑里形成再深的印象,我称之为“草稿式笔记”,比条理清晰的 “流水式”笔记效果好的多。

  (3)经常翻看。记笔记其实是对大脑缓存的一个整理,就好比你存在计算机内存里的内容永远是不稳定的,而你一旦写入硬盘,这个安全性就提高了几 个数量级(对于程序员的你,道理不解释)。同样的道理,你今天对一个问题理解了,但不表明你两天后返回来还能理解到那个程度,最好的办法就是把这个你理解 的问题用自己说话的方式记录下来,并且随时翻看。可以说,只要你的这个本子不丢,你就永远能保持对这个问题的新鲜的理解。以至后来,每每月考、期中、期 末、摸底的所有考试中,我都只需要拿出笔记本来从头到尾翻看几遍,不再需要看书和资料了,很大程度上增强了我的信心,因为没有记在本子上的对我来说都是 “常识”了,所有平时的要点都囊括在笔记本里面了。如果你身边有面临高考的考生的话,请推荐给他们,这个方法会在高考中给他们很大的帮助。

  3、学日语的经历。说来比较幸运,有机会能在大学里系统的学习一门二外。能在大学里学习一门外语确实是很有意义的一件事情,因为我们学习英语的 战线已经有十几年了,但成果不是太显著,而二外作为一门你有选择的有主动性的去学习的一门语言,如果你肯花心思,进步是很快的。我是从大三开始系统学习日 语的,那时刚考完六级,算是完成了阶段性的目标,于是转向日语的学习,恰好赶上学校与某一日企有合作的项目,很幸运的和同专业的几十名同学一起开始学日 语。当时是一个中教讲语法,一个日本外教讲口语,因为学时较紧,所以基本上日语课占用了所有专业课之外的所有课时,一周要上20几个课时的日语。这个过程 持续了一年多。在这一过程中对我来说受益最大的仍然是大量的笔记。“草稿式笔记”又一次发挥了它的神奇效果,我记了两个厚本子,记录了我整个学习语言的过 程,从浅到深,翻翻笔记就能清晰地回忆起自己是怎么一路走过来的。当我有一段时间没有接触日语的时候,如果我想找回一些日语的感觉,我第一选择就是从头到 尾的把笔记本看一遍,一遍看完后我仿佛就回到了以前学习日语时的状态,就像计算机一键还原一样,只有笔记能起到这个作用。

  P.S. 顺便说明一下我为什么学日语的时候就很少去碰英语的东西。语言这东西学的多了真的是容易混,能精通好几国语言的人真的是值得敬佩,这种敬佩不仅仅是语言学 习本身。学了两年的日语以后,口语之类的都练的比较熟悉,因为有外教环境,所以大家平时聊天沟通都得到了很好的锻炼。但是有一次做英语面试的时候,我发现 了一个很严重的问题,我竟然不能说出一整句表达清楚的英文介绍,每句话都不自觉的往外蹦日语,呵呵,英语的思维完全被日语给抑制住了。于是我发现,这两种 语言冲突了,不过为了更好的学日语我就把英语放下了,直接最近的工作需要才再次捡起来,不过还好,把日语先放一放,英语自然就不受影响了。

  4、目前的工作。几个月前换工作到了现在这家外企,外企宽松的环境和人性化的制度让我很快喜欢上了这里,于是我抱定决心要在这里稳定下来,干出 一番事业。从第一天入职我就领到了一个印有公司LOGO的笔记本,现在三个月时间吧,这个本子已经基本用完了。在这个本子上不仅有工作上的事 情,meeting,需求讨论,还有大量的读书笔记,内容十分丰富,但都充实的记录了我的每天的轨迹。这本笔记同样比较“草稿”,但我能真正理解它,它就 像我的一部分大脑一样,我现在走到哪里都会带着这个本子,班车上、轻轨上有大量的时间,拿出本子就好像和自己在对话一样,无比的踏实与充实。

  三、读书要分级

  古人早就说过“开卷有益”,在信息大爆炸的现代社会里,获取知识和信息的方式变的越来越多元化,网络的兴起让知识变的廉价,理想的说一根网线可 以得到这个地球上你想知道的一切。请大家和我一起思考一个问题,不论是以什么样的形式,游戏也好,电影也好,看新闻,刷微博也好,我们的最终目的到底是想 干什么。我的观点是,所有的这些行为总结起来,终极目的只有一个——获取信息。

  回想在还没有Internet的时代里,人们主要获取信息的途径就是读书,这是那时的人们能想到的最直接的选择。而今天的我们选择就多了起来, 读书看起来好像是最慢的一种获取知识的方式了。但是,选择多了就一定是好事吗?科学家证实(我也不知道哪个科学家),选择越多效率越差,因为这增加了你决 策的时间和后悔的理由。先说上网吧,很简单的道理,大家都会经常体验到的,如果你想在网上集中做一件事情,往往是很难的,你会受到来自各个方面的干扰,各 种“信息噪声”向你扑面而来,你常常会被另外的“新鲜”信息中断思路,比如QQ右下角讨厌的重大新闻浮动窗。再比如,如果想在电脑上踏下心来看一本PDF 版的技术书也是很难的,开始可能还好,看上十页二十页以后,眼酸,想睡,看过什么没太深的印象,想干别的,效率很差,我就是这种情况,对需要用电脑阅读的 大段的内容都有抵触的情绪。所以我避免用电脑看一些需要系统理解的东西,因为人有一种心理,就是对于我感到过抵触或厌倦的东西都不想再碰,所以我尽量不用 这种方式去触及那些本身应该对我有很大意义的内容,我怕因为一时的不耐烦导致与这些经典失之交臂。 我的习惯做法还是去阅读实体的书,这给人的感觉是完全不一样的,书的厚度是你可以真切感觉到的,而且,看实体书更容易深入内容,这可能因为人类一直以来的 习惯都是以书为载体来学习,这促成了人脑的进化,人脑也更习惯这种传统的方式。

  这部分的标题叫“读书要分级”,什么叫分级呢,就是读书的深度。

  走进任何一家图书馆,你可能都有冲动要把这里的书全部读掉,可是这显然不现实。

  电视剧《士兵突击》里许三多在团部的知识问答竞赛时,团长问他是怎么知道这么多知识的,许三多说“我这人笨,不知道应该看什么,我就跑到图书 馆,从A开始看,现在才看到D”(大概是这意思,是不是D记不清了)。你说这种人真有吗?有,肯定有,但是这只能是个童话,对于一个现代化的大型图书馆来 说,你就是光把A看完这辈子恐怕也不够用的。所以,面对浩瀚的书海,有选择的读一些经典之作才是明智之举。并不是每一本书对于我们的成长都是至关重要的, 这里有经典,也充斥着垃圾。如果你花了两年读了一堆垃圾书,这样非但无益,反而会害了你。就像老罗曾经说的,他年轻的时候金庸的武侠小说非常火,很多的个 体书商不知名的武侠作者出版的武侠书都署金庸的名,因为那时没有目录嘛,什么“飞雪连天射白鹿, 笑书神侠倚碧鸳”,当时不知道,所以怎么把金庸的书挑出来,很难。

  那怎么把经典的挑出来呢?这就要借助网络了,豆瓣读书是个不错的地方,这里都是一群爱读书的人,你要看的书在这里基本都能找得到,看过的读者会 留下一些感想,如果评价太烂的话,你就应该果断放弃读这本书的想法,因为这可能会浪费你的时间,并且害了你。扯远了,下面开始分级。

  第一级:经典中的经典——能奉为经典的著作不多,对于我们计算机这个领域,耳熟能详的经典也就是那一百多本吧,对于读这些书的态度就应该给予足 够的重视,记笔记是必须的,因为这些思想需要与你的思想融合起来,形成你的理解,从而发挥经典的作用,因为大部分经典之所以长盛不衰就是因为它们都是授人 以渔的。

  第二级:技术类专著——这部分就是指那些资深技术专家,或在某个技术领域比较有建树的行业专家写的书,你选择这些书的目的性更强一些,往往是为 了更深入的了解一种技术或行业而选择的,这部分你当然也要细读,因为技术的难度你更应该用笔记来梳理思路,形成整个技术的框架,这里面应该包括更多的细 节,以助于以后翻阅的时候能理解的更深入。当然,你可以分章节来笔记,这样可以将一个大目标分割成小目标来激励自己去逐项完成。

  第三级:技术基础类——有一些书目涉及的是你已经熟悉的技术领域但比较基础的内容,这些书的内容对你的技术水平来说比较基础,但你也不要忽视这 样的基础书,这里面可能还有你没有吸收过的精髓也说不定。“温故而知新”,永远不要轻视基础,同样拿出你的本子,翻开新页,标上今天的日期,把这书中讲到 的你意识模糊的内容记到你的本子里吧,可能你会发现,你要记的东西还真是不少呢。

  第四级:技术周边类——比如《程序员》杂志、技术博客,这一类的资料也不要看过就扔,不要相信你是过目不忘的大师,你大脑的缓存是有限的,你必须要保存到硬盘!所以拿出你的本!

  第五级:娱乐类——这部分与你的工作没有直接关系,属于你生活的部分,这部分的智慧更多,但是可能会和技术有冲突,所以如果你需要记笔记,请不要记到你记技术和工作的本子上。

  四、只读经典

  代码真的能改变世界,当然代码也正在改变着世界。程序员的时间是很宝贵的,我们不是这个星球上最聪明的一类人,但我们绝对是最有智慧的一类人。呱唧呱唧~

  我们花了大量的时间去做需求,去Design,去Coding,去Testing,留给我们自己的时间却总是那么少,除去日常生活起居的时间, 陪女朋友的时间,上下班的时间,留下读书的时间就没什么了,哦,对,忘了把你打Dota的时间算里了,这还哪有时间看书啊!!??

  当程序员的没有不勤奋的,不勤奋的干不了程序员。所以书还是要看的,怎么看,只读经典。

  关于什么是经典你自己决定咯,在这个圈里吃饭的,对技术都有很强的敏感性,坏书进不了你的眼,好书也一定逃不掉。

  五、别吝惜你动笔的那点时间

  说了这么多,你可能已经意识到做笔记的重要性了,其实事实真的是这样。

  你是否听说过某某大师一生做了几百本的读书笔记这些事,我以前一直有疑惑,他做笔记都是在干嘛呀?都记什么呀,有什么好记的?后来我真正开始做 笔记以后,我才真正理解了这件事,原来大师之所以能成为大师,真的都不是一朝一夕的工夫,这需要持之以恒的坚持和坚定,这内心得多强大呀。你要知道,那几 百本的笔记不只是笔记本那么简单,那些都是思想的沉淀,思想本来是抽象飘渺的,笔记这种形式让思想有了重量和形态,这种思想被组织,重构,索引,最终印到 大脑里形成一座庞大的知识仓库。

  很惭愧,我们国人没有记笔记的这个好习惯,而与我们相对的日本的整体国民,基本上都有记笔记的这个习惯,这是很可怕的。我的日语老师宫竹老师, 她随身都会带有一个笔记本,随时记录所有她认为应该去记的东西,在很多方面我真的非常敬佩她,比如,我们当时有三个专业的大约二百名学生都上她的课,她能 记住所有这些人的姓名,包括中文的和翻译成日文假名的,还不仅如此,其他不学日语的同学,只要与她做过自我介绍的甚至只有一面之缘的,她下次见面一定能叫 出那人的名字,从没出过错。你以为这是她的记性好吗?绝对不是,这源于她记录的习惯,她不当面去记这些人的名字,但她私下肯定去写进本子里。光写进去就万 事大吉了吗,不回头翻看怎么能记得住?这就是笔记的力量。关于日本人的很多好习惯,希望我以后有机会能发篇博客整体谈一下。

  正所谓磨刀不误砍柴功,记笔记可能会影响你读一本书的速度,但它不会让你白读,如果你读书的目的不是想在你脑子里留下点什么的话还不如去看电视 剧,读书就是为了长知识长学问长见识,就是为了将别人好的思想吸取过来,转化成自己的思想体系的一部分,当然,你应该有批判接受这些信息的能力,人云亦云 的完全接受也是不合时宜的。

  我有一个心愿,我渴望能有一天在公交、地铁里看到大家翻看的全是自己的笔记本,而不是一人拿着一个手机在那看微博傻笑!

  六、再提笔记

     对于《到底怎么样才叫看书——上篇》中所提到的内容,得到了各位博友们的普遍认同我感到很高兴,说实话,从小到大我也就认真做过那几次笔记,但是却都印象深刻,并且对以后的影响也很深远,在走了很多的弯路以后,渐渐才发现这其中的道理来。

     正所谓“学而不思则惘”,学的目的当然不是形式上好看,当然,我们从小受应试教育的影响太深,花了太多的时间和精力去学一些根本用不到的东西,这种“形 式”上的学确实也是没有办法。但庆幸的是我们都挺过来了,大学的教育毕竟也是自己完成的,自主性提高了很多,但仍然有很多的在校大学生不清楚自己以后的方 向是什么,大学四年里都是迷茫的,等到工作了一年两年以后,才突然顿悟——原来我在大学里浪费这么多宝贵的时光!如果你还是在校研究生,你会发现那些工作 几年再回去读研的学生中,学习的自主性和目的性有多强,因为他们已经深深的追悔过那段时光,并且看到了未来努力的方向在哪里。这些道理是一直在学校里的人 很难体会的,一切都是“失去了才会珍惜”。

     读书是一个很费时的过程,一本普通的书300多页很正常,软件类的书里1000多页的大部头著作也很常见。不同于小说是纯叙事性的不需要太多的理解,计 算机的书都是需要用大脑去分析和理解的,所以注定了读这些书的速度都不会很快。比如一本300页的书,你用工作之外的时间一共读了7天,实际上到第七天的 时候,你对第一天和第二天所读过的东西已经印象模糊了,这时你会意识到这点并立即返回来再看一遍第一天和第二天的东西吗?很多人不会的,人只会更乐意往前 看,直到看到最后一页才长嘘一口气,“终于看完了”! 于是将书放下,即使以后的几天里,书就摆在那你也想不起来再拿起来翻几下。又过了7天,上周读的内容已经完全印象模糊了。又过了一个月,只有书名还能记 得。。。

     所以,我们花了大量的时间读书,却效果不大,读了后面的扔了前面的,一遍一遍在重复同样的过程,整个过程里,唯独让我们理解最深的时候,就是在阅读的那个 过程当中,那一瞬间的我们对大脑的记忆力保持高度的自信,偏执地认为,将来不论哪个时间,我都将理解到这个程度!事实上,恰恰相反,这只是一个短期的记忆 而已,只能维持几天甚至几小时,就像是硬盘一样,你今天删除了一个文件,第二天作数据恢复仍可以找回来,但两个月以后数据恢复就再也找不回来了,因为新的 文件已经覆盖了那个位置,记忆的信息被冲掉了。笔记的作用更像是一块移动硬盘,你可以在你认为这文件有用的时候,把它转移到移动硬盘里,即使本机硬盘上的 文件被冲掉,你也可以随时读取移动硬盘里的内容。

  你虽然花了时间去读了一本书,但对于这本书可能是你的,也可能不是你的,但如果你对它作了笔记,这本书就百分之百会是你的了。有效读书的过程应该是这样的:

  读书的目的其实最终目的就是形成自己的理解并长期驻存在大脑中,而笔记这个环节是达到这个最终目的最关键的一步。

  七、大学课程之授课方法

     大家都经历过大学,我对大学的感悟最大的就是,每一门课学的最明白的时候就是考试之前的那一周。因为有一个考试的期限在那,就逼着自己在那天之前必须得把课本啃完,把内容梳理出来,这大约只需要一周或更少的几天时间,取决于老师哪天通知考试。

    后来我就常常这样想,大学的课程如果是先考试后上课是不是效率会高很多呢?大学生都有很强的自学能力,突击考试的能力都非常强,几天时间把一门从未学过的 课考个及格应该问题都不大,这就造成了大家平时上课不用功,只等考试突击的号角吹响才进入学习状态。 如果先考试呢,给大家定个及格线,不及格的算挂科,那大家就会玩命的自学一遍,把考试过掉,这时已经对课程的内容理解的比较深刻了,接下来再从头到尾上一 遍课,这就很少会出现有学生因为听不懂而不去听的情况了,大家都会变得愿意听课,并且理解会更进一步,皆大欢喜!可惜啊,大学四年那些课程的价值都为应付 考试而大大缩水了。。   

  八、我是怎么泡图书馆的

  上大学时看到有人说过一句话,“在学校要好好利用图书馆的资源,等你工作以后哪有这么大的图书馆给你用啊!”当时对这句话的印象很深刻,但遗憾 的是,那时并不会泡图书馆,也没有那么深得意识到图书馆的资源是多么得难能可贵。很多真相都是工作以后才后知后觉的,这其实说明了一个道理,人的认知永远 都是只局限于眼前,几年以后回头想想以前的想法只会感到当时是如此幼稚和缺乏思考。

     大家都知道,计算机的书籍一般都比较贵,靠完全买书去提高技术,成本上实在太高。还有一个事实要承认,买来的很多书都想不起来看。在买书时,往往我们都会 有一种冲动,并且有一种心理在作祟——我得到了这本书,就学到了这门技术! 于是,在这样的冲动之下,花了很多冤枉钱买了很多书成了摆设,而技术却没有半点长进。

     所以关于买书,我有两点心得和大家分享:

     1、能不买就不买。 这不是说鼓励大家不读书,反而是为了更有效的读书。古人早就给我们总结了“书非借不能读”,已经是自己的书往往不想读,自认为书就一直在那,我什么时候想 读都能读啊,于是一直没有读。而借来的书,因为有期限要还给人家,你就不得不抽出点时间来把它读完,这样才是真的去读了。并且,如果你是按照上面的流程图 中画的那样作了笔记的话,这本书你虽然形式上是还了,但你却真正的拥有了这本书,永远的拥有了。

     2、三思而后买。 如果这本书你周围借不到,你又想读的话,请在买书之前给自己几天时间的准备。准备什么呢?你应该从各个方面了解一下这书的内容,质量,评价等等,并且能列 出这书非买不可的几个理由,计划一下你拿到这书后的阅读计划等等。为什么要作这些准备呢,这其实是在强化你读书的动机,动机越强你读书的动力越大,效果也 越好,那这本书才不会白读,更不会白买。我给自己的硬性规定是,从我有买书想法的那天起,往后推一周的时间,如果我还是很想买,那就毫不犹豫的出手了!

     3、买了书赶紧看。当你拿到一本新书的时候,这时是你对这本书兴趣最大的时候,也是最冲动的时候,这时候应该尽量的拿出一大块的时间来把这本书一口气看 完,这样能最大程度的激活这本书的价值,而如果一旦搁置下来,下次再翻开它就不一定是什么时候了。“一鼓作气,再而衰,三而竭”,读书也是同样的道 理。    

  对我们程序员来说,图书馆仍然是最好的资源,不但全面而且免费,还能制定一个期限督促自己完成学习,一举N得。我是爱泡图书馆的,而且经常是从 早泡到晚上关门,有时是看图书馆的书,有时候也只是看自己的书,因为图书馆里环境最能让人心静下来,学习看书的效率都很高。不过,我也常常碰到很多过来看 书但是明显是瞎看的读者,这很大程度上还是在浪费时间。举几例:

  1、没有看书的重点,从书架上一取就是五六本,甚至十几本,这时的心理好像是“我拿的多,看的多,学的多,知道的就多”,其实这是完全自欺欺人 的。《上篇》中提到了,一个现代化的图书馆里,你是不可能把每本书都看过来的,你的生命太有限了。像这些取书的人,最后只能是翻翻这个,再翻翻那个,每一 本书都不会看超过五分钟,最后原原本本又抱回来了,白白浪费了生命中的几十分钟,却还感到莫名的充实。。。。 我的方式是只取一本,并且这一本一定是我之前在豆瓣上查看过相关评论的,我认为这本书值得去读才去拿来读的,并且,如果这本书真的是好书,是一定要一口气 看完的,绝不中途去抓另一本书来看,这会严重的影响理解的连续性。

  2、小情侣一起来看书的,完全是浪费时间,并且也影响他人。因为两个人一起来的就会有一种“说话有底气”的心理,所以坐在那就会不自觉的聊天说 话,而不顾周围人的感受,这样的读者我也很不喜欢。所以如果你想带女朋友一起去泡图书馆,请一定要注意别人的感受,那里不是打情骂俏的地方,你去了目的就 是学习,如果有必要可以和女朋友商量分开学习,这样两个人都能充分的利用好在图书馆的那点时间看点东西。

  3、到图书馆来玩手机的。这部分人很多,抱一堆书过去,然后拿出手机来上网发短信听歌的,也许是把书当成了一种心理安慰。这种人也是不应该出现在图书馆的。 

  这其实就是一个动机的问题,动机不纯永远也不可能做到专注。当然,也不能要求人人都有这种专注的性格,也许人家就是来休闲消遣的,没有太多的想 法,这也没错。 对于我来说,因为图书馆离住处不是很近,需要花一定的时间成本到达那个地方,所以,我会对在那的每一分钟都比较珍惜,都是自己选择的嘛, 总得为自己负点责嘛,所以我一般会将手机关机,并且一直坐到图书馆关门才收拾东西往回走。

  最后,《到底怎么样才叫看书》的两篇总算写完了,谢谢各位的支持!对文中偏颇的地方,纯属个人见解,请大家批判接受。

posted @ 2013-11-19 17:06 ZT文萃 阅读(126) | 评论 (0)编辑 收藏


有朋友发了一个关于托福的应考经验,让我这样的英语白痴感到很是佩服,进去发表了一段我硕士研究生入学时候复习英语的感悟,竟然有朋友向我求教,我感到有可能很多朋友在背单词上面有困难,所以把我个人的成功经验向大家分享.
    首先,我不是一个学习的人,对于英语更加厌恶,没有什么好感,大学四级都没过,考研还失败一次,第二次时候无意得一位前辈的经验之谈,感觉可为,故试之,感此乃金玉良言尔.今与众朋友共享.下面是全文,未加任何修改,大家看过之后,我会谈谈我的使用经验.
                                                                                                     以下文字均为他人所有,特此申明
                                                             严格遵照艾兵浩斯遗忘曲线,按照下面文章的做法,除此外别想有什么捷径.

                                                                                                  如何经历“把针磨成铁棒”的杀G岁月



    自从考完GRE和Toefl以后,心有所感,本想写点心得,但是因为太懒没写成。今日风雨如晦,心中又有所感,于是一舒笔墨,写下我学英语的方法。俺知道有很多兄弟姐妹们和曾经的我一样因为英语而郁闷,小小心得,也算造福后人,为自己积累一点功德~~



    2006年除夕夜,俺一个人孤伶伶的在北京表姐家看傻头傻脑的春节联欢晚会,一个人就算了,饭还要自己煮,这不是要了老子小命么。大年夜很是吃了不少快餐面,其中的凄清恶心,不足为外人道也。

    新东方学完,俺回到青岛继续复习GRE。(俺自认为这一段是背单词的好方法之一,大家不妨学一学)在网上找了点GRE单词录音,一面跟着读一面背,一个单 词它读三秒俺就背三秒,背7000个单词每一遍也就5到6个小时的时间,如此重复15遍,记下了50%。剩下50%都是最变态的单词,光是听录音进展太 慢。于是俺还是用最传统的办法,看着英文背中文,光记这最变态的50%。但是每背一个单词不超过5秒钟,所以3500个单词背一遍也就5个小时左右,这样 一遍一遍又一遍,50%变成49%,48%…一直到0%。然后再把以前听录音记下的50%和后面的50%合起来背,大概又背了一两个星期,一本7000多 个恶心的GRE词汇终于背完了(虽然有些词还不太熟,但是总算是背完了)。

    2007年六月,俺到济南考GRE的笔试,无惊无险,平平淡淡,走出考场的那一瞬间,俺对自己说,他娘的以后再也不考这么变态的考试了(反正GRE考完, 人生已经完整)!!两个月后,电话查分,俺的GRE语文考了460(满分800),数学考了790(满分800),作文4分(满分6分)。和牛人比起来 (550以上+800+6),俺的成绩当然不算什么,但是对于俺这个六级考了三次的人来说,已经很满足了。
2005年末,俺开始申请美国学校;2008年4月,俺拿到了美国南密西西比大学的offer!

    2008年6月,适逢研究生毕业兼拿到签证,风雨大作,心有所感,于是在小破屋中写下俺的英语之路,记下自己与英语的恩怨情仇,以俺的吐血吐奶之路,为后人积累一点经验,也作为一份礼物送给自己,以做留念~

总结1:背出来的单词

    不背熟单词就去学所谓的听力阅读作文语法,就像没学走路就想学跑步,没吃饭就想拉屎,没脱牛仔裤就想脱内裤一样的痴心妄想。所以想学英语的人要做的第一件事,不是哭,而是背单词。
本人认为,所谓的“感觉”(特别是做阅读的感觉),说白了就是看背了多少单词,谁认识的单词多谁的“感觉”就好。
    从小就喜欢郭靖,不是因为俺是gay(俺当然不是gay,100%的straight,虽然俺没有女朋友,但这并不能说明俺是gay),而是因为喜欢他的 纯朴憨厚和正直勇敢(得不到的东东总是别人的好,纯朴憨厚正直勇敢是轮不到俺的了,俺向来是真小人,属于富贵——淫,贫贱——移,威武——屈那种)。射雕 英雄传中俺最喜欢的一段就是郭靖在桃花岛上比武追黄蓉那一段,其中他背九阴真经的方法其实相当值得俺们深思。郭靖背九阴真经背了几百遍,他虽然智商不高, 但是情商显然不是一般高。
    很多人听到“背”这个字就傻了眼,因为他们一辈子就没背出过什么东东,听见背字就萎了。俺正好相反,从初考到中考到高考到考研到考博 (GRE&Toefl)全是背出来的,就连数学都是背出来的说。。。(数学怎么背?背公式,背理论,做题时一看到和理论相近的东东就往上套,八九 不离十),听到背字俺就两眼发绿光。很多人抱住俺的大腿痛哭流涕不论俺怎么骂他打他侮辱他他还是不住的狼嚎“我就是背不出来啊啊啊”,俺一听见就知道他在 吹牛。其实背书这个东东,只要有狗的智商,是个人就能背出来。100个单词,背一遍背不下来,背第二遍;背两遍背不下来,背第三遍;背三遍背不下来,背第 四遍。如果你背了一百遍还是背不下来,俺把针磨成铁棒的名字倒过来写(其实读一百遍就能记下来了,记不下来的智商比狗高不了多少)。
    天下间只有创造性的东西是需要智商的,背书这种重复性的东西是不需要智商的(像爱因斯坦爷爷那种人搞的东西叫创造,像学校里的人搞的东西叫重复。)所以每 当听到家长们相互比较哪个哪个孩子聪明俺就来气,不就是哪个哪个家的孩子比较能背嘛,搞到“聪明”那么大,好像真的很聪明似的。
聪明人和傻瓜最 大的区别之一,就是聪明人知道要背什么,怎么背(这是创造性的东西嘛);傻瓜连“背”都不知道,只知道身边有很多聪明人(不少人连自己是傻瓜都不知道)。 郭靖人挺傻的,但是他很听话,别人叫他侠义他就侠义,叫他背书他就背书,所以最后成为一代大侠。有很多人傻就罢了,还不听话,属于死了也是活该。所以如果 你英语不好,不妨把自己当傻瓜,听听高手是怎么背书的(当然俺也不是很高,俺也是当初装傻到新东方听来的)。
    我多年来学英语的经验总结成一句的话:重复是记忆的根本。回想一下我们的怎么学习中文的?当你还在摇篮当中,妈妈让你叫“妈妈”,你就会叫了吗?不是,你 能说出“妈妈”二字,是你爸爸妈妈重复了千百遍的结果。这两个字经过不断的重复,始在你心中成为你自己的“语言”。我叫你背英语,就是要把这个记忆的过程 强行在短时间内再现,把尽量多的东西融入你脑子里成为你自己的东西。中国的英语教育之所以这么失败,就是能明白这个“重复是记忆的根本”的人太少,能将之 用于实践的人就更少。毕竟有“郭靖”的智商的人很多,有“郭靖”的傻劲的人却太少。
    既然重复是记忆的根本,那么怎么重复法?以下有几个例子,你可以看看哪种比较有前途:
    A学生背单词,背了一个月,兴高采烈的对我说:“俺终于把C部分(注,26个字母中的C开头的单词)背完了!!!”我问他怎么背的,他说是一个一个单词的读英文背中文,一直到记住为止;
    B学生背单词,背了一个月,狂笑着对我说:“俺终于把核心词汇背完了!!!”我问他怎么背的,他说是一个一个单词的写,每个单词写二十遍;
    C学生背单词,背了一个月,热泪盈框着对我说:“俺终于把核心词汇背完了!!!”我问他怎么背的,他说是背句子背的,核心词汇一共1500个,每个词汇找了一个相关的句子,把词汇放在语境中,更好记忆;
    D学生背单词,背了一个月,很苦的对我说:“俺还是有很多单词没记住。”我问他怎么背的,他说读英文背中文,每个单词背五秒,背完所有单词(假设7000个)要10个小时。每两天背一遍,但是还有50%的单词记不住。
    各位看官猜一猜,以上哪个学生最有前途?哪个学生最没前途?答案:任何一个上过新东方的人都会告诉你,D学生最有前途,因为他的办法是最有效的。
By the way,以上所有方法本人都干过。
    分析:本人估计,中国至少有一半学生是按照A学生的办法背单词的,嘿嘿,真理往往不在多数人手中,所以A学生是最没前途的。大家想像一下,考起试来他认识 多少单词?他显然只认识以ABC头的单词,考起试来死路一条。也许有人会骂俺,说如果A同学坚持背下去,当他背完整本单词,他不就是高手了吗?我可以告诉 你,他绝对坚持不下去。事实上很多学生都是这样,背了很长时间也就ABCD几个字母的页面是黄色的,其他字母的页面都是崭新(也有人有点小聪明从Z开始 背,因为后面的字母单词少。但是结果是一样一样的,因为当他们背到T的时候就不行了,以T开头的单词多嘛)。他们都坚持不下去,理由其实相当简单,因为要 背一遍单词书要花很多个月的时间,谁能坚持下去啊?
    B和C学生显然比A要聪明一点,因为考试的时候最常用的就是核心词汇,考起试来至少不会碰到ABC以外的词汇就傻眼。但是他们的方法都有问题,问题就是背 一遍花的时间太长了,B用写的,C用句子,都是变相的增加了背的时间。而且考试时碰到非核心词汇,一样会死得很惨。
    之所以说D最有前途,是因为他掌握了记忆的根本——重复,而且重复得相当的合理。什么是合理?7000个单词一起重复就是合理。像A学生一样是部分的重 复,效果太差,效率也太差。就算A学生背到了k部分,他前面背的ABC也会忘掉。所以最合理的背书准则就是:在最短的时间内过最多的遍数(所有单词背完一 次称为一遍)。任何背单词的方法,只要符合这个准则,就是好方法。所以A用的方法不是好方法,因为他背一遍所有的单词要用很长时间,而且是部分重复。B和 C用的方法也不是好方法,因为变相增加了背的时间,也属于部分重复。只有D的方法符合这个准则,时间最短——“两天过一遍”,遍数最多——“一个月背了 15遍”。D之所以说还有50%的单词记不住,原因就是他过的遍数还不够多。只要他再继续个10遍8遍的,必有小成。
    D的方法是好方法,但是会有一种错觉,那就是:一个单词背5秒,100个单词就是500秒,约等于8分钟,8分钟内记100个单词,对很多人来说似乎是不 可能是事。实际上,8分钟内记100个单词,对所有人来说都是不可能的事情。再说得明白一点,当你背完一遍,7000个单词你能记住的只有4个。。。(也 许有的人想踢我,但是俺堂堂党员,怎么会吃饱了没事干来玩你呢,你又不是美女。。。不要急嘛。)背第一遍也许你只能记住4个,但是还有第二遍呢,第二遍也 许只能记住8个,第三遍就不一样了,记住的词会以指数增长,所以这个方法最大的困难就是前面几遍能记住的单词实在太少,给人一种痛苦的感觉,但是背到8遍 以上,就会渐入佳境(认识的词多了就爽了)。所以每背一遍,记得把认识的词圈起来,以增加成就感和自豪感。到20遍以后,7000多个单词至少能认识 50%,此时背一遍用的时间大大缩短,有50%的单词只要一见到就认识,自然就不是一个单词5秒,而是一个单词小于1秒了(当然另外的50%还是要背5秒 的说)。
    有人做过统计,同样一份英语试卷,美国人来做要30分钟,中国人来做要2个小时。为什么?中国人比较蠢吗?当然不是,美国人比中国人蠢多了,但是他们看到 母语,不用在心里进行翻译,速度当然比兔子还快。那要怎么办才变成兔子?当然就是尽量缩短要在心中翻译英文的时间了。那么如何缩短翻译的时间?7000个 单词背上一百遍,绝对能变成兔子。其实背到一定遍数,很多单词在心中就不用再翻译了,就像见到How are you一样,有没有人在心中对其进行翻译啊?(How are you还用翻译,就像见到老婆还要看看结婚证才能确定是不是自己老婆一样。)达到不用翻译的境界,自然就变成兔子了。
7000多个单词,其实就 是7000个人的名字。智者见智,淫者见淫,对俺来说就是7000个小妞的名字(对于不少女性淫者来说,自然就是7000个帅哥的名字)。想要说出 7000个美女的名字,光简单的介绍一遍,即使是世界第一号大色狼也做不到,但是只要大家多见面,多培养感情,自然就会眉来眼去,暗送秋波。熟极而流 (氓),古人诚不欺我也。(不知道这一段有没有人看得懂,看不懂就算了,不要胡思乱想,说俺教坏小朋友)。
    话说回来,不是每个人都有时间背100遍单词的,大家都很忙嘛(学习政治数学物理化学是忙,打打电脑游戏泡泡妞也是忙,反正大家都很忙)。但是背100遍 没时间,总也要挤点时间背他20遍吧?用俺的话来说,背单词,20遍始为小成,40遍是为中成,60遍即为大成,至于100遍者,就成为美国人了。如果你 单词背了60遍,仍然没成为高中英语的顶尖高手,你可以手持菜刀来找我,俺让你在雪白的大腿在砍九九八十一刀。
    告诉大家一个小诀窍,GRE单词覆盖所有Toefl单词,Toefl单词覆盖所有六级单词,六级单词覆盖所有四级单词,四级单词覆盖所有高中单词(甚至包 括很多出现在阅读的怪词)。所以如果你是高中英语中的低手,可以扔开你的课本,开始背四级单词,20遍以后,你就能成为高中英语能手,40遍以后,你就是 高中英语高手,60遍以后,你就是高中英语的顶尖高手。
    最后,俺总结一下以上背单词的方法,给各位看得傻了眼的人一点容易看懂的东西:
    背单词的理论:重复是记忆的根本。
    背单词的方法准则:在最短的时间内过最多的遍数(所有单词背完一次称为一遍)。任何背单词的方法,        只要符合这个准则,就是好方法。
    背单词的方法:收集高中所有单词(大概也有四五千个吧,其实可以直接背四级单词),读着英文背中文,一个单词背5秒,背完所有单词一遍大概6、7个小时 (其实根本用不着那么多时间,很多单词都是认识的,认识的单词只要不到1秒钟),最好每天背一遍,不行就每两天一遍(三天以上就是失败!),大概一个月到 一个半月的时间就能完成20遍,20遍以后背一遍的时间大大缩短,两个小时背一遍一点问题也没有。这样两个月就能背至少40遍。此后不要停止背单词,每天 至少抽出半个小时狂背,切记切记,否则后果严重(停止背书单词会忘得很快)。此法最适合假期进行,如果有课,那么就很难说了,要讲讲策略,鱼和熊掌不可兼 得,说不得只好放弃某些课来背单词。英语作为一门不用智商只用苦工就能提高成绩的考试,值不值得你暂时放弃某些课程,就看你到底是不是真的聪明了。而且只 用一个半月,一个半月以后就不用每天几个小时几个小时的硬干了,因为20遍后背一遍根本不用几个小时,1个半到2个小时完全够了;40遍后每天只用半个小 时,上厕所的时候带一本单词书进去蹲久一点不就搞定了。这个方法虽然开始挺苦,但是一旦挺过一个半月,自然就会明白重复是记忆的根本这一最简单不过的道 理,对于任何一个科目的学习都是受益终身。

总结2:背出来的听力
    正如上面说的一样,有一些单词是不需要头脑进行翻译的,比如说Hello、How are you 等,听到就知道是问候语,不用在心里翻译成“你好”才知道是什么意思。有一些单词则需要翻译才行,比如说cruise,cruise control,甚至有些人看到都不知道是什么意思,更别提翻译了。所以俺把英语单词分为两种,一种是听力词汇,一种是书面词汇。听到就知道是什么意思不 需要在脑子里进行翻译的是听力词汇;听到以后要在脑子里进行翻译的甚至翻译都翻译不出的是书面词汇。一个人的听力强弱取决于他的听力词汇的多少。练习听力 的过程实际上就是把尽量多的书面词汇转化为听力词汇的过程。
中国人的听力向来很差,缺少语言的环境,又没有适当的学习方法,以致很多高中生大学 生听力很烂。俺的听力曾经也很烂,虽然在骨子里感觉似乎很有语言天赋,但是听力还是很烂,从小学一直烂完大学,想练,不知道怎么练法。俺的听力大跃进时期 开始于准备Toefl的时候。当时从师兄那骗来一本Toefl听力的书,照着练了一下,茅厕顿开,自此一发不可收拾。说白了其实很简单:别人说了一句英 语,你为什么听不懂?不就是因为你听不懂句子里的单词嘛。所以要练听力,先背单词,单词背的遍数一够,自然就不需要在脑子里进行翻译了。练习Toefl听 力之前俺一做听力题就傻眼,听一遍啥也听不懂,感觉和傻瓜一样。后来一翻那本Toefl听力书,上面列了Toefl听力常用语汇(包括词组)大概600多 个,背了几遍,立刻听力水平大涨,于是如遇至宝,狂背30遍(600个单词,用俺上面的方法,背一遍只用一个小时,一天背三遍,10天背30遍小 case),于是听力提升得咣咣的。
    回想初中高中大学练习听力,毫无章法可循,老师总说多听自然听力就好了,一上听力课抓着大家狂听稀奇古怪的东西,方法没错,可惜太慢,这就是泛听的弊端, 听得虽然多,但是效果太差,正如一句老话:混身是刀,没有一把利。听得再多,不认识的单词还是不认识,怎么练都是白搭。建议所有高中英 语老师上听力课用3/4的时间让学生背听力常用词汇(听力常用词汇去哪里找?当然是做老师的来找来总结了,不然要老师来干什么,整天打开录音机和学生一起 听听力那不叫老师,叫陪读),只用1/4的时间来听录音。
    有些同学盲目的把多听听力就会好放在第一位,每天走路吃饭上厕所都在用mp3听英语,实际上对于英语低手来说有害无益。本来就听不懂,还要狂听,时间一长 必然走神,走神走得习惯了,以后考起试来就光走神,不做题了。这是泛听的另一个弊端,损坏注意力。如果你听力不好,不要泛听,要先背单词,然后精听!什么 叫精听?找一篇听力文章,认真的听,重复的听,听不懂的句子找出原文看懂,所有听不懂的单词列成一个表,然后再听,一直到文章中每一个句子都听懂为止。然 后再找第二篇文章(最好是不同种类的文章),重复以上步骤,一直到每一个句子都听懂为止。以10篇文章为一个复习点,复习的时候先背原来列出来的听不懂的 词汇,背熟了以后再回去从第一篇文章开始循环听,仍然是以听懂每一个句子为目标,只要有一个句子不懂就不要开始听其他的东东!当你能做到10篇文章每个句 子都能听懂的时候,你就得到了你听力的第一笔财富,这个时候你就可以走路吃饭上厕所用mp3听了,但是只限这10篇文章!得到了第一笔财富,再谋第二笔、 第三笔财富(但是不要忘了经常复习第一笔财富,忘了复习就是丢了钱),财富积累到一定程度,量变就会转化为质变,你就会成为听力高手。
    俺的听力第二次飞跃是看Friends(中文译名:六人行)看的。Friends是美国近几十年来最出名的肥皂剧,一共播了10年,全球有上亿的观众。 Friends改变了美国一代人的英语,说的是最标准的美国英语,最精纯的美国幽默。原来听说央视要引进,后来据说审片的时候没审过,太多的sex话题。 俺和所有正义的大学同学一起大骂央视三个月,“泰坦尼克号”上半裸和小车上sex镜头倒是播个不亦乐乎,来一点sex话题好像能把中国颠覆一样(后来想了 想可能是央视的人不喜欢sex的话题,因为不够过瘾,一定要真刀真枪的干的东东他们才能播)。其实中国这一代的孩子,只怕早就已经被灯红酒绿光怪陆离的社 会玷污了,再播个friends也不见得能让孩子纯多少,白白放过了一个刺激中国孩子学英语的机会,打着精神文明的牌子把无数英语人才扼杀在摇篮之中,也 算是“造福后人”了。幸好还有网络这种东西,无数盗版电影电视满足了广大喜爱英语的有为青年(没有正版的大家只好看盗版的,可不是俺鼓动祖国花朵支持盗 版)。有了Toefl听力的底子,Friends很容易听懂。Friends一共10季,大概240集,俺至今看了不下7遍,熟悉的程度已经达到剧中人物 说第一句话俺就知道下一句话是什么的地步。听得多了(当然是有了一定单词量和听力的底子后),听力自然就牛了。我刚到美国与人说话不行,但是听力却基本没 什么问题,Friends至少有一半的功劳。By the way,俺有Friends的电子剧本,任何想练friends听力的同学均可与俺联系,俺的email附在文章结尾。

最后总结一下练听力的方法:
    找一篇听力文章,认真的听,重复的听,听不懂的句子找出原文看懂,所有听不懂的单词列成一个表,然后再听,一直到文章中每一个句子都听懂为止。然后再找第 二篇文章(最好是不同种类的文章),重复以上步骤,一直到每一个句子都听懂为止。以10篇文章为一个复习点,复习的时候先背原来列出来的听不懂的单词,背 熟了以后再回去从第一篇文章开始循环听,仍然是以听懂每一个句子为目标,只要有一个句子不懂就不要开始听其他的东东!当你能做到10篇文章每个句子都能听 懂的时候,你就得到了你听力的第一笔财富,这个时候你就可以走路吃饭上厕所用mp3听了,但是只限这10篇文章!得到了第一笔财富,再谋第二笔、第三笔财 富(但是不要忘了经常复习第一笔财富,忘了复习就是丢了钱),财富积累到一定程度,量变就会转化为质变,你就会成为听力高手。考试之前不妨多背一背积累下 来的听力词汇(就是听每一篇文章列出来的听不懂的单词),不失为临时抱佛脚的法门。

总结3:背出来的阅读
    阅读说白了就是比谁认识的单词多,虽然有些不认识的单词可以从上下文进行理解,但是文中关键的词汇不认识,往往成为阅读的致命伤。因此想要提高阅读水平, 最有效的方法不是多读,而是背尽量多的单词(单词掌握到一定程度,多读才有效果)。正如我上面所说,四级单词覆盖所有高中英语单词(有些怪词可能覆盖不 到,这些就必须靠上下文理解了),用俺上面的方法把四级单词背20遍,即可成为高中英语阅读能手,40遍可成为高手,60遍即可成为顶尖高手。
可以告诉各位一个检查阅读能力的方法:随机找一篇英语文章,读完以后圈出不认识的句子,然后检查不认识这些句子的原因,如果是单词不懂,说明你要多背单词,如果是单词懂但句子不懂说明你要多读。
总结就免了,这么简单的方法还总结什么呢~

总结4:背出来的作文
    读书破万卷,下笔如有神。从小所有人都把这句话当耳边风,没办法,原来世上本没有耳边风,说的人多了,自然就成为耳边风了。不过这句话放在英语作文上还真 不灵,要改成“背书破万卷,下笔如有神”才灵。因为看的英文文章再多,到写的时候照样一句都模仿不出来,毕竟不是自己的语言么。
我知道很多人会 说“又是背,而且还是背文章,你不如kill me now”。但是这绝对是写英语作文最有效的方法。大家可以做一个实验,不用你们背书万卷,只要背上两三篇文笔出众的英文文章,你立刻可以一跃成为高中英语 作文的高手。当然是要背得熟极而流,没有半分窒滞。否则上到考场上还要想一句写一句,还不如自己编,以免牛头不对驴嘴笑掉考官大牙。
    那么背英文文章的方法呢?谁问这个问题谁就该被踹屁股。“重复是记忆的根本”,你以为俺是说着玩的么?其实背英文文章比背单词要容易得多,有意义的东西 (句子)比没意义的东西(单词)要易记得多。背的时候一段一段的背,每一段重复上10遍其实就很熟了,背熟一段(达到脱口而出的境界)再背下一段,一篇文 章很快就背完了,此后走路上厕所的时候没事背一背,也比没事yy有追求得多。

总结5:背出来的口语
    口语本应该是说出来的,奈何中国没有这样的语言环境。有些同学喜欢搞英语角,但是一般都是以How are you、Fine, and you、Where are you from、How old are you开始,以I hate my mother (father)、I hate my English teacher、My teacher failed me again结束,说来说去都是这些无聊的东东,一点创意也没有,每换一个人就要把这些无聊的东东再重复一次,重复到没话说了又要再重复一遍,感觉累得要 死。特别是两个口语特蹩脚的家伙凑一起,两个人操着两口恶心的中国英语比谁更恶心。
所以在没有语言环境的环境下练口语,还不如自己在家里背上1500词的自我介绍,背熟了再去英语角恶心没背过自我介绍的家伙来得方便快捷。背完1500词转身就走,回家再背另外1500词,多么的行云流水挥洒自如玉树临风风流涕淌。
    其实口语这种东西,背得熟了自然就成了自己的,成了自己的对着别人的时候就可以编了。回想当初学普通话的时候还不是听老妈说“乖乖叫妈妈”才会叫“老 妈”,听老妈叫老爸“老公”多了才会对女朋友说“老婆”的么。口语,先偷别人的,再混合着自己的个性说出来,自然就是原创。
背什么比较好?不要 背同学的,也不要自己编,去背Friends的剧本吧,正宗的美国幽默,地道的美国英语,纯正的美国口音,还有什么比这个更臭美的?但是不要贪多误得,先 背一集的剧本先,背到能出口就是突突突突打机关枪一样的流畅再背下一集。背到三集以上(俺现在也就背了两集,一直没时间背),你就是中国人中的英语口语高 手了。

语法

    俺的语法并不好,现在也还是一样不好,因为到了大学以对语法的强调就少了。至今还没想出语法可不可以通过背来解决,但是背的句子多了,估计语法也不会差到哪里去。。。而且英语的语法并不多,复杂的不会就算了,简单的顶天也就十几二十种,多练习几次,自然就会了~

结束语
    以上是俺学英语的历史和经验总结。其实对英语的喜爱才是支持一个人学习英语的原动力,所以培养和英语的感情是至关重要的。如何培养?所有的喜爱以及所有的 实力全部全部源于背单词。就算你原来对英语憎之入骨恨不得喝其血啃其骨,一本几千个单词的单词书背了20遍后,你也一定会爱上这门只用牛劲不用智商的课 程。毕竟日久则情生,只要是心智正常的人类,又怎能免俗?
正如俺在msn日记中所说:英语是背出来的,但是“不用担心背的过程无聊,一个剧本背上二十遍以后,自然就会背出快感来,因为每说一句话都是那么的迅捷,那么的精彩,那么的天下无敌。”

                                                                                                                                                完毕
                      ,谈谈我的经历,考研单词差不多是6000多吧,充满电的MP3一个,随便什么单词书一本,必须有录音,准备好一大瓶茶水,找个上厕所方便的地方,最好在 教学楼附近,然后开始吧,早早的站个好位置,听吧,从第一单元听到最后一个单元,录音说一遍,你就说一遍,所以你马上就会口感舌燥的,喝水吧,喝多了你要 上厕所,哈哈,知道我为啥要让你准备水和离厕所近的地方了吧,这样差不多也得4个多小时才能把这些单词搞完,如果您想记得狠一点,100遍完整的跟读是必 须的,我当时是记了60遍完整的,然后每天就听一半,听一半时候不读,就坐着听,轻松多了,后来都听的恶心了,但是效果出奇的好,到最后考研前,基本上 90%的单词是记住了,50%的会写,因为考研只要求认识,不要求你写,所以我没做更近一步的强化,对了,我现在在听一部叫走遍美国的口语短剧,不错,口 语和听力都还可以练习,如果有需要,可以去下载,,就这么多,我第一次发帖,不知道这种帖子是否违反草榴版规,如果违反,版主大人删除了就可以了,不要禁 言扣分了,小弟马上摆脱新手上路,嘿嘿,望多关照

posted @ 2013-11-17 00:20 ZT文萃 阅读(222) | 评论 (0)编辑 收藏

      1、我自己当年,无论我在方正给国家打工,还是我在雅虎给外国人打工,我都跟别人最大的不一样,我从来不觉得我在给他们打工,我真的可能是很有自信 的人,我觉得我在为自己干。因为我干任何一件事我首先考虑的是,我通过干这件事我能学到什么东西,学到的东西是别人剥夺不走的,客观上可能给公司创造了价 值。

  2、一件事交给我我应付一下,很容易应付,应付完了之后不觉得是在浪费生命吗?一件事你可以把它做到 60 分,你可以做的很轻松,做完了你每天重复每天干三个小时活就完了,然后你天天上班没事,然后你回家三十亩地一头牛老婆孩子热炕头,但你怎么进步呢?人的进 步离开了学校之后,学习不再是上课也不是读书,通过你在工作中通过你做事情做项目积累自己的经验,跟很多人打交道。因为我有不服输的性格,再普通的事我要 做的比别人好,大家做的很普通我要做的跟大家不一样,要做到超出大家想象要花很多时间很多努力,但我最后发现我的收获最大的,因为我下了功夫,你的收获和 你的投入是成正比的。

  3、如果你混日子,对不起,实际上你是混自己,在很多大的公司混的很多,你能黑老板多少钱吗?你一年年薪 10 万,中低层收入你在单位混 10 年也就混老板 100 万,对很多公司来说有人混我 100 万对公司伤害不了哪去,可是你十年不好好工作,荒废了十年,十年可能突然有一天公司倒闭了,或者发现你这个混混把你开掉了,你怎么办呢?你觉得你有竞争力 吗?这个社会除非你有一个好爸爸,或者你有一个家族,这个不在咱们考虑之列,这不是我的哲学。

  4、你只要是白手打天下,你最后发现在社会上,这个社会越来越公正,我认为机会还是很多,你不要天天去愤青,去骂别人,至少有了互联网有了 IT,你看丁磊、马化腾、李彦宏都是平头百姓,他们在这个行业能成功,说明什么?说明只要你努力你也有机会成功,百度、谷歌还有 QQ 的很多员工,我们不提李彦宏,不提大佬们。他们公司很多员工参与这件事也很成功,有很多在北京买车、买房有成就感,这些东西靠什么?还是靠你能力的积累。

  5、我觉得在公司,真不喜欢这个公司,不喜欢老板,赶快辞职,一分钟也别见到他,我就这个风格。何必为了老板的错误耗费自己的生命,如果你今天 决定你又不离开在公司做工作,我觉得你应该把工作做好。有人说有几种问题,我有个性我不爱干这个,我说大哥,个性是成功人士的专利,你成功你当然觉得有个 性,别人看着你,你没有成功之前个性能换房子吗?如果个性能换房子,我比你有个性,我们全家有个性,但它换不了一个房子。

posted @ 2013-11-15 08:35 ZT文萃 阅读(155) | 评论 (0)编辑 收藏

    本文由xyz8808贡献
    2009-11-26 12:49//定义变量
    public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
    static int hKeyboardHook = 0;
    HookProc KeyboardHookProcedure;
    /*************************
    * 声明API函数
    * ***********************/
    // 安装钩子 (using System.Runtime.InteropServices;)
    [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]
    public static extern int SetWindowsHookEx(int idHook,HookProc lpfn, IntPtr hInstance, int threadId);
    // 卸载钩子
    [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]
    public static extern bool UnhookWindowsHookEx(int idHook);
    // 继续下一个钩子
    [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)]
    public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
    // 取得当前线程编号(线程钩子需要用到)
    [DllImport("kernel32.dll")]
    static extern int GetCurrentThreadId();
    //钩子子程:就是钩子所要做的事情
    private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
    {
    if (nCode >= 0)
    {
    /****************
    //线程键盘钩子判断是否按下键
    Keys keyData = (Keys)wParam;
    if(lParam.ToInt32() > 0)
    {
    // 键盘按下
    }
    if(lParam.ToInt32() < 0)
    {
    // 键盘抬起
    }
    ****************/
    /****************
    //全局键盘钩子判断是否按下键
    wParam = = 0x100 // 键盘按下
    wParam = = 0x101 // 键盘抬起
    ****************/
    KeyMSG m = (KeyMSG) Marshal.PtrToStructure(lParam, typeof(KeyMSG));//键盘
    // 在这里添加你想要做是事情(比如把键盘nCode记录下来,搞个邮件发送程序发到自己的邮箱去)
    return 0;//如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者
    }
    return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
    }
    //键盘结构
    public struct KeyMSG
    {
    public int vkCode; //键值
    public int scanCode;
    public int flags;
    public int time;
    public int dwExtraInfo;
    }
    // 安装钩子
    public void HookStart()
    {
    if(hKeyboardHook == 0)
    {
    // 创建HookProc实例
    KeyboardHookProcedure = new HookProc(KeyboardHookProc);
    // 设置线程钩子
    hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);
    //************************************
    //键盘线程钩子
    //SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId()); //GetCurrentThreadId()为要监视的线程ID,你完全可以自己写个方法获取QQ的线程哦
    //键盘全局钩子,需要引用空间(using System.Reflection;)
    //SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);
    //
    //关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数:
    //idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13,
    //线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。
    //
    //lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可
    //以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。
    //
    //hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子程代码位于当前
    //进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。
    //
    //threadedId 与安装的钩子子程相关联的线程的标识符。如果为0,钩子子程与所有的线程关联,即为全局钩子。
    //************************************
    // 如果设置钩子失败
    if(hKeyboardHook == 0 )
    {
    HookStop();
    throw new Exception("SetWindowsHookEx failed.");
    }
    }
    }
    // 卸载钩子
    public void HookStop()
    {
    bool retKeyboard = true;
    if(hKeyboardHook != 0)
    {
    retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
    hKeyboardHook = 0;
    }
    if (!( retKeyboard))
    throw new Exception("UnhookWindowsHookEx failed.");
    }
    //*****************************
    试用了一下,不是很稳定,改回自带的 KeyUp函数了,记录以备查
    //自定义类型
    public enum HookType
    {
    WH_KEYBOARD = 2
    }
    public delegate int HOOKPROC(int nCode, int wParam, int lParam);
    //接口调用
    [DllImport( "User32.DLL ")]
    public static extern int SendMessage(IntPtr hWnd, uint Msg,int wParam,int lParam);
    [DllImport("kernel32")]
    public static extern int GetCurrentThreadId();
    [DllImport("User32.Dll")]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport( "user32",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
    public static extern int SetWindowsHookEx(HookType idHook,HOOKPROC lpfn,int hmod,int dwThreadId);
    [DllImport("user32.dll", CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
    public static extern int CallNextHookEx(int idHook, int nCode,int wParam,int lParam);
    //函数实现
    public void SetHook()
    {
    SetWindowsHookEx(HookType.WH_KEYBOARD,
    new HOOKPROC(this.MyKeyboardProc),
    0,
    GetCurrentThreadId());
    }
    public int MyKeyboardProc(int nCode, int wParam, int lParam)
    {
    IntPtr ParenthWnd = new IntPtr(0);
    bool isPressed = (((lParam & 0x80000000) == 0) && (nCode==0));
    CallNextHookEx(m_HookHandle, nCode, wParam, lParam); //先把消息发给系统默认处理队列
    global.lastKeyValue = wParam;
    ParenthWnd = FindWindow( null,"零售业务");
    switch(wParam)
    {
    case 112: //修改数量 F1
    if(isPressed)
    {
    inputType = global.ST_NUM_STP1;
    doKeyWork();
    }
    break;
    case 113: //备注 F2
    if(isPressed)
    {
    inputType = global.ST_REMARK;
    textBoxBZ.Focus();
    textBoxBZ.SelectAll();
    }
    break;
    case 114: //摘要 F3
    if(isPressed)
    {
    inputType = global.ST_ABST;
    textBoxZY.Focus();
    textBoxZY.SelectAll();
    }
    break;
    case 115: //支付 F4
    if(isPressed)
    if((global.saleList == null) || (global.saleList.Length == 0))
    break;
    else
    {
    showProductInfo();
    labelCPZS.Text = global.sAllNum.ToString() + " 件";
    labelYSJE.Text = global.sAllValue.ToString() + " 元";
    labelYHJE.Text = global.sPriValue.ToString() + " 元";
    labelSSJE.Text = global.sDueValue.ToString() + " 元";
    inputType = global.ST_GATHER_STP1;
    textBoxSK.Focus();
    textBoxSK.SelectAll();
    }
    break;
    case 116: //输入产品 F5
    if(isPressed)
    {
    inputType = global.ST_PRODUCT;
    textBoxSPMC.Focus();
    textBoxSPMC.SelectAll();
    }
    break;
    case 117: //开始新订单 F6
    if(isPressed)
    {
    resetSale(); //销售界面复位
    }
    break;
    default:
    //CallNextHookEx(m_HookHandle, nCode, wParam, lParam);
    break;
    }
    return(0);
    }
    ///
    /// 清理所有正在使用的资源。
    ///
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if(components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }
    C#中键盘钩子的使用
    默认分类 2008-07-05 17:33 阅读53 评论0 字号: 大大 中中 小小 public class Win32Hook
    {
    [DllImport("kernel32")]
    public static extern int GetCurrentThreadId();
    [DllImport( "user32",
    CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
    public static extern int SetWindowsHookEx(
    HookType idHook,
    HOOKPROC lpfn,
    int hmod,
    int dwThreadId);
    public enum HookType
    {
    WH_KEYBOARD = 2
    }
    public delegate int HOOKPROC(int nCode, int wParam, int lParam);
    public void SetHook()
    {
    // set the keyboard hook
    SetWindowsHookEx(HookType.WH_KEYBOARD,
    new HOOKPROC(this.MyKeyboardProc),
    0,
    GetCurrentThreadId());
    }
    public int MyKeyboardProc(int nCode, int wParam, int lParam)
    {
    //在这里放置你的处理代码 return 0;
    }
    }
    使用方法
    可以在Form的构造函数里放入
    Win32Hook hook = new Win32Hook();
    hook.SetHook();
    C#+低级Windows API钩子拦截键盘输入
    www.diybl.com 时间:2010-01-14 作者:匿名 编辑:Smi1e 点击: 9 [评论]
    -
    -
    摘要 在家里,婴儿和其它动物可能会重击你的计算机键盘,致使出现各种无法预言的结果。本文中的这个C#示例应用程序将向你展示如何基于Windows钩子API来实现在击键造成任何危害之前捕获它们。
    一. 简介
    猫和婴儿有很多共同之处。他们都喜欢吃家中养植的植物,都非常讨厌关门。他们也都爱玩弄你的键盘,结果是,你正发送给你的老板的电子邮件可能是以半截句子发送出去的,你的Excel帐户也被加入了一些乱七八糟的内容,并且你还没有注意到,当打开Windows资源管理器时,若干文件已经被移到了回收站!
    其解决方案是,开发一个应用程序实现如下功能:只要键盘处于"威胁状态"你就可以进行切换,并确保任何键盘输入活动都不会造成危害。本文想展示如何使用一种低级Windows API钩子在一个C#应用程序中实现键盘"控制"。下图是本文示例程序的一个运行快照。
    二. 背景
    其实,已经存在许多有关于Windows钩子的文章和示例代码,并且已经有人编写过与本文几乎一样的C++示例程序。然而,当我搜索相应的C#应用程序的源码时,却找到极少的.NET示例,而且没有一个程序能够提供一个方便的自包含的C#类。
    .NET框架能够使你以托管方式来存取你最常使用的键盘事件(通过KeyPress,KeyUp和KeyDown)。遗憾的是,这些事件都不能被用来停止Windows组合键(如Alt+Tab或Windows"开始"键),从而允许用户"远离"某一个应用程序。
    本文的想法在操作系统级上捕获键盘事件而不是通过框架级来实现。为此,应用程序需要使用Windows API函数来把它自身添加到应用程序"钩子链"中以监听来自操作系统的键盘消息。当它收到这种类型的消息时,该应用程序能够选择性地传递消息,或者进行正常处理,或者"镇压"它以便不再有其它应用程序(包括Windows)来影响它。本文正是想解释其实现机理。
    然而,请注意,本文中的代码仅适用于基于NT版本的Windows(NT,2000和XP),并且无法使用这个方法来停用Ctrl+Alt+Delete。有关于如何实现这一点,你可以参考MSDN有关资料。
    三. 使用代码
    为了易于使用,我在本文中提供了两个独立的zip文件。一个仅包含KeyboardHook类,这是本文介绍的重点。另一个是一个完整的微软Visual C# 2005 Express Edition应用程序工程,名叫"Baby Keyboard Bash",它实现显示击键的名字或彩色的形状以响应于击键。
    四. 实例化类
    键盘钩子是通过keyboard.cs中的KeyboardHook类来建立和管理的。这个类实现了IDisposable接口,因此,实例化它的最简单的方法是在应用程序的Main()方法中使用using关键字来封装Application.Run()调用。这将确保只要该应用程序开始即建立钩子并且,更重要的是,当该应用程序结束时立即使这个钩子失效。
    这个类引发一个事件来警告应用程序已经有键被按下,因此主表单能够存取在Main()方法中创建的KeyboardHook实例就显得非常重要;最简单的方法是把这个实例存储在一个公共成员变量中。
    KeyboardHook提供了三种构造器来启用或禁用某些设置:
    · KeyboardHook():捕获所有击键,没有任何内容传递到Windows或另外的应用程序。
    · KeyboardHook(string param):把参数串转换为Parameters枚举中的值之一,然后调用下面的构造器:
    · KeyboardHook(KeyboardHook.Parameters enum):根据从Parameters枚举中选择的值的不同,分别启动下列设置:
    o Parameters.AllowAltTab:允许用户使用Alt+Tab切换到另外的应用程序。
    o Parameters.AllowWindowsKey:允许用户使用Ctrl+Esc或一种Windows键存取任务栏和开始菜单。
    o Parameters.AllowAltTabAndWindows:启用Alt+Tab,Ctrl+Esc和Windows键。
    o Parameters.PassAllKeysToNextApp:如果该参数为true,那么所有的击键将被传递给任何其它监听应用程序(包括Windows)。
    当击键继续被键盘钩子捕获时,启用Alt+Tab和/或Windows键允许实际使用该计算机者切换到另一个应用程序并且使用鼠标与之交互。PassAllKeysToNextApp设置有效地禁用了击键捕获;这个类也是建立一个低级键盘钩子并且引发它的KeyIntercepted事件,但是它还负责把键盘事件传递到另一个监听程序。
    因此,实例化该类以捕获所有击键的方法如下:
    public static KeyboardHook kh;
    [STAThread]
    static void Main()
    {
    //其它代码
    using (kh = new KeyboardHook())
    {
    Application.Run(new Form1());
    }
    五. 处理KeyIntercepted事件
    当一外键被按下时,这个KeyboardHook类激活一个包含一些KeyboardHookEventArgs的KeyIntercepted事件。这是通过一个KeyboardHookEventHandler类型的方法使用以下方式来实现的:
    kh.KeyIntercepted += new KeyboardHook.KeyboardHookEventHandler(kh_KeyIntercepted);
    这个KeyboardHookEventArgs返回关于被按下键的下列信息:
    · KeyName:键名,通过把捕获的键代码强制转换为System.Windows.Forms.Keys而获得。
    · KeyCode:由键盘钩子返回的原来的键代码
    · PassThrough:指出是否这个KeyboardHook实例被配置以允许该击键传递到其它应用程序。如果你想允许一用户使用Alt+Tab或 Ctrl+Esc/Windows键切换到其它的应用程序的话,那么对之进行检查是很有用的。
    然后,使用一个具有适当签名的方法来执行击键所调用的任何任务。下面是一个示例片断:
    void kh_KeyIntercepted(KeyboardHookEventArgs e)
    {
    //检查是否这个键击事件被传递到其它应用程序并且停用TopMost,以防他们需要调到前端
    if (e.PassThrough)
    {
    this.TopMost = false;
    }
    ds.Draw(e.KeyName);
    }
    本文的剩下部分将解释低级键盘钩子是如何在KeyboardHook中实现的。
    六. 实现一个低级Windows API键盘钩子
    在user32.dll中,Windows API包含三个方法来实现此目的:
    · SetWindowsHookEx,它负责建立键盘钩子
    · UnhookWindowsHookEx,它负责移去键盘钩子
    · CallNextHookEx,它负责把击键信息传递到下一个监听键盘事件的应用程序
    创建一个能够拦截键盘的应用程序的关键是,实现前面两个方法,而"放弃"第三个。结果是,任何击键都只能传递到这个应用程序中。
    为了实现这一目标,第一步是包括System.Runtime.InteropServices命名空间并且导入API方法,首先是SetWindowsHookEx:
    using System.Runtime.InteropServices
    ……
    //在类内部:
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook,
    LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
    导入UnhookWindowsHookEx和CallNextHookEx的代码请见后面的讨论。
    下一步是调用SetWindowsHookEx来建立钩子,这时需要传递下列四个参数:
    · idHook:
    这个数字决定了要建立的钩子的类型。例如,SetWindowsHookEx可以被用于钩住鼠标事件(当然还有其它事件)。在本文情况下,我们仅对13有兴趣,这是键盘钩子的id。为了使代码更易读些,我们把它赋值给一个常数WH_KEYBOARD_LL。
    · Lpfn:
    这是一个指向函数的长指针,该函数将负责处理键盘事件。在C#中,"指针"是通过传递一个代理类型的实例而获得的,从而使之引用一个适当的方法。这是我们在每次使用钩子时所调用的方法。
    这里值得注意的是,这个代理实例需要被存储于这个类的一个成员变量中。这是为了防止一旦第一个方法调用结束它会被作为垃圾回收。
    · hMod:
    建立钩子的应用程序的一个实例句柄。我找到的绝大多数实例仅把它设置为IntPtr.Zero,理由是不大可能存在该应用程序的多个实例。然而,这部分代码使用了来自于kernel32.dll的GetModuleHandle来标识准确的实例从而使这个类更具灵活性。
    · dwThreadId:
    当前进程的id。把它设置为0可以使这个钩子成为全局构子,这是相应于一个低级键盘钩子的正确设置。
    SetWindowsHookEx返回一个钩子id,这个id将被用于当应用程序结束时从钩子链中脱钩,因此它需要存储在一个成员变量中以备将来使用。KeyboardHook类中的相关代码如下:
    private HookHandlerDelegate proc;
    private IntPtr hookID = IntPtr.Zero;
    private const int WH_KEYBOARD_LL = 13;
    public KeyboardHook()
    {
    proc = new HookHandlerDelegate(HookCallback);
    using (Process curProcess = Process.GetCurrentProcess())
    using (ProcessModule curModule = curProcess.MainModule)
    {
    hookID = SetWindowsHookEx(WH_KEYBOARD_LL, proc,GetModuleHandle(curModule.ModuleName), 0);
    }
    }
    七. 处理键盘事件
    如前面所提及,SetWindowsHookEx需要一个到被用来处理键盘事件的回调函数的指针。它期望有一个使用如下签名的函数:
    LRESULT CALLBACK LowLevelKeyboardProc( int nCode,WPARAM wParam,LPARAM lParam);
    其实,建立一个函数指针的C#方法使用了一个代理,因此,向SetWindowsHookEx指出它需要的内容的第一步是使用正确的签名来声明一个代理:
    private delegate IntPtr HookHandlerDelegate(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam);
    然后,使用相同的签名编写一个回调方法;这个方法将包含实际上处理键盘事件的所有代码。在KeyboardHook的情况下,它检查是否击键应该被传递给其它应用程序并且接下来激发KeyIntercepted事件。下面是一个简化版本的不带有击键处理代码的情况:
    private const int WM_KEYDOWN = 0x0100;
    private const int WM_SYSKEYDOWN = 0x0104;
    private IntPtr HookCallback(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam)
    {
    //仅为KeyDown事件过滤wParam,否则该代码将再次执行-对于每一次击键(也就是,相应于KeyDown和KeyUp)
    //WM_SYSKEYDOWN是捕获Alt相关组合键所必需的
    if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN))
    {
    //激发事件
    OnKeyIntercepted(new KeyboardHookEventArgs(lParam.vkCode, AllowKey));
    //返回一个"哑"值以捕获击键
    return (System.IntPtr)1;
    }
    //事件没有被处理,把它传递给下一个应用程序
    return CallNextHookEx(hookID, nCode, wParam, ref lParam);
    }
    接下来,一个到HookCallback的参考被指派给HookHandlerDelegate的一个实例并且被传递到SetWindowsHookEx的调用,正如前一节所展示的。
    无论何时一个键盘事件发生,下列参数将被传递给HookCallBack:
    · nCode:
    根据MSDN文档,回调函数应该返回CallNextHookEx的结果,如果这个值小于零的话。正常的键盘事件将返回一个大于或等于零的nCode值。
    · wParam:
    这个值指示发生了什么类型的事件:键被按下还是松开,以及是否按下的键是一个系统键(左边或右边的Alt键)。
    · lParam:
    这是一个存储精确击键信息的结构,例如被按键的代码。在KeyboardHook中声明的这个结构如下:
    private struct KBDLLHOOKSTRUCT
    {
    public int vkCode;
    int scanCode;
    public int flags;
    int time;
    int dwExtraInfo;
    }
    其中的这两个公共参数是在KeyboardHook中的回调方法所使用的仅有的两个参数。vkCoke返回虚拟键代码,它能够被强制转换为System.Windows.Forms.Keys以获得键名,而flags显示是否这是一个扩展键(例如,Windows Start键)或是否同时按下了Alt键。有关于Hook回调方法的完整代码展示在每一种情况下要检查哪些flags值。
    如果flags提供的信息和KBDLLHOOKSTRUCT的其它组成元素不需要,那么这个回调方法和代码的签名可以按如下进行修改:
    private delegate IntPtr HookHandlerDelegate(
    int nCode, IntPtr wParam, IntPtr lParam);
    在这种情况中,lParam将仅返回vkCode。
    八. 把击键传递到下一个应用程序
    一个良好的键盘钩子回调方法应该以调用CallNextHookEx函数并且返回它的结果结束。这可以确保其它应用程序能够有机会处理针对于它们的击键。
    然而,KeyboardHook类的主要功能在于,阻止击键被传播到任何其它更多的应用程序。因此它无论在何时处理一次击键,HookCallback都将返回一个哑值:
    return (System.IntPtr)1;
    另一方面,它确实调用CallNextHookEx-如果它不处理该事件,或如果重载的构造器中的使用KeyboardHook传递的参数允许某些组合键通过。
    CallNextHookEx被启用-通过从user32.dll导入该函数,如下列代码所示:
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private
    static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
    IntPtr wParam, ref KeyInfoStruct lParam);
    然后,被导入的方法被HookCallMethod所调用,这可以确保所有的通过钩子接收到的参数被继续传递到下一个应用程序中:
    CallNextHookEx(hookID, nCode, wParam, ref lParam);
    如前面所提及,如果在lParam中的flags是不相关的,那么可以修改导入的CallNextHookEx的签名以把lParam定义为System.IntPtr。
    九. 移去钩子
    处理钩子的最后一步是使用从user32.dll中导入的UnhookWindowsHookEx函数移去它(当破坏KeyboardHook类的实例时),如下所示:
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);
    既然KeyboardHook实现IDisposable,那么这可以在Dispose方法中完成。
    public void Dispose()
    {
    UnhookWindowsHookEx(hookID);
    }
    hookID是构造器在调用SetWindowsHookEx所返回的id。这将从钩子链中删除应用程序。
    c#键盘钩子
    作者: lzh 类别: C#/VB 日期: 2003-5-27 22:22:19
    You can use system hook to hook any messages send to the application.
    Hooking the keyboard (WH_KEYBOARD) and mouse (WH_MOUSE) messages can be
    used to determine if the user interactive with the computer. You also can
    hook all the messages (WH_GETMESSAGE). The hook can be set with this code:
    public class Win32Hook
    {
    [DllImport("kernel32")]
    public static extern int GetCurrentThreadId();
    [DllImport( "user32",
    CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
    public static extern int SetWindowsHookEx(
    HookType idHook,
    HOOKPROC lpfn,
    int hmod,
    int dwThreadId);
    public enum HookType
    {
    WH_GETMESSAGE = 3
    }
    public delegate int HOOKPROC(int nCode, int wParam, int lParam);
    public void SetHook()
    {
    // set the keyboard hook
    SetWindowsHookEx(HookType.WH_GETMESSAGE,
    new HOOKPROC(this.MyKeyboardProc),
    0,
    GetCurrentThreadId());
    }
    public int MyKeyboardProc(int nCode, int wParam, int lParam)
    {
    //Perform your process
    return 0;
    }
    }
    Then you can install the hook procedure by the following code:
    Win32Hook hook = new Win32Hook();
    hook.SetHook();
    用钩子(hook)实现C#的屏幕键盘效果
    -
    SVN技术网 www.svn8.com 2010-01-20 08:38:02 来源:bbs.svn8.com 作者:佚名 点击:158次
    文章摘要:用钩子(hook)实现C#的屏幕键盘效果 要实现一个屏幕键盘,需要监听所有键盘事件,无论窗体是否被激活。因此需要一个全局的钩子,也就 是系统范围的钩子。 什么是钩子(Hook) 钩子(Hook)是Windows提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先启动的函数,用来检查和修改传给该程序的信息,(钩子)
    -
    使用完钩子后,要进行卸载,这个可以写在析构函数中。
    12 public void Stop() {3 this.Stop(true, true, true);4 }5 6 public void Stop(bool uninstallMouseHook, bool uninstallKeyboardHook, 7 bool throwExceptions) {8 // if mouse hook set and must be uninstalled9 if (hMouseHook != IntPtr.Zero && uninstallMouseHook) {10 // uninstall hook11 bool retMouse = UnhookWindowsHookEx(hMouseHook);12 // reset invalid handle13 hMouseHook = IntPtr.Zero;14 // if failed and exception must be thrown15 if (retMouse == false && throwExceptions) {16 // Returns the error code returned by the last unmanaged function 17 // called using platform invoke that has the DllImportAttribute.18 // SetLastError flag set. 19 int errorCode = Marshal.GetLastWin32Error();20 // Initializes and throws a new instance of the Win32Exception class 21 // with the specified error. 22 throw new Win32Exception(errorCode);23 }24 }2526 // if keyboard hook set and must be uninstalled27 if (hKeyboardHook != IntPtr.Zero && uninstallKeyboardHook) {28 // uninstall hook29 bool retKeyboard = UnhookWindowsHookEx(hKeyboardHook);30 // reset invalid handle31 hKeyboardHook = IntPtr.Zero;32 // if failed and exception must be thrown33 if (retKeyboard == false && throwExceptions) {34 // Returns the error code returned by the last unmanaged function 35 // called using platform invoke that has the DllImportAttribute.36 // SetLastError flag set. 37 int errorCode = Marshal.GetLastWin32Error();38 // Initializes and throws a new instance of the Win32Exception class 39 // with the specified error. 40 throw new Win32Exception(errorCode);41 }42 }43 }44
    将这个文件编译成一个dll,即可在应用程序中调用。通过它提供的事件,便可监听所有的键盘事件。
    但是,这只能监听键盘事件,没有键盘的情况下,怎么会有键盘事件?其实很简单,通过SendInput
    API函数提供虚拟键盘代码的调用即可模拟键盘输入。下面的代码模拟一个 KeyDown 和 KeyUp 过程,
    把他们连接起来就是一次按键过程。
    1 private void SendKeyDown(short key) {2 Input[] input = new Input[1];3 input[0].type = INPUT.KEYBOARD;4 input[0].ki.wVk = key;5 input[0].ki.time = NativeMethods.GetTickCount();67 if (NativeMethods.SendInput((uint)input.Length, input, Marshal.SizeOf(input[0])) 8 < input.Length) {9 throw new Win32Exception(Marshal.GetLastWin32Error());10 }11 }1213 private void SendKeyUp(short key) {14 Input[] input = new Input[1];15 input[0].type = INPUT.KEYBOARD;16 input[0].ki.wVk = key;17 input[0].ki.dwFlags = KeyboardConstaint.KEYEVENTF_KEYUP;18 input[0].ki.time = NativeMethods.GetTickCount();1920 if (NativeMethods.SendInput((uint)input.Length, input, Marshal.SizeOf(input[0]))21 < input.Length) {22 throw new Win32Exception(Marshal.GetLastWin32Error());23 }24 }
    自己实现一个 KeyBoardButton 控件用作按钮,用 Visual Studio 或者 SharpDevelop 为屏幕键盘设计 UI,然后
    在这些 Button 的 Click 事件里面模拟一个按键过程。
    12 private void ButtonOnClick(object sender, EventArgs e) {3 KeyboardButton btnKey = sender as KeyboardButton;4 if (btnKey == null) {5 return;6 }78 SendKeyCommand(btnKey);9 }10 11 private void SendKeyCommand(KeyboardButton keyButton) {12 short key = keyButton.VKCode;13 if (combinationVKButtonsMap.ContainsKey(key)) {14 if (keyButton.Checked) {15 SendKeyUp(key);16 } else {17 SendKeyDown(key);18 }19 } else {20 SendKeyDown(key);21 SendKeyUp(key);22 }23 }
    其中 combinationVKButtonsMap 是一个 IDictionary>, key 存储的是VK_SHIFT, VK_CONTROL 等组合键的键盘码。左右两个按钮对应同一个键盘码,因此需要放在一个 List 里。
    标准键盘上的每一个键都有虚拟键码( VK_CODE)与之对应。还有一些其他的常量,
    把它写在一个静态 class 里吧。
    1 // KeyboardConstaint.cs2 internal static class KeyboardConstaint {3 internal static readonly short VK_F1 = 0x70;4 internal static readonly short VK_F2 = 0x71;5 internal static readonly short VK_F3 = 0x72;6 internal static readonly short VK_F4 = 0x73;7 internal static readonly short VK_F5 = 0x74;8 internal static readonly short VK_F6 = 0x75;9 internal static readonly short VK_F7 = 0x76;10 internal static readonly short VK_F8 = 0x77;11 internal static readonly short VK_F9 = 0x78;12 internal static readonly short VK_F10 = 0x79;13 internal static readonly short VK_F11 = 0x7A;14 internal static readonly short VK_F12 = 0x7B;1516 internal static readonly short VK_LEFT = 0x25;17 internal static readonly short VK_UP = 0x26;18 internal static readonly short VK_RIGHT = 0x27;19 internal static readonly short VK_DOWN = 0x28;2021 internal static readonly short VK_NONE = 0x00;22 internal static readonly short VK_ESCAPE = 0x1B;23 internal static readonly short VK_EXECUTE = 0x2B;24 internal static readonly short VK_CANCEL = 0x03;25 internal static readonly short VK_RETURN = 0x0D;26 internal static readonly short VK_ACCEPT = 0x1E;27 internal static readonly short VK_BACK = 0x08;28 internal static readonly short VK_TAB = 0x09;29 internal static readonly short VK_DELETE = 0x2E;30 internal static readonly short VK_CAPITAL = 0x14;31 internal static readonly short VK_NUMLOCK = 0x90;32 internal static readonly short VK_SPACE = 0x20;33 internal static readonly short VK_DECIMAL = 0x6E;34 internal static readonly short VK_SUBTRACT = 0x6D;3536 internal static readonly short VK_ADD = 0x6B;37 internal static readonly short VK_DIVIDE = 0x6F;38 internal static readonly short VK_MULTIPLY = 0x6A;39 internal static readonly short VK_INSERT = 0x2D;4041 internal static readonly short VK_OEM_1 = 0xBA; // ';:' for US42 internal static readonly short VK_OEM_PLUS = 0xBB; // '+' any country4344 internal static readonly short VK_OEM_MINUS = 0xBD; // '-' any country4546 internal static readonly short VK_OEM_2 = 0xBF; // '/?' for US47 internal static readonly short VK_OEM_3 = 0xC0; // '`~' for US48 internal static readonly short VK_OEM_4 = 0xDB; // '[{' for US49 internal static readonly short VK_OEM_5 = 0xDC; // '\|' for US50 internal static readonly short VK_OEM_6 = 0xDD; // ']}' for US51 internal static readonly short VK_OEM_7 = 0xDE; // ''"' for US52 internal static readonly short VK_OEM_PERIOD = 0xBE; // '.>' any country53 internal static readonly short VK_OEM_COMMA = 0xBC; // ',<' any country54 internal static readonly short VK_SHIFT = 0x10;55 internal static readonly short VK_CONTROL = 0x11;56 internal static readonly short VK_MENU = 0x12;57 internal static readonly short VK_LWIN = 0x5B;58 internal static readonly short VK_RWIN = 0x5C;59 internal static readonly short VK_APPS = 0x5D;6061 internal static readonly short VK_LSHIFT = 0xA0;62 internal static readonly short VK_RSHIFT = 0xA1;63 internal static readonly short VK_LCONTROL = 0xA2;64 internal static readonly short VK_RCONTROL = 0xA3;65 internal static readonly short VK_LMENU = 0xA4;66 internal static readonly short VK_RMENU = 0xA5;6768 internal static readonly short VK_SNAPSHOT = 0x2C;69 internal static readonly short VK_SCROLL = 0x91;70 internal static readonly short VK_PAUSE = 0x13;71 internal static readonly short VK_HOME = 0x24;7273 internal static readonly short VK_NEXT = 0x22;74 internal static readonly short VK_PRIOR = 0x21;75 internal static readonly short VK_END = 0x23;7677 internal static readonly short VK_NUMPAD0 = 0x60;78 internal static readonly short VK_NUMPAD1 = 0x61;79 internal static readonly short VK_NUMPAD2 = 0x62;80 internal static readonly short VK_NUMPAD3 = 0x63;81 internal static readonly short VK_NUMPAD4 = 0x64;82 internal static readonly short VK_NUMPAD5 = 0x65;83 internal static readonly short VK_NUMPAD5NOTHING = 0x0C;84 internal static readonly short VK_NUMPAD6 = 0x66;85 internal static readonly short VK_NUMPAD7 = 0x67;86 internal static readonly short VK_NUMPAD8 = 0x68;87 internal static readonly short VK_NUMPAD9 = 0x69;8889 internal static readonly short KEYEVENTF_EXTENDEDKEY = 0x0001;90 internal static readonly short KEYEVENTF_KEYUP = 0x0002;9192 internal static readonly int GWL_EXSTYLE = -20;93 internal static readonly int WS_DISABLED = 0X8000000;94 internal static readonly int WM_SETFOCUS = 0X0007;95 }
    文章来自[SVN中文技术网]转发请保留本站地址:http://www.svn8.com/dotnet/Csharp/2010012018328_2.html
    C#中键盘钩子的使用(转)
    public class Win32Hook
    {
    [DllImport("kernel32")]
    public static extern int GetCurrentThreadId();
    [DllImport( "user32",
    CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
    public static extern int SetWindowsHookEx(
    HookType idHook,
    HOOKPROC lpfn,
    int hmod,
    int dwThreadId);
    public enum HookType
    {
    WH_KEYBOARD = 2
    }
    public delegate int HOOKPROC(int nCode, int wParam, int lParam);
    public void SetHook()
    {
    // set the keyboard hook
    SetWindowsHookEx(HookType.WH_KEYBOARD,
    new HOOKPROC(this.MyKeyboardProc),
    0,
    GetCurrentThreadId());
    }
    public int MyKeyboardProc(int nCode, int wParam, int lParam)
    {
    //在这里放置你的处理代码 return 0;
    }
    }
    使用方法
    可以在Form的构造函数里放入
    Win32Hook hook = new Win32Hook();
    hook.SetHook();

posted @ 2013-11-14 07:56 ZT文萃 阅读(950) | 评论 (0)编辑 收藏

http://wuqinzhong.blog.163.com/blog/static/45222312009101711583439/

c#键盘钩子  

2009-11-17 11:58:34|  分类: C# |字号 订阅

c#键盘钩子:

    public class Win32Hook
    {

        [DllImport("kernel32")]
        public static extern int GetCurrentThreadId();

        [DllImport("user32",CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern int SetWindowsHookEx(HookType idHook, HOOKPROC lpfn, int hmod, int dwThreadId);
        [DllImport("user32", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern int CallNextHookEx(int hhk,int nCode,int wParam,int lParam);
        [DllImport("user32", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern bool UnHookWindowsHookEx(int hhk);

        public enum HookType
        {
            WH_KEYBOARD = 2
        }

        public delegate int HOOKPROC(int nCode, int wParam, int lParam);
        public int hhk;

        public void SetHook()
        {
            // set the keyboard hook
            hhk = SetWindowsHookEx(HookType.WH_KEYBOARD, new HOOKPROC(this.MyKeyboardProc), 0, GetCurrentThreadId());
        }

        public int MyKeyboardProc(int nCode, int wParam, int lParam)
        {
            //在这里放置你的处理代码
            int iresult = 0;
            if (nCode<=0)
            {
                iresult = CallNextHookEx(hhk, nCode, wParam, lParam);
                return iresult;
            }
            if ((wParam >= 48 && wParam<=57)||(wParam >= 65 && wParam<=90)||(wParam >= 97 && wParam<=122))
            {
                Form1.rrrr += Convert.ToChar(wParam);
                return 0;
            }

            return 0;
        }
        public bool UnHook()
        {
           return UnHookWindowsHookEx(hhk);
        }

    }

使用:

Win32Hook hook = new Win32Hook();
            hook.SetHook();

            this.richTextBox2.Text = rrrr;
            hook.UnHook();

参考:http://baike.baidu.com/view/1208620.htm

使用参照:http://www.codeproject.com/KB/system/globalsystemhook.aspx

             (adamhtmei)

posted @ 2013-11-13 14:21 ZT文萃 阅读(204) | 评论 (0)编辑 收藏

11月6日,东吴证券从15个角度分析认为A股后市堪忧。

  第一点,东吴证券认为,年线 MACD死叉预示长期趋势看空。“首先从年线上看,A股大盘从1990年开市,首次出现年线MACD死叉,这预示A股中长期走势很弱。什么叫MACD死 叉?MACD的白线在黄线之上,它向下走与黄线交叉那个叉,就是死叉,表示应该考虑卖出股票。因此从MACD上看,大盘中长期走势不容乐观。”

  东吴证券称,第二点,高低点位置预示多方无力做多。今年最高点是年初的2444点,然后是2334点,接着是2270点,最后是2242点。“从高点上看,高点的位置是不断下移的,每一波的高点都比前一波低,这预示着多方无力做多。”

   东吴证券指出,第三点为市场资金面紧张将制约股指上攻。“当前,中国经济回升势头仍不明确,外围需求缺乏强劲的增长动力。为刺激经济发展,货币政策需要 一定程度的相对宽松。因此,我们判断未来央行逆回购的规模和力度仍将相对较小。四季度市场资金面可能一直处于比较紧张的状态。”

  第四点,重要均线揭示A股后市堪忧。从A股开市至今的23年中,如果A股跌破60日均线,平均跌幅达到7%左右,因此从历史统计上看,A股后市不容乐观。

  第五点,市场观点接近一致预示A股将下跌。当市场的评论人士对于A股的观点趋于一致时,市场往往会产生反转。

   第六点,见底形态不支持1849见底。东吴证券认为,从底部形态上看,最牢固的是圆弧底,其次是头肩底,再接着是双重底(又称W底),最后是V形反转。 “而我们可以看到1849是一根单针见底的K线,在技术面上叫做长尾线,又称螺旋桨K线形态,符合了V形反转的形态,这种形态往往是很不牢固的。历史的特 大底部,如325、512、998、1664等特大底部,从来都没有以V形反转的形态形成特大底部,因此从历史见底的规律上看,本轮的上涨应该只是反弹, 而绝非反转。”

  第七点,1849当日放量说明未见底。“从历史的特大底部上可以看到,任何一个底部所形成的当日成交量是缩量的,这是 因为空方主力杀跌的动能已经衰竭。而我们可以看到1849点形成当日,成交量是放量的,而股市里也有一句古话,叫‘放量不是底’,因此从成交量角度 看,1849点当日空方力量并未耗尽,在后期跌破概率较大。”

  第八点,神奇均线揭示A股未入牛市。东吴证券认为,在A股历史行情 中,156均线与321均线发生死叉后,往往会出现反弹,但是在反弹后都会把前期底部都砸掉,最慢的一次花了13个月时间!而目前大盘是在6月25号出现 1849底部的,据今已经过去了五个月不到,并且156均线也和321均线形成死叉,并在死叉后果真出现反弹。因此,从长期均线角度看,大盘跌破1849 点只是时间问题,跌破概率极大。

  第九点,断头闸刀形态预示A股中长线走坏。东吴证券称,在同一天内,一根阴线跌破5、10、30日三 根均线的形态,这就叫做断头闸刀形态。在10月23日,大盘出现了断头闸刀形态,这种形态的出现,这种断头闸刀形态的出现本身就是少之又少,但是一旦出 现,往往接下来就是一波夕阳西下的杀跌行情。

  第十点,箱体理论预示A股后期堪忧。东吴证券指出,箱体理论计算是一种可以准确预测大盘 中长期的运行趋势点位的一种简易方法。具体的方法有很多种,其中一种就是前低点乘以后高点再除以前高点,往往是后期大盘的第一目标位。目前,把1849乘 2270再除2334,得出1798点,因此从箱体理论上看,大盘跌破1849点概率还是较大的,A股后期堪忧。

  第十一点,量价理论 不支持A股走牛。“量无阴阳,只有大小。成交量的量柱在指数或个股中是从相对的低位开始逐渐满足135日均量线并超越135日均量线的时候,我们可以判断 是一轮上涨趋势的信号。反之,成交量的量柱是从相对高位开始逐渐萎缩并开始不满足135日均量线的时候,我们可以判断是一轮下跌趋势的信号。(相对的高位 是指上涨幅度达到50%以上,相对的低位是指下跌幅度达到50%以上)。目前大盘的成交量尚未超过前期1849点上升时的量能,而且量能没有一直满足 135均线量,没有形成堆量形态,因此从量价理论上看,大盘并未走牛。”

  第十二点,股票价格不支持A股见底。东吴证券指出,每次大盘跌到特大底部后,市场上的股票价格往往会跌到5元以下,而1849点形成时,股票的价格主要是在5-10元区间,并没有落到5元以下区间。因此从价格区间上看,大盘并未见底。

  第十三点,板块未同时见底说明大盘未见底。“每次大盘跌到特大底部后,往往板块会同时见底,而1849点见底后,还有些中小板**和创业板**股票在高位运行,因此从板块看,大盘未见底。”

   第十四点,高中物理斜率知识预示A股未走牛。“我们在高一上物理课时,物理老师曾经给我们讲过斜率的知识。同理,我们将其应用于股市之中,如果股票上升 的角度太过于平缓,往往这种股票很容易横盘整理,没多大前途。如果股票上升的角度是很陡峭的,那么往往会涨的快跌的也快。可以看到,大盘在往2270点上 攻时,上攻角度达到接近80度左右,预示大盘的上涨很难有持续性。最佳的上攻角度应该是45度左右,这种持续性往往会比较高。”

  第十 五点,撬动牛市的支点远未到来。东吴证券认为,估值与业绩走牛是推动牛市到来的支点。“估值与业绩是推动股价运行的两个最主要因素。从影响市场的主要因素 来看,产能过剩阴影压抑了目前库存周期回补力度,而PPI与企业资产负债表数据也显示目前企业层面盈利改善能力提升仍然需要等待,更多的企业特别是周期类 企业处于艰难的去杠杆、去产能阶段。”

posted @ 2013-11-06 18:07 ZT文萃 阅读(144) | 评论 (0)编辑 收藏

http://article.pchome.net/content-1409199.html

在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有 修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间, 这个基本不太可能。

与文件相关的几个时间:

1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。

2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。

3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。

比如: [jing@zhjh c]$ stat temp.c

引用:

File: 'temp.c'

Size: 66 Blocks: 8 IO Block: 4096 u4e00u822cu6587u4ef6

Device: 807h/2055d Inode: 1191481 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 500/ jing) Gid: ( 500/ jing)

Access: 2008-03-12 20:19:45.000000000 0800

Modify: 2008-03-12 20:19:45.000000000 0800

Change: 2008-03-12 20:19:45.000000000 0800

说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。

posted @ 2013-10-24 14:17 ZT文萃 阅读(430) | 评论 (0)编辑 收藏

http://www.ordosgo.cn/ordos-27-45011-1.html

http://www.sbanzu.com/topicdisplay.asp?BoardID=11&Page=1&TopicID=4075907
女子遭奸杀肢解千里抛尸,死者隆胸硅胶成破案关键。在经典的推理小说中,大侦探们说:“每一个细微的结果,都必定有一个特定的原因,那就是真相。”凶手残忍分尸并千里抛尸,正当案情扑朔迷离之际,死者隆胸的一块硅胶最终成为破案的关键。

这绝对是一起可以用“丧心病狂”来形容的案件。凶手残忍分尸并千里抛尸,正当案情扑朔迷离之际,死者隆胸的一块硅胶最终成为破案的关键。在经典的推理小说中,大侦探们说:“每一个细微的结果,都必定有一个特定的原因,那就是真相。”

 死者头部被水泥浇筑,藏匿在凶手家中。   这绝对是一起可以用“丧心病狂”来形容的案件。凶手残忍分尸并千里抛尸,正当案情扑朔迷离之际,死者隆胸的一块硅胶最终成为破案的关键。在经典的推理小说中,大侦探们说:“每一个细微的结果,都必定有一个特定的原因,那就是真相。”
  发现尸块
  两名渔民打渔至鹿屿岛附近,发现距离岸边不远处漂浮着一个大箱子,一浮一沉。严密的封锁似乎向人们暗示,箱子内藏着重大的秘密。
  在汕头市汕头港湾内,有一座小岛叫鹿屿岛。这座面积只有13万平方米的小岛没有居民,只有海事部门的航标人员长期驻守在这里。鹿屿岛上的老灯塔至今已有130多年历史,是我国目前保存较好的百年灯塔之一。
   今年6月30日,天气晴好。为避免夏天的烈日,渔民们往往清晨出海打渔。上午6点多,朝阳已经斜斜地铺在海面上,波光鳞鳞。两名渔民打渔至鹿屿岛附近, 发现距离岸边不远处有漂浮着一个大箱子,一浮一沉。两名渔民揉揉眼睛,确定那是一个大号的行李箱。他们兴奋地驾船过去,打捞旅行箱。箱子外面还被一个铁架 子包裹着,铁笼还系上了铁链,防止箱子脱落,铁链上还有两把大锁。这个海滩经常漂浮物漂到这里来,多是遗弃无用的东西。但这个箱子外观比较漂亮,不像是随 便丢弃的。严密的封锁似乎向人们暗示,箱子内藏着重大的秘密。渔民兴奋地用锤子敲开铁链上的锁,将箱子从铁架中拖了出来。而此时,离开水面的旅行箱已经发 出了明显的恶臭。打开行李箱的那一刻,渔民彻底惊呆了,因为箱子里竟然装着一具没有头颅的尸体。
  接到报警,汕头警方迅速前往鹿屿岛。“尸块确 定为女性,高度腐烂,缺失头部和右腿,现场判断死者已经遇害有一段时间了,连包装尸块的袋子和毛巾都已褪色得非常厉害”,汕头市龙湖区公安分局刑侦大队一 中队副中队长李鹏飞回忆说。这起骇人听闻的碎尸案引起汕头警方的高度重视,“6·30”碎尸案专案组迅速成立。
  案件调查一开始就遇到许多棘手 的问题,最先要弄清楚尸块的来源。专案组分析,尸块的来源有三种可能:一是有人驾船来到鹿屿岛附近抛尸;二是装有尸块的行李箱从上游的水域漂流至此;三是 潮汐将行李箱从外海带了过来。要前往鹿屿岛必须在最近的妈屿岛包船前往,两岛之间距离约700米。专案组人员首先走访了距离鹿屿岛最近的渔民们,但是他们 都表示最近并没有发现有可疑的陌生人前往鹿屿岛。第一种可能被排除了。鹿屿岛上游不远就是海湾大桥。汕头海湾大桥位于汕头港东部出入口妈屿岛海域处,为跨 海公路桥。这座大桥是深汕两地一级汽车专 用公路的配套设施,是连结深圳、珠海、汕头、厦门等4个经济特区的陆地交通纽带。是否是有人携带装有尸块的行李箱从外地来此,从海湾大桥上抛尸呢?但是专 案组调取海湾大桥的监控录像显示,没有任何发现。一位居住妈屿岛上的67岁的老伯为专案组提供了一条重要的线索。他常年在附近海域打渔,对鹿屿岛附近的水 文相当了解。他说,鹿屿岛初一、十五有两次涨潮、两次退潮,因此常有外水域的重物被潮汐卷流来此。由于水流迂回复杂,尽管已经基本确定行李箱来自外海水 域,但是专案组仍旧很难将抛尸的第一现场缩小到一定的范围。
  死者头部被水泥浇筑,藏匿在凶手家中。分尸地点在凶手居住的坑梓出租屋。
  尸检真相
  碎尸案的关键是找到尸源,也就是确定死者的身份。尸源找到了,案件就破获了一半。
   装尸块的行李箱呈灰色、硬塑料质地,有卡通图案。仅一天不到的时间,专案组就确定了箱子来自温州一个箱包厂家。但是由于这个箱子的流向太多,非常普通, 希望通过行李箱来寻找尸源的思路显然行不通。于是,尸块本身成为破案的关键。如何在最短的时间内查找到尸源,就要看法医能不能尽自己所能为侦查提供一些线 索、缩小查找范围了。
  旅行箱内的尸块蜷曲状,头部和右腿缺失,全身赤裸,高度腐败,一只光脚抵在箱盖上。彭晓,汕头市公安局龙湖分局刑侦大队 一中队中队长,当他真正接触到尸体的皮肤时,才知道不仅仅是视觉,就连触觉也在不断挑战神经。由于一直被海水浸泡,尸体表面已经像肥皂一样滑,戴着乳胶手 套的手根本抓不住尸体的胳膊。死者的双手被一根电线捆绑,捆绑的双手又被电线缠绕与左大腿固定。一般来说,尸体在死后一两个小时就出现尸僵硬,尸僵形成后 尸体就很难卷曲了。而尸体完全被屈曲塞进一个旅行箱,而且尸体外面还套了两层黑色的塑料袋。也就是说,凶手在尸僵形成之前,就完成了捆绑、包裹、卷曲、装 袋的程序。因此,专案组初步推测,凶手在野外,在尸僵形成前的一两个小时内找到这么多物件,完成分尸、捆绑、包裹、装袋等程序的可能性很小。因此,死者的 遇害第一现场应该是室内。
  尸体被直接送往解剖室。高度腐败的尸体会散发有毒气体,法医佩戴的防毒面具虽然可以过滤掉大量的有毒气体,但是不能完全阻挡臭味。那种尸体的腐臭还夹杂着酸臭,让靠近的人肠胃迅速翻腾起来。
  解剖台上的这具女性的残缺尸体,皮肤显得格外苍白,没有头和一条腿的躯干孤零零地躺在解剖台上,让人感觉毛骨悚然。尽管尸体腐败很厉害,但是还是能够看出来死者比较年轻,身材很好。死者的左大腿还有一处精致的纹身,脚趾甲涂有鲜红的指甲油。
   在法医尸检过程中,死者的年龄可以直接通过牙齿来判断,经验丰富的法医还会结合耻骨联合面的形态来判断。这样判断的结果会更加准确,误差在一两岁之间。 在碎尸案中,死者的身高可以通过多根长骨的尺寸来推断。由于这具女尸无头,所以法医通过耻骨推断该女子年龄约22岁,身高160-165厘米,无生育经 历,遇害约一个月时间。
  法医注意到,凶手显然对人体组织不熟悉,分尸的手法很拙劣,下刀处不是关节,而是致密的肌腱部位。尸体的右大腿根部, 股骨都被硬生生地砍断了,能把肱骨、股骨这两块人体中最硬的骨骼砍断,凶手肯定费了不少力气。根据尸体缺失部分的皮肤和组织,法医推测割皮肤的肌肉的是一 把轻便而锋利的刀具,而剁骨头的刀具应该是很重的那种砍刀。这两种特点无法在一把刀具上具备。死者刚死,凶手就用这两把刀具来分尸。
  法医在尸体上没有找到尸斑。一般尸斑浅淡多见于严重失血或者溺死的尸体上。既然死者不是死于失血性休克,那么因为死后被肢解而大量失血,尸斑也可以是几乎不可见的。专案组推断,凶手杀完人能够迅速完成尸体肢解的动作,说明凶手肢解尸体的工具应该是早已准备好的。
   尸体的身体上没有明显的伤痕,但是法医却在死者的胸部发现一处不明显的苍白区域。死者本来皮肤就白,加之失血,所以苍白区更不容易发现。法医用酒精反复 擦拭后,苍白区越发明显。这是因为,人活着的时候,全身血管中血液流动。但是如果在此时身体的一部分软组织被重物压迫,血液就不能流动到此处的毛细血管 中,受压的部分就会缺血。如果人在重压的同时死亡,血液停止流动,即时重压解除,血液也不会流回到这个部分了。死者胸部的白斑很可能是临死前被压迫胸部导 致,凶手的目的是什么?强奸、扼颈或捂鼻。一般杀人导致死者机械性窒息的案件,尸体头部会提示许多窒息征象,作为明确死因的参考。但是这具尸体头部缺失, 法医初步判定,死者是被凶手狠狠压住胸部不能动弹,窒息而死。
  揭秘死者
  尸块最特别的是胸部,死者生前做过隆胸手术,法医发现隆胸的硅胶上竟然有一串细小的编码IMGHC-TX-H-270!这个重大发现让专案组很是兴奋,立刻要求法医人员对胸部内的硅胶进行检验。
   因为如果能通过硅胶找到为死者做隆胸手术的医疗机构,死者的身份就能够确定了。按照这个思路,专案组根据硅胶上的相关信息,很快找到了这家硅胶生产厂 家。7月1日,彭晓等专案组成员飞往武汉,寻找这种硅胶的总经销商。硅胶上的数字正是产品的批号。这批产品是3月24日武汉总经销商进货的,有29个发往 全国的整形医院,有15个女性使用了该批号的硅胶。由于患者大多不愿意在整形医院留 下自己的真实信息,专案组成员只能通过主刀医生逐一回访这15个手术者来排查。一个在珠海一家整形医院做过隆胸手术的年轻女子小清引起了彭晓的注意。她于 4月3日在珠海这家整形医院完成了隆胸手术,使用的正是这个批次的硅胶。医生拨打小清的电话已经无法接通,而她的年龄、身高等特征与死者基本相符。
   6月12日,深圳市桂园派出所接到小清父亲的报案,称女儿在深圳离奇失踪。原来,小清今年22岁,是广西北流市人,长期居住珠海,是一个平面模特。6月 7日,她因为在深圳有拍摄任务,所以从珠海来到深圳罗湖的红桂路朋友小雪家暂住。6月8日,小清出门后就和大家都失去了联系。小雪证实,由于模特行业对身 材要求很高,所以4月3日正是她陪同小清在珠海这家整形医院完成了隆胸手术。小清左腿有纹身,其到深圳的当日,两个好朋友还去做了美甲,小清为自己的脚趾 甲选择了鲜艳的大红色。这个失踪的美女模特,无论年龄、外形、身高等特征都与死者高度吻合。专案组委托广西警方提取了小清父母的DNA,结果与尸块的 DNA比对,确定“6·30”碎尸案的死者就是广西籍青年女子小清。由于案情重大,罗湖刑警大队立即介入调查,并与汕头警方成立联合专案组开始深入侦察。
  锁定嫌犯
  死者的身份一旦确定,案件的侦破就迈出了关键的一步。
  情杀?仇杀?还是激情杀人?专案组逐步排查、分析,发现小清在珠海有一个香港籍的男朋友,没有情感纠纷,该男子并没有作案的动机。小清在近期也没有跟人结怨。因此,基本排除了情杀和仇杀的可能。长期居住珠海的小清失踪于深圳,专案组分析很可能是陌生人作案。
  通过银行开卡记录,警方发现就在小清失踪后几天中,分别有人分三次从小清的银行卡上取走了5万多元的存款:
  6月22日,12:53分左右,在深圳坂田的一柜员机,一名身穿雨衣把自己包裹得严严实实的戴眼镜男子第一次取款。
  6月26日,0:56分左右,在深圳田贝一柜员机,一名身着睡衣、头部和手部缠绕有绷带的男子再次取款。
  7月2日,17:57分,在深圳南山一柜员机,一名头戴鸭舌帽、身穿白色T恤的戴黑框眼镜的男子第三次取款。
   三次提款人均为男性,但是可以看出凶手十分狡猾,每次都乔装打扮,而且选择距离很远的不同银行的提款机取款。专案组很难确定凶手是一个人还是多个人。很 多时候,尸体虽然已经没有生命,但是会透露很多信息。小清的双手被一根电线捆绑,捆绑的双手又被电线缠绕与左大腿固定。凶手将其捆绑的主要目的是能够将蜷 曲的尸体塞进不够大的黑色塑料袋。专案组分析,如果凶手是两个或两个以上的人,完全可以一个人拿塑料袋,一个人蜷曲尸体塞进塑料袋。正因为凶手是一个人, 他才不得不先捆绑双手,再将双手与左腿固定,将尸体蜷曲后才塞进黑色塑料袋。由此看来,凶手只有一人,这个三次出现在不同提款机机前取走小清存款的年轻男 子很可能就是凶手本人。
  专案组由此推断,凶手谋财害命的可能性很大。凶手带走的死者赃物可能成为案件的新的突破口。“我们当时就看死者的物品流向哪里来进行摸查,二手市场成为摸查重点”,彭晓说。深圳罗湖刑警大队很快监控到死者一部苹果手机出现在深圳华强北手机市场,一个黄姓男子曾经使用过。7月6日18时许,罗湖警方在华强北经济大厦一楼找到了做手机生意的黄姓男子以及死者的两部手机。该男子称,手机是其表哥阿山送给他的。至此,嫌疑人已基本锁定为阿山。
  凶手落网
  黄某的表哥阿山今年29岁,是汕头市朝阳区人,近期以开蓝牌车营生。深圳警方决定密捕阿山,由深圳市公安局罗湖分局刑侦大队副中队长曾雁鹏带队,便衣前往。
   阿山和妻子暂住在深圳市罗湖区桂圆木坊的一处出租屋。桂木坊是“城中村”,房屋分布零散,门牌号也十分不规范,有的门牌是用油漆喷的,有的则是用笔写 的,搜查进展十分困难。搜寻中,罗湖警方竟然找到两个门牌上都写着“罗湖区桂园路桂木坊14号某房”的住房,到底哪个才是嫌疑人黄某的住址呢?
   经询问,罗湖警方排除了其中一个住房,但另一个住房因无人在家难以确认情况。在房屋门口守候时,罗湖刑警大队主办警员曾雁鹏敲了隔壁房间的大门,欲从邻 居处了解情况,却意外发现屋内居然就是阿山的妻子。嫌疑人真正的住址找到了!三个大人和一个不足1岁的婴儿正在一套40多平米的出租屋中,他们分别是阿山 的妻子、小姨子、小舅子和儿子。出租屋堆满了物品,拥挤而杂乱,整套房间只有厨房所在的阳台上有一扇窗,光线昏暗,空气中夹杂着汗臭味。
  阿山 不在家,为了不打草惊蛇,负责抓捕行动的罗湖刑警大队一中队几名队员在阿山家门口守株待兔。 已经凌晨了,阿山还是没有露面。难道阿山嗅到了危险的气息?对于参战的抓捕队员来说,这样的通宵达旦蹲守是常有的事情。凌晨6点,晨晖开始洒向大地,阿山 突然出现在出租屋前的街道上。阿山落网,在他身上,罗湖警方搜出被害人小清的手表和6张信用卡。

  案情还原
  小清的遇害经过被还原:案发前,阿山因为赌博债台高筑,他决定利用蓝牌车实施抢劫杀人。
   阿山租下深圳市龙岗坑梓镇金沙路的一间出租屋,这间出租屋十分特别,拉开卷帘门,轿车可以直接开进屋内,即便挟持受害人下车也难以被发现。随后,他又在 深圳东门步行街分别购买了大型的旅行箱、锋利的弯刀和砍刀、胶布、黑色塑料袋等作案工具。6月8日下午3时许,在深圳市罗湖区东门新园路,打扮时髦的小清 坐上了阿山的吉利牌小轿车,谈好价额准备前往深圳龙华某商城拍摄平面照片。天气炎热,小清不仅穿着时髦暴露,肩背的LV手袋更引起了阿山的注意。谈话间, 坐在前排副驾驶的小清一边补妆一边得意地跟阿山说,自己新交的香港籍男友很有钱,出手阔绰。行驶途中,一脸傲气的小清还与阿山发生了语言冲突,直呼阿山 “屌丝一个”。本对杀人劫财还有些犹豫的阿山在那一刻下定了决心。他将车开到僻静处,亮出闪亮的尖刀,用胶带将小清封口,用电线捆绑双手,直接将车开进坑 梓镇金沙路的那间出租屋。
  在出租屋中,阿山展开疯狂的报复,他先强奸了小清,随后逼迫被害人说出银行卡的密码。劫色劫财后,为了不让事情败 露,阿山想到了一个“杀人灭口”的方式:千里抛尸可以逃避侦查,将躯干和头部分尸藏匿后警方就难以判断死者身份。阿山想,将尸体沉入江中顺流入海,这样小 清的尸体就从此消失了。肢解过程中他才发现尽管已经是最大号的旅行箱,但是仍旧不能容纳一个无头的尸体,于是他不得不将死者的右大腿从肱骨处切下。
  第二天,考虑到自己比较了解家乡的情况,阿山决定驾车将装有小清尸体躯干的旅行箱运回自己的老家——汕头市潮阳区关埠镇。他把这个箱子放在一个铁架内,用铁链锁住后带到榕江东湖码头,沉入江中。
   6月11日,阿山回到深圳,在坑梓的出租屋内又将装有被害人头部和残肢的纸板箱用水泥浇筑后,放置在深圳市罗湖区桂园路桂木坊的自己和老婆居住的出租屋 中。在近一个月的时间里,知道丈夫被抓获,阿山的妻子都不知道丈夫在家中藏匿了尸块。阿山本来还准备寻找机会来抛弃这个装有尸块的纸箱。警方也证实,阿山 就是三次取走受害人存款的人。就在阿山丢弃尸块的那天,天空下起大雨,阿山以为被绑上铁链放置在铁架中的箱子会因为重量沉入水里,但是事与愿违,箱子在水 里一浮一沉。阿山转身寻找物品想要加重时,一回头,箱子已经被水流冲走。从那一刻起,阿山就感到自己终将落网。

posted @ 2013-10-22 15:31 ZT文萃 阅读(223) | 评论 (0)编辑 收藏

http://soft.chinabyte.com/os/291/11696291.shtml

     1、Linux命令行下将文件checkout到本地目录

  svn checkout path(path是服务器上的目录)

  例如:svn checkout svn://192.168.1.1/pro/domain

  简写:svn co

  2、Linux命令行下往版本库中添加新的文件

  svn add file

  例如:svn add test.php(添加test.php)

  svn add *.php(添加当前目录下所有的php文件)

  3、Linux命令行下将改动的文件提交到版本库

  svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

  例如:svn commit -m “add test file for my test“ test.php

  简写:svn ci

  4、Linux命令行下的加锁/解锁

  svn lock -m “LockMessage“ [--force] PATH

  例如:svn lock -m “lock test file“ test.php

  svn unlock PATH

  5、Linux命令行下更新到某个版本

  svn update -r m path

  例如:

  svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。

  svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)

  svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)

  简写:svn up

  6、Linux命令行下查看文件或者目录状态

  1)svn status path(目录下的文件和子目录的状态,正常状态不显示)

  【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

  2)svn status -v path(显示文件和子目录状态)

  第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

  注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

  简写:svn st

  7、Linux命令行下删除文件

  svn delete path -m “delete test fle“

  例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

  或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种

  简写:svn (del, remove, rm)

  8、Linux命令行下查看日志

  svn log path

  例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

  9、Linux命令行下查看文件详细信息

  svn info path

  例如:svn info test.php

  10、Linux命令行下比较差异

  svn diff path(将修改的文件与基础版本比较)

  例如:svn diff test.php

  svn diff -r m:n path(对版本m和版本n比较差异)

  例如:svn diff -r 200:201 test.php

  简写:svn di

  11、Linux命令行下将两个版本之间的差异合并到当前文件

  svn merge -r m:n path

  例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

  12、Linux命令行下SVN 帮助

  svn help

  svn help ci

  以上是常用命令,下面写几个不经常用的

  13、Linux命令行下版本库下的文件和目录列表

  svn list path

  显示path目录下的所有属于版本库的文件和目录

  简写:svn ls

  14、Linux命令行下创建纳入版本控制下的新目录

  svn mkdir: 创建纳入版本控制下的新目录。

  用法: 1、mkdir PATH…

  2、mkdir URL…

  创建版本控制的目录。

  1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。

  2、每个以URL指定的目录,都会透过立即提交于仓库中创建.在这两个情况下,所有的中间目录都必须事先存在。

  15、Linux命令行下恢复本地修改

  svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:

  用法: revert PATH…

  注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录

  16、Linux命令行下代码库URL变更

  svn switch (sw): 更新工作副本至不同的URL。

  用法: 1、switch URL [PATH]

  2、switch –relocate FROM TO [PATH...]

  1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。

  2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。

  17、Linux命令行下解决冲突

  svn resolved: 移除工作副本的目录或文件的“冲突”状态。

  用法: resolved PATH…

  注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。

  18、Linux命令行下输出指定文件或URL的内容。

  svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。

  svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

posted @ 2013-10-18 14:01 ZT文萃 阅读(169) | 评论 (0)编辑 收藏

仅列出标题
共8页: 上一页 1 2 3 4 5 6 7 8 下一页