新聞中心
本篇內(nèi)容主要講解“SWT程序中怎么嵌入第三方程序的窗口”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“SWT程序中怎么嵌入第三方程序的窗口”吧!
建湖網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,建湖網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為建湖近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的建湖做網(wǎng)站的公司定做!
在開(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è)置為被嵌套程序的父窗口。
核心代碼如下:
private void execute(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;
//隱藏啟動(dòng)
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("啟動(dòng)失敗!");
}
}
protected void startThirdExe() throws Exception {
//"notepad.exe"為待啟動(dòng)的程序名
execute("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);
}
到此,相信大家對(duì)“SWT程序中怎么嵌入第三方程序的窗口”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章題目:SWT程序中怎么嵌入第三方程序的窗口
瀏覽地址:http://www.ef60e0e.cn/article/jgggpc.html