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

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

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

    如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

    CowNew開(kāi)源團(tuán)隊(duì)

    http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

    #

    SWT中調(diào)用Automation的方式 這篇文章中我們介紹了SWT中通過(guò)Automation訪問(wèn)IE的方式,但是只是簡(jiǎn)單的URL導(dǎo)航,沒(méi)有自動(dòng)填表單、自動(dòng)提交等功能。我們對(duì)其進(jìn)行了升級(jí),采用了新的操作方式,充分利用了SWT對(duì)OLE的支持,裁減掉大量代碼。現(xiàn)在可以實(shí)現(xiàn)自動(dòng)填表單、自動(dòng)提交等功能。不過(guò)暫時(shí)還無(wú)法響應(yīng)IE的事件。
    核心代碼如下:

    package test;

    import org.eclipse.swt.SWTException;
    import org.eclipse.swt.internal.ole.win32.COM;
    import org.eclipse.swt.internal.ole.win32.GUID;
    import org.eclipse.swt.internal.ole.win32.IUnknown;
    import org.eclipse.swt.ole.win32.OLE;
    import org.eclipse.swt.ole.win32.OleClientSite;
    import org.eclipse.swt.widgets.Composite;

    /**
     *
     * @author 楊中科
     *
     */
    public class AutomationClientSite extends OleClientSite
    {
     public AutomationClientSite(Composite parent, int style, String progId)
     {
      super(parent, style);
      try
      {
       appClsid = getClassID(progId);
       if (appClsid == null)
        OLE.error(OLE.ERROR_INVALID_CLASSID);

       //使用CoCreateInstance創(chuàng)建一個(gè)進(jìn)程外Automation服務(wù)器
       int[] address = new int[1];
       int result = COM.CoCreateInstance(getClassID(progId), 0,
         COM.CLSCTX_INPROC_SERVER | COM.CLSCTX_LOCAL_SERVER,
         COM.IIDIUnknown, address);
       if (result != COM.S_OK)
        OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result);

       objIUnknown = new IUnknown(address[0]);

      } catch (SWTException e)
      {
       dispose();
       disposeCOMInterfaces();
       throw e;
      }
     }

     protected GUID getClassID(String progId)
     {
      GUID guid = new GUID();
      // create a null terminated array of char
      char[] buffer = null;
      if (progId != null)
      {
       int count = progId.length();
       buffer = new char[count + 1];
       progId.getChars(0, count, buffer, 0);
      }
      if (COM.CLSIDFromProgID(buffer, guid) != COM.S_OK)
      {
       int result = COM.CLSIDFromString(buffer, guid);
       if (result != COM.S_OK)
        OLE.error(result);
      }
      return guid;
     }

    }
    public class OleUtils
    {
     public static int getIdOfName(OleAutomation auto, String name)
     {
      int[] ret = auto.getIDsOfNames(new String[]{name});
      return ret[0];
     }
     
     public static void setProperty(OleAutomation auto, String name,Variant value)
     {
      int id = getIdOfName(auto, name);
      auto.setProperty(id, new Variant[]{value});
     }
     
     public static Variant getProperty(OleAutomation auto, String name)
     {
      int id = getIdOfName(auto, name);
      return auto.getProperty(id);
     }
     
     public static Variant invoke(OleAutomation auto, String name)
     {
      return invoke(auto,name,new Variant[0]);
     }
     
     public static Variant invoke(OleAutomation auto, String name,Variant... params)
     {
      int id = getIdOfName(auto, name);
      return auto.invoke(id,params);
     }
    }



    package test;

    import org.eclipse.swt.ole.win32.OleAutomation;
    import org.eclipse.swt.ole.win32.Variant;

    /**
     *
     * @author 楊中科
     *
     */
    public class HtmlElement
    {
     private OleAutomation auto;

     public HtmlElement(OleAutomation auto)
     {
      this.auto = auto;
     }

     protected OleAutomation getOleAutomation()
     {
      return auto;
     }

     public void setProperty(String name, Variant value)
     {
      OleUtils.setProperty(auto, name, value);
     }

     public Variant getPropertyAsVariant(String name)
     {
      Variant value = OleUtils.getProperty(auto, name);
      return value;
     }

     public void setProperty(String name, int value)
     {
      OleUtils.setProperty(auto, name, new Variant(value));
     }

     public int getPropertyAsInt(String name)
     {
      Variant value = OleUtils.getProperty(auto, name);
      return value.getInt();
     }

     public void setProperty(String name, boolean value)
     {
      OleUtils.setProperty(auto, name, new Variant(value));
     }

     public boolean getPropertyAsBool(String name)
     {
      Variant value = OleUtils.getProperty(auto, name);
      return value.getBoolean();
     }

     public void setProperty(String name, String value)
     {
      OleUtils.setProperty(auto, name, new Variant(value));
     }

     public String getPropertyAsString(String name)
     {
      Variant value = OleUtils.getProperty(auto, name);
      return value.getString();
     }

     public HtmlElement getPropertyAsHtmlElement(String name)
     {
      Variant value = OleUtils.getProperty(auto, name);
      return new HtmlElement(value.getAutomation());
     }

     public Variant invoke(String name,Variant... params)
     {
      return OleUtils.invoke(auto, name,params);
     }

     public int invoke_Int(String name,Variant... params)
     {
      return invoke(name,params).getInt();
     }

     public boolean invoke_Bool(String name,Variant... params)
     {
      return invoke(name,params).getBoolean();
     }

     public String invoke_String(String name,Variant... params)
     {
      return invoke(name,params).getString();
     }

     public HtmlElement invoke_HtmlElement(String name,Variant... params)
     {
      return new HtmlElement(invoke(name,params).getAutomation());
     }
    }




    package test;

    import org.eclipse.swt.ole.win32.OleAutomation;
    import org.eclipse.swt.ole.win32.OleClientSite;
    import org.eclipse.swt.ole.win32.Variant;

    /**
     * 更多方法參考MSDN“InternetExplorer Object”文檔
     *
     * @author 楊中科
     *
     */
    public class IEAutomation extends HtmlElement
    {

     public IEAutomation(OleClientSite clientSite)
     {
      super(new OleAutomation(clientSite));
     }

     public void setVisible(boolean value)
     {
      setProperty("Visible", value);
     }

     public boolean isVisible()
     {
      return getPropertyAsBool("Visible");
     }

     public void setMenuBar(boolean value)
     {
      setProperty("MenuBar", value);
     }

     public boolean isMenuBar()
     {
      return getPropertyAsBool("MenuBar");
     }

     public void setStatusBar(boolean value)
     {
      setProperty("StatusBar", value);
     }

     public boolean isStatusBar()
     {
      return getPropertyAsBool("StatusBar");
     }
     
     public void setToolBar(boolean value)
     {
      setProperty("ToolBar", value);
     }

     public boolean isToolBar()
     {
      return getPropertyAsBool("ToolBar");
     }
     
     public int getHWND()
     {
      return getPropertyAsInt("HWND");
     }
     
     public String getReadyState()
     {
      return getPropertyAsString("ReadyState");
     }
     
     public String getLocationURL()
     {
      return getPropertyAsString("LocationURL");
     }
     
     public boolean getBusy()
     {
      return getPropertyAsBool("Busy");
     }

     public void navigate(String url)
     {
      invoke("Navigate", new Variant(url));
     }

     public HtmlElement getDocument()
     {
      return getPropertyAsHtmlElement("Document");
     }

     public String getInnerHtml()
     {
      HtmlElement document = getPropertyAsHtmlElement("Document");
      HtmlElement body = document.getPropertyAsHtmlElement("body");
      return body.getPropertyAsString("innerHtml");
     }

     public HtmlElement getElementById(String id)
     {
      HtmlElement document = getDocument();
      return document.invoke_HtmlElement("getElementById", new Variant(id));
     }

     public void quit()
     {
      invoke("Quit");
     }
    }




    使用范例:

     protected void 自動(dòng)填表()
     {
      //"kw"為關(guān)鍵字輸入框
      HtmlElement txtKW = ie.getElementById("kw");
      //自動(dòng)填表
      txtKW.setProperty("value", "楊中科");
      HtmlElement btnSB = ie.getElementById("sb");
      //自動(dòng)點(diǎn)擊【百度一下】按鈕自動(dòng)提交查詢
      btnSB.invoke("click");
     }
     private void automation() throws Exception
     {
      OleFrame frame = new OleFrame(composite, SWT.NONE);
      AutomationClientSite client =
       new AutomationClientSite(frame,SWT.NONE,"InternetExplorer.Application");   
     
      ie = new IEAutomation(client);
      ie.setVisible(true);
      ie.setMenuBar(false);
      ie.setToolBar(false);
      ie.setStatusBar(false);
      
      int hwnd = ie.getHWND();
      OS.SetParent(hwnd, composite.handle);
      // 窗口最大化
      OS.SendMessage(hwnd, OS.WM_SYSCOMMAND, OS.SC_MAXIMIZE, 0);
      OS.SendMessage(hwnd, OS.WM_ACTIVATE, 0, 0);
      
      ie.navigate("http://www.baidu.com");
      //等待加載完畢,正確的方式應(yīng)該是在網(wǎng)頁(yè)onComplete的時(shí)候繼續(xù)執(zhí)行,但是沒(méi)弄明白OLE 的EventSink機(jī)制怎么搞到SWT中來(lái)
      //所以先湊合著Sleep循環(huán)檢測(cè)getBusy()的值,當(dāng)不busy的時(shí)候再進(jìn)行后續(xù)處理
      while(ie.getBusy())
      {
       Thread.sleep(10);
      }
      msgBox(ie.getInnerHtml());
      //"sb"為【百度一下】這個(gè)按鈕的id
      HtmlElement btnSB = ie.getElementById("sb");
      //取value屬性
      String txt = btnSB.getPropertyAsString("value");
      msgBox("按鈕上的文字:"+txt);
      msgBox("網(wǎng)址:"+ie.getLocationURL());
      
      composite.addDisposeListener(new DisposeListener() {
       public void widgetDisposed(DisposeEvent e)
       {
        //必須手動(dòng)指定退出,否則會(huì)報(bào)異常
        ie.quit();
       }
      });
     }

    posted @ 2008-06-30 21:08 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(1411) | 評(píng)論 (2)編輯 收藏

    時(shí)間:2008年7月5日下午13:30到17:30
      活動(dòng)地點(diǎn):北京清華大學(xué)(清華東門Fit樓)
      特邀咨詢師: EasyJF開(kāi)源團(tuán)隊(duì) 大峽

      活動(dòng)參加對(duì)象:vifir.com的vip用戶;
      參加費(fèi)用:VIP免費(fèi);

      主辦單:開(kāi)源人網(wǎng)站(www.vifir.com)
      承辦單位:成都藍(lán)源信息技術(shù)有限公司 EasyJF開(kāi)源團(tuán)隊(duì) Cownew開(kāi)源團(tuán)隊(duì)
      
      活動(dòng)內(nèi)容:
      采用開(kāi)展專題講座、問(wèn)題答疑等形式,在網(wǎng)下開(kāi)展面對(duì)面的關(guān)于前沿富客戶端技術(shù)的應(yīng)用及經(jīng)驗(yàn)交流活動(dòng),主要以Ext技術(shù)的學(xué)習(xí)及應(yīng)用經(jīng)驗(yàn)交流為主。還將會(huì)根據(jù)vifir推出的一些ext應(yīng)用示例,進(jìn)行比較深入的分析及探討。

      活動(dòng)聯(lián)系人:靜水 (QQ: 970426526) 聯(lián)系電話:028-86272612
      電子郵箱:970426526 at qq.com

    posted @ 2008-06-30 21:01 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(272) | 評(píng)論 (0)編輯 收藏

         摘要: 在SWT中提供了訪問(wèn)OLE的方式,不過(guò)相關(guān)的例子都是進(jìn)程內(nèi)OLE的例子,比如嵌入瀏覽器、引用ActiveX控件什么的。由于客戶的需求,我們需要在程序中通過(guò)進(jìn)程外Automation服務(wù)的方式訪問(wèn)IE瀏覽器。經(jīng)過(guò)網(wǎng)上搜尋,找到一個(gè)朋友寫(xiě)的CComObject類可以訪問(wèn)Automation服務(wù)。不過(guò)經(jīng)過(guò)使用發(fā)現(xiàn)一些錯(cuò)誤,因此對(duì)其進(jìn)行了修改,為了方便訪問(wèn)IE,我又封裝了一個(gè)IEAutomation類,這...  閱讀全文
    posted @ 2008-06-23 17:04 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(2262) | 評(píng)論 (1)編輯 收藏

         摘要: 《專家手記AJAX開(kāi)發(fā)實(shí)戰(zhàn)》電子版下載地址:http://www.tkk7.com/Files/huanzhugege/《專家手記AJAX開(kāi)發(fā)實(shí)戰(zhàn)》電子版.rar
      閱讀全文
    posted @ 2008-06-22 18:19 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(2366) | 評(píng)論 (5)編輯 收藏

        在開(kāi)發(fā)系統(tǒng)的時(shí)候經(jīng)常需要嵌入外部的程序,比如將企業(yè)原有的系統(tǒng)集成到我們的系統(tǒng)中,而且要求看起來(lái)像和我們的程序一樣嵌入到我們的系統(tǒng)中,這時(shí)就要借助于Win32了。在以前使用VC、Delphi、C#開(kāi)發(fā)的使用的時(shí)候可以直接調(diào)用Win32的API來(lái)操作,好在SWT中提供了Win32API的封裝,而且封裝的比較好,大部分都在org.eclipse.swt.internal.win32.OS這個(gè)類中。核心原理就是調(diào)用SetParent這個(gè)API將我們的程序中的某個(gè)控件設(shè)置為被嵌套程序的父窗口。具體原理可以參考我以前寫(xiě)的《WPF中嵌入普通Win32程序的方法 》(http://www.tkk7.com/huanzhugege/archive/2008/04/24/195516.html)。
    主要代碼如下:
     private void executeProg(String fileName) throws Exception
     {
      int hHeap = OS.GetProcessHeap ();
      TCHAR buffer = new TCHAR (0, fileName, true);
      int byteCount = buffer.length () * TCHAR.sizeof;
      int lpFile = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
      OS.MoveMemory (lpFile, buffer, byteCount);
      SHELLEXECUTEINFO info = new SHELLEXECUTEINFO ();
      info.cbSize = SHELLEXECUTEINFO.sizeof;
      info.lpFile = lpFile;
      //隱藏啟動(dòng)
      info.nShow = OS.SW_HIDE;
      boolean result = OS.ShellExecuteEx (info);
      if (lpFile != 0) OS.HeapFree (hHeap, 0, lpFile);
      if(result==false)
       throw new Exception("啟動(dòng)失敗!");
     }
     
     protected void startNotePad() throws Exception {
      //"notepad.exe"為待啟動(dòng)的程序名
      executeProg("notepad.exe");
      
      //等待NotePad.exe啟動(dòng)并且初始化完畢,需要根據(jù)實(shí)際情況調(diào)整sleep的時(shí)間
      Thread.sleep(1000);  
      
      //"Notepad"為被嵌套程序窗口的ClassName(Win32級(jí)別),可以使用Spy++等工具查看
      int notepadHwnd = OS.FindWindow(new TCHAR(0,"Notepad",true),null);
      
      //&~WS_BORDER去掉內(nèi)嵌程序邊框,這樣看起來(lái)更像一個(gè)內(nèi)嵌的程序。如果需要顯示邊框,則將這兩行代碼刪除
      int oldStyle = OS.GetWindowLong(notepadHwnd, OS.GWL_STYLE);       
            OS.SetWindowLong(notepadHwnd, OS.GWL_STYLE, oldStyle&~OS.WS_BORDER);
           
            //composite為承載被啟動(dòng)程序的控件
      OS.SetParent(notepadHwnd, composite.handle);  
      //窗口最大化
      OS.SendMessage(notepadHwnd, OS.WM_SYSCOMMAND, OS.SC_MAXIMIZE, 0);
     }

    全部代碼在此下載:http://www.tkk7.com/Files/huanzhugege/swtwin32.zip
    posted @ 2008-06-05 10:49 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(3758) | 評(píng)論 (2)編輯 收藏

    由CowNew開(kāi)源團(tuán)隊(duì)的侯志松(網(wǎng)名:芽孢)編寫(xiě)的《Hibernate完全手冊(cè)》已經(jīng)由機(jī)械工業(yè)出版社出版。
            本書(shū)從應(yīng)用程序開(kāi)發(fā)的角度出發(fā),在介紹關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)知識(shí)和面向?qū)ο蠓椒ǖ幕A(chǔ)上,全面介紹對(duì)象關(guān)系映射領(lǐng)域的工業(yè)標(biāo)準(zhǔn)――Hibernate的基本功能、體系架構(gòu)、使用方法及高級(jí)特性。全書(shū)以對(duì)象關(guān)系映射為主線,分成3個(gè)模塊:第1~6章介紹對(duì)象持久化的基礎(chǔ)以及Hibernate的基本配置和使用方法;第7~11章詳細(xì)介紹如何使用Hibernate實(shí)現(xiàn)對(duì)象關(guān)系的映射,并討論了使用面向?qū)ο蠓绞讲樵償?shù)據(jù)的方法和技巧;第12~16章分析了Hibernate中事務(wù)、并發(fā)、緩存等高級(jí)特性,并討論了如何整合Hibernate和成熟技術(shù),構(gòu)建企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā)框架的技術(shù)實(shí)踐。
    posted @ 2008-06-04 10:16 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(450) | 評(píng)論 (0)編輯 收藏

    隨著Web開(kāi)發(fā)的不斷進(jìn)步,AJAX以一種新的面貌出現(xiàn)在了我們面前,并且迅速席卷全球,成為一種炙手可熱的技術(shù)。越來(lái)越多的開(kāi)發(fā)人員想快速的掌握這門技術(shù),并把它快速應(yīng)用到自己的項(xiàng)目中。

    雖然構(gòu)成AJAX的技術(shù)已經(jīng)非常成熟了,但是都是以CSS、JavaScript、XML等單一形式出現(xiàn)的,所以相關(guān)的技術(shù)書(shū)籍都僅僅停留在孤立的介紹這些技術(shù)方面,讀者無(wú)法將這些技術(shù)有機(jī)的整合起來(lái),更無(wú)從談起將AJAX應(yīng)用到項(xiàng)目中。本書(shū)將嘗試著打破這種局面,在書(shū)中我們對(duì)AJAX的基礎(chǔ)知識(shí)做有重點(diǎn)的介紹,而且本書(shū)中將穿插各種小的案例,讓讀者能夠在實(shí)踐中快速學(xué)習(xí)到AJAX技術(shù),并且在最后我們安排了一個(gè)實(shí)用性非常強(qiáng)的WebOS應(yīng)用,讓讀者能夠?qū)W了就能懂、懂了立即用。

    在AJAX領(lǐng)域已經(jīng)有一些非常好的圖書(shū)出版,不過(guò)這些圖書(shū)大都是用PHP、.Net等語(yǔ)言描述的,以Java實(shí)現(xiàn)的并不是很多,即使有也是淺嘗輒止。不過(guò)《專家手記AJAX開(kāi)發(fā)實(shí)戰(zhàn) 》的出現(xiàn)改變了這一面貌。

    這本書(shū)不僅用了大量篇幅介紹了流行的AJAX框架,更加可貴的是,書(shū)中用了三個(gè)章節(jié)以一個(gè)實(shí)用的WebOS為案例講解了基于AJAX技術(shù)的Web系統(tǒng)的開(kāi)發(fā)開(kāi)發(fā)出了模擬Windows桌面、網(wǎng)絡(luò)相冊(cè)、愛(ài)墻、在線Office、網(wǎng)絡(luò)硬盤等經(jīng)典的Web2.0應(yīng)用,充分展示了AJAX技術(shù)的強(qiáng)大。WebOS是AJAX技術(shù)登峰造極制作,跟著作者實(shí)打?qū)嵉膶W(xué)到了一個(gè)WebOS的制作,你就是AJAX高手!!!

    值得一提的是《專家手記AJAX開(kāi)發(fā)實(shí)戰(zhàn) 》這本書(shū)的代碼質(zhì)量非常高,看了作者的代碼不僅能使您學(xué)到高手的代碼編寫(xiě)習(xí)慣,更能使您掌握AJAX的高級(jí)開(kāi)發(fā)技能。
        此書(shū)是CowNew開(kāi)源團(tuán)隊(duì)第一本團(tuán)隊(duì)合作形式出版的圖書(shū)!
        稍后會(huì)提供試讀電子版給各位。

           由CowNew開(kāi)源團(tuán)隊(duì)的侯志松(網(wǎng)名:芽孢)編寫(xiě)的《Hibernate完全手冊(cè)》也已經(jīng)由機(jī)械工業(yè)出版社出版。本書(shū)從應(yīng)用程序開(kāi)發(fā)的角度出發(fā),在介紹關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)知識(shí)和面向?qū)ο蠓椒ǖ幕A(chǔ)上,全面介紹對(duì)象關(guān)系映射領(lǐng)域的工業(yè)標(biāo)準(zhǔn)――Hibernate的基本功能、體系架構(gòu)、使用方法及高級(jí)特性。全書(shū)以對(duì)象關(guān)系映射為主線,分成3個(gè)模塊:第1~6章介紹對(duì)象持久化的基礎(chǔ)以及Hibernate的基本配置和使用方法;第7~11章詳細(xì)介紹如何使用Hibernate實(shí)現(xiàn)對(duì)象關(guān)系的映射,并討論了使用面向?qū)ο蠓绞讲樵償?shù)據(jù)的方法和技巧;第12~16章分析了Hibernate中事務(wù)、并發(fā)、緩存等高級(jí)特性,并討論了如何整合Hibernate和成熟技術(shù),構(gòu)建企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā)框架的技術(shù)實(shí)踐。
    posted @ 2008-06-03 16:59 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(2009) | 評(píng)論 (5)編輯 收藏

    向四川汶川大地震遇難同胞表示深切哀悼! 

      舉國(guó)哀悼,也許,我們會(huì)淚流滿面,也許,我們會(huì)放聲痛哭,但任何困難都難不倒中國(guó)人民,我們終會(huì)擦干淚水,挺起脊梁,繼續(xù)前進(jìn)。

    posted @ 2008-05-19 21:05 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(240) | 評(píng)論 (0)編輯 收藏

            今天終于把《魯賓遜歷險(xiǎn)記》第一部看完了,看到其中說(shuō)到“既然上帝都能饒恕他,我們有什么權(quán)利剝奪他的生命呢?”,我這才明白為什么電影里邊基督徒要?dú)⒁粋€(gè)人的時(shí)候要說(shuō)“我以上帝的名義,殺了你”,既然能夠有權(quán)剝奪你生命的人只有上帝,那么我要?dú)⒘四憔捅仨?#8220;以上帝的名義”了,也就是說(shuō)這是上帝他老人家的意思。這也就是說(shuō),做一件事情必須有“名分”。看以前很多革命電影中,我們的革命戰(zhàn)士要槍斃叛徒的時(shí)候要說(shuō)“我代表人民代表D槍斃了你”,應(yīng)該這是一個(gè)意思吧。
            朱棣要當(dāng)BOSS就要打著“清君側(cè)”的旗號(hào)、洪秀全要造反就必須說(shuō)自己是上帝的次子、小鬼子要發(fā)動(dòng)七七事變就要找理由攻占宛平城、老美要弄死薩達(dá)姆就必須以找核武器為理由……看來(lái)無(wú)論是國(guó)內(nèi)還是國(guó)外、無(wú)論是做好事還是做壞事名分都是很重要的,必須找個(gè)名分才能行動(dòng),如果哪天一個(gè)人做事不講“名分”的話估計(jì)也就是流氓透頂了吧。
    posted @ 2008-05-03 23:24 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(411) | 評(píng)論 (5)編輯 收藏

    ssy(*^__^*) 16:57:16
    不知你做過(guò)js的語(yǔ)法分析沒(méi)有,我正在用antlr做js的語(yǔ)法分析,遇到兩個(gè)難題,想向您請(qǐng)教:
    1.正則和除法的區(qū)分
    2.js匿名類和組合語(yǔ)句的區(qū)分
    楊中科 17:08:22
    sorry,沒(méi)做過(guò)js的語(yǔ)法分析  
    ssy(*^__^*) 17:10:37
    哦,謝謝你
    楊中科 17:11:39
    為什么不用mozilla的js包呢?它那里邊好像提供了解析js的類,直接能拿到AST  
    ssy(*^__^*) 17:12:30
    好的,謝謝您提醒,我去試一下mozilla的js包
    楊中科 17:13:04
    你們解析JS做什么用途?  
    ssy(*^__^*) 17:13:46
    做安全代碼分析,就是找出js代碼可能存在的安全隱患
    楊中科 17:14:14
    哦。JS包中的Parser類可以干這個(gè)  
    ssy(*^__^*) 17:14:55
    嗯,我去找一下這方面的資料,還沒(méi)用過(guò)js包呢,呵呵,謝謝你提示
    posted @ 2008-04-25 21:13 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(894) | 評(píng)論 (2)編輯 收藏

    僅列出標(biāo)題
    共30頁(yè): First 上一頁(yè) 3 4 5 6 7 8 9 10 11 下一頁(yè) Last 
    主站蜘蛛池模板: 亚洲av永久中文无码精品综合| www亚洲一级视频com| 国产亚洲综合一区柠檬导航| 成人午夜免费视频| www.亚洲色图.com| 插B内射18免费视频| 亚洲色大成网站www| 日本不卡高清中文字幕免费| 日韩亚洲人成在线综合| 亚洲第一区精品观看| 中文在线免费观看| 亚洲精品视频免费看| 成人毛片免费观看| 亚洲免费二区三区| 亚洲国产精品成人午夜在线观看| 久久久久亚洲AV成人片| 最近的免费中文字幕视频 | 日本黄网站动漫视频免费| 精品一区二区三区免费观看| 91亚洲va在线天线va天堂va国产| 无码专区永久免费AV网站| 另类图片亚洲校园小说区| 亚洲成AV人片在线观看无| 在线天堂免费观看.WWW| 2019中文字幕在线电影免费| 亚洲AV无码一区二区三区性色| 国产亚洲精品va在线| 亚洲熟妇丰满多毛XXXX| 在线观看免费毛片| 花蝴蝶免费视频在线观看高清版| 亚洲一级黄色大片| 亚洲精品一级无码中文字幕| 国产高清免费视频| 国产成人1024精品免费| 国产成人精品亚洲2020| 亚洲av无码专区在线播放| 日产乱码一卡二卡三免费| 在线不卡免费视频| 国产精品无码免费视频二三区 | 亚洲va中文字幕无码久久| 亚洲国产精品一区二区久久hs |