<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開源團(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
        在開發(fā)系統(tǒng)的時(shí)候經(jīng)常需要嵌入外部的程序,比如將企業(yè)原有的系統(tǒng)集成到我們的系統(tǒng)中,而且要求看起來(lái)像和我們的程序一樣嵌入到我們的系統(tǒng)中,這時(shí)就要借助于Win32了。在以前使用VC、Delphi、C#開發(fā)的使用的時(shí)候可以直接調(diào)用Win32的API來(lái)操作,好在SWT中提供了Win32API的封裝,而且封裝的比較好,大部分都在org.eclipse.swt.internal.win32.OS這個(gè)類中。核心原理就是調(diào)用SetParent這個(gè)API將我們的程序中的某個(gè)控件設(shè)置為被嵌套程序的父窗口。具體原理可以參考我以前寫的《WPF中嵌入普通Win32程序的方法 》(http://m.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://m.tkk7.com/Files/huanzhugege/swtwin32.zip
    posted on 2008-06-05 10:49 CowNew開源團(tuán)隊(duì) 閱讀(3750) 評(píng)論(2)  編輯  收藏

    評(píng)論

    # re: SWT程序中嵌入第三方程序的窗口 2008-06-06 10:24 BeanSoft
    謝謝分享!  回復(fù)  更多評(píng)論
      

    # re: SWT程序中嵌入第三方程序的窗口 2012-03-20 15:16 sjq
    那在linux下沒有ole對(duì)象,怎么實(shí)現(xiàn)呢???  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 四虎成人免费影院网址| 四虎在线最新永久免费| 免费国产人做人视频在线观看| 亚洲影视自拍揄拍愉拍| 男男AV纯肉无码免费播放无码| 久久久久亚洲av无码专区喷水| 国产成人精品免费久久久久 | 国产高清视频在线免费观看| 亚洲六月丁香六月婷婷蜜芽| 妻子5免费完整高清电视| 亚洲人成电影网站久久| 日产乱码一卡二卡三免费| 国产精品亚洲一区二区无码| 亚洲高清最新av网站| 久久一区二区免费播放| 亚洲人成电影亚洲人成9999网| 8888四色奇米在线观看免费看| 亚洲人成在线中文字幕| 成人免费在线观看网站| 全黄A免费一级毛片| 亚洲精品蜜桃久久久久久| 最近2022中文字幕免费视频 | 亚洲精品天堂成人片?V在线播放| 亚洲黄片手机免费观看| 亚洲永久永久永久永久永久精品| 国产99视频精品免费观看7| 亚洲丶国产丶欧美一区二区三区| 亚洲午夜无码AV毛片久久| 亚欧免费一级毛片| 亚洲欧洲av综合色无码| 亚洲中文字幕第一页在线| 国产又大又粗又长免费视频| 国产精品亚洲精品爽爽| 亚洲AV日韩AV高潮无码专区| eeuss草民免费| 中文字幕在线观看免费视频| 亚洲尹人香蕉网在线视颅| 最近中文字幕无免费视频| 国产黄在线观看免费观看不卡| 久久亚洲sm情趣捆绑调教| 国产zzjjzzjj视频全免费|