<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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文萃 閱讀(153) | 評論 (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文萃 閱讀(130) | 評論 (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文萃 閱讀(227) | 評論 (0)編輯 收藏

          1、我自己當年,無論我在方正給國家打工,還是我在雅虎給外國人打工,我都跟別人最大的不一樣,我從來不覺得我在給他們打工,我真的可能是很有自信 的人,我覺得我在為自己干。因為我干任何一件事我首先考慮的是,我通過干這件事我能學到什么東西,學到的東西是別人剝奪不走的,客觀上可能給公司創造了價 值。

      2、一件事交給我我應付一下,很容易應付,應付完了之后不覺得是在浪費生命嗎?一件事你可以把它做到 60 分,你可以做的很輕松,做完了你每天重復每天干三個小時活就完了,然后你天天上班沒事,然后你回家三十畝地一頭牛老婆孩子熱炕頭,但你怎么進步呢?人的進 步離開了學校之后,學習不再是上課也不是讀書,通過你在工作中通過你做事情做項目積累自己的經驗,跟很多人打交道。因為我有不服輸的性格,再普通的事我要 做的比別人好,大家做的很普通我要做的跟大家不一樣,要做到超出大家想象要花很多時間很多努力,但我最后發現我的收獲最大的,因為我下了功夫,你的收獲和 你的投入是成正比的。

      3、如果你混日子,對不起,實際上你是混自己,在很多大的公司混的很多,你能黑老板多少錢嗎?你一年年薪 10 萬,中低層收入你在單位混 10 年也就混老板 100 萬,對很多公司來說有人混我 100 萬對公司傷害不了哪去,可是你十年不好好工作,荒廢了十年,十年可能突然有一天公司倒閉了,或者發現你這個混混把你開掉了,你怎么辦呢?你覺得你有競爭力 嗎?這個社會除非你有一個好爸爸,或者你有一個家族,這個不在咱們考慮之列,這不是我的哲學。

      4、你只要是白手打天下,你最后發現在社會上,這個社會越來越公正,我認為機會還是很多,你不要天天去憤青,去罵別人,至少有了互聯網有了 IT,你看丁磊、馬化騰、李彥宏都是平頭百姓,他們在這個行業能成功,說明什么?說明只要你努力你也有機會成功,百度、谷歌還有 QQ 的很多員工,我們不提李彥宏,不提大佬們。他們公司很多員工參與這件事也很成功,有很多在北京買車、買房有成就感,這些東西靠什么?還是靠你能力的積累。

      5、我覺得在公司,真不喜歡這個公司,不喜歡老板,趕快辭職,一分鐘也別見到他,我就這個風格。何必為了老板的錯誤耗費自己的生命,如果你今天 決定你又不離開在公司做工作,我覺得你應該把工作做好。有人說有幾種問題,我有個性我不愛干這個,我說大哥,個性是成功人士的專利,你成功你當然覺得有個 性,別人看著你,你沒有成功之前個性能換房子嗎?如果個性能換房子,我比你有個性,我們全家有個性,但它換不了一個房子。

    posted @ 2013-11-15 08:35 ZT文萃 閱讀(159) | 評論 (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文萃 閱讀(956) | 評論 (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文萃 閱讀(212) | 評論 (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文萃 閱讀(149) | 評論 (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文萃 閱讀(439) | 評論 (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文萃 閱讀(232) | 評論 (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文萃 閱讀(175) | 評論 (0)編輯 收藏

    僅列出標題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
    主站蜘蛛池模板: 国内精品99亚洲免费高清| 亚洲视频一区在线观看| 国产一精品一av一免费爽爽| 亚洲综合一区二区精品导航| 免费看片免费播放| 免费无码又爽又刺激网站 | 中国亚洲呦女专区| 亚洲av无码不卡私人影院| 日本免费电影一区二区| 亚洲第一成年网站视频| 亚洲AV无码一区二区三区系列 | 亚洲乱码中文字幕手机在线| 99国产精品免费视频观看| 亚洲AV网一区二区三区 | 亚洲xxxx18| 国产亚洲美日韩AV中文字幕无码成人| 足恋玩丝袜脚视频免费网站| 一级美国片免费看| 亚洲AV无码专区在线亚| 伊人久久大香线蕉亚洲五月天| 日韩国产免费一区二区三区| 成人自慰女黄网站免费大全| 亚洲精品无码久久久久A片苍井空| 久久久久久久综合日本亚洲| 又爽又高潮的BB视频免费看| 69式互添免费视频| a毛片视频免费观看影院| 蜜臀亚洲AV无码精品国产午夜.| 亚洲一本综合久久| 国产精品亚洲综合专区片高清久久久| 扒开双腿猛进入爽爽免费视频 | 亚洲色无码专区一区| 亚洲v高清理论电影| 亚洲精品成人片在线观看| 成人免费在线观看网站| 99久久人妻精品免费二区| 中文字幕视频免费在线观看| 国产AV无码专区亚洲AV琪琪| 亚洲中文字幕乱码熟女在线| 亚洲精品视频观看| 久久久久亚洲av无码尤物|