如鵬網(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é)(清華東門(mén)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)展專(zhuān)題講座、問(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類(lèi)可以訪問(wèn)Automation服務(wù)。不過(guò)經(jīng)過(guò)使用發(fā)現(xiàn)一些錯(cuò)誤,因此對(duì)其進(jìn)行了修改,為了方便訪問(wèn)IE,我又封裝了一個(gè)IEAutomation類(lèi),這...  閱讀全文
          posted @ 2008-06-23 17:04 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(2262) | 評(píng)論 (1)編輯 收藏

               摘要: 《專(zhuān)家手記AJAX開(kāi)發(fā)實(shí)戰(zhàn)》電子版下載地址:http://www.aygfsteel.com/Files/huanzhugege/《專(zhuān)家手記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è)類(lèi)中。核心原理就是調(diào)用SetParent這個(gè)API將我們的程序中的某個(gè)控件設(shè)置為被嵌套程序的父窗口。具體原理可以參考我以前寫(xiě)的《WPF中嵌入普通Win32程序的方法 》(http://www.aygfsteel.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.aygfsteel.com/Files/huanzhugege/swtwin32.zip
          posted @ 2008-06-05 10:49 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(3761) | 評(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ā)人員想快速的掌握這門(mén)技術(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ò)《專(zhuān)家手記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ò)硬盤(pán)等經(jīng)典的Web2.0應(yīng)用,充分展示了AJAX技術(shù)的強(qiáng)大。WebOS是AJAX技術(shù)登峰造極制作,跟著作者實(shí)打?qū)嵉膶W(xué)到了一個(gè)WebOS的制作,你就是AJAX高手!!!

          值得一提的是《專(zhuān)家手記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ì) 閱讀(2012) | 評(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匿名類(lèi)和組合語(yǔ)句的區(qū)分
          楊中科 17:08:22
          sorry,沒(méi)做過(guò)js的語(yǔ)法分析  
          ssy(*^__^*) 17:10:37
          哦,謝謝你
          楊中科 17:11:39
          為什么不用mozilla的js包呢?它那里邊好像提供了解析js的類(lèi),直接能拿到AST  
          ssy(*^__^*) 17:12:30
          好的,謝謝您提醒,我去試一下mozilla的js包
          楊中科 17:13:04
          你們解析JS做什么用途?  
          ssy(*^__^*) 17:13:46
          做安全代碼分析,就是找出js代碼可能存在的安全隱患
          楊中科 17:14:14
          哦。JS包中的Parser類(lèi)可以干這個(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 
          主站蜘蛛池模板: 阿尔山市| 富阳市| 体育| 新龙县| 伊吾县| 玉溪市| 九江县| 大悟县| 宜章县| 柞水县| 葫芦岛市| 台中县| 吕梁市| 泰兴市| 娱乐| 连云港市| 永泰县| 玉林市| 任丘市| 南昌市| 临颍县| 武平县| 石家庄市| 宝山区| 荃湾区| 南雄市| 黄平县| 新龙县| 浮梁县| 高雄县| 吉首市| 大石桥市| 忻州市| 普安县| 井陉县| 宝应县| 石棉县| 神池县| 樟树市| 嘉祥县| 合山市|