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

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

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

    如鵬網 大學生計算機學習社區

    CowNew開源團隊

    http://www.cownew.com 郵件請聯系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
        在開發系統的時候經常需要嵌入外部的程序,比如將企業原有的系統集成到我們的系統中,而且要求看起來像和我們的程序一樣嵌入到我們的系統中,這時就要借助于Win32了。在以前使用VC、Delphi、C#開發的使用的時候可以直接調用Win32的API來操作,好在SWT中提供了Win32API的封裝,而且封裝的比較好,大部分都在org.eclipse.swt.internal.win32.OS這個類中。核心原理就是調用SetParent這個API將我們的程序中的某個控件設置為被嵌套程序的父窗口。具體原理可以參考我以前寫的《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;
      //隱藏啟動
      info.nShow = OS.SW_HIDE;
      boolean result = OS.ShellExecuteEx (info);
      if (lpFile != 0) OS.HeapFree (hHeap, 0, lpFile);
      if(result==false)
       throw new Exception("啟動失敗!");
     }
     
     protected void startNotePad() throws Exception {
      //"notepad.exe"為待啟動的程序名
      executeProg("notepad.exe");
      
      //等待NotePad.exe啟動并且初始化完畢,需要根據實際情況調整sleep的時間
      Thread.sleep(1000);  
      
      //"Notepad"為被嵌套程序窗口的ClassName(Win32級別),可以使用Spy++等工具查看
      int notepadHwnd = OS.FindWindow(new TCHAR(0,"Notepad",true),null);
      
      //&~WS_BORDER去掉內嵌程序邊框,這樣看起來更像一個內嵌的程序。如果需要顯示邊框,則將這兩行代碼刪除
      int oldStyle = OS.GetWindowLong(notepadHwnd, OS.GWL_STYLE);       
            OS.SetWindowLong(notepadHwnd, OS.GWL_STYLE, oldStyle&~OS.WS_BORDER);
           
            //composite為承載被啟動程序的控件
      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開源團隊 閱讀(3752) 評論(2)  編輯  收藏

    評論

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

    # re: SWT程序中嵌入第三方程序的窗口 2012-03-20 15:16 sjq
    那在linux下沒有ole對象,怎么實現呢???  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 皇色在线视频免费网站| 亚洲视频在线观看免费| 成人免费777777| 日韩亚洲不卡在线视频中文字幕在线观看| yy一级毛片免费视频| 亚洲日韩VA无码中文字幕| 免费看黄网站在线看 | 4hu四虎最新免费地址| 亚洲高清中文字幕| 亚洲性色AV日韩在线观看| 91精品免费国产高清在线| 亚洲av极品无码专区在线观看| 日本zzzzwww大片免费| 亚洲已满18点击进入在线观看| 四虎影院在线免费播放| 国产精品亚洲专区一区| 免费一级肉体全黄毛片| 丁香花在线观看免费观看图片 | 亚洲国产一区国产亚洲| 免费A级毛片无码A∨免费| 亚洲精品亚洲人成在线播放| 免费无码又爽又刺激高潮的视频| 风间由美在线亚洲一区| 亚洲中文字幕丝袜制服一区| 国产一区二区免费视频| 亚洲av无码电影网| 亚洲最大av无码网址| 日本黄色动图免费在线观看| 亚洲一区无码中文字幕乱码| 在线免费观看韩国a视频| 精品国产呦系列在线观看免费| 成年性生交大片免费看| 香蕉97碰碰视频免费| 香蕉视频在线观看亚洲| 国产成人免费AV在线播放 | 久久亚洲精品无码av| 国产AⅤ无码专区亚洲AV| 免费视频爱爱太爽了| 污污视频免费观看网站| 亚洲国产精品不卡在线电影| 永久免费av无码网站大全|