SWT程式中嵌入第三方程式的視窗

2021-09-26 10:17:30 字數 1897 閱讀 3318

在開發系統的時候經常需要嵌入外部的程式,比如將企業原有的系統整合到我們的系統中,而且要求看起 來像和我們的程式一樣嵌入到我們的系統中,這時就要借助於win32了。在以前使用vc、delphi、c#開發的 使用的時候可以直接呼叫win32的api來操作,好在swt中提供了win32api的封裝,而且封裝的比較好,大部 分都在org.eclipse.swt.internal.win32.os這個類中。核心原理就是呼叫setparent這個api將我們的程式中的某個控制項設定為被巢狀程式的父視窗。 

核心**如下:  

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;  

//隱藏啟動 

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 startthirdexe() throws exception {   

//"notepad.exe"為待啟動的程式名   

execute("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);      

//視窗最大化   

第三方程式呼叫django的models

一下來自pythoncn的maillist 今天折騰了一上午,終於可以在外部的wx裡面呼叫django的models了。但是,突然發現我好好的中文介面一下變成英文了。後來檢查了一下發現原來是 os.environ django settings module website.settings add...

linux下Qt關閉第三方程式

最近在開發過程中,需要通過qt來開啟和關閉第三方應用,使用qprocess類返回的pid和使用top命令檢視到的程序id不一樣,不知道是不是用錯了類方法。後來在網上查到可以用pkill來關閉程序。以下是來自對pkill的描述 pkill命令可以按照程序名殺死程序。pkill和killall 應用方法...

C 呼叫第三方程式,傳送訊息

背景 啟動第三方登入程式,並補全賬號和密碼訊息 工具 spy 獲取第三方登入窗體的控制代碼 標題等 引用api dllimport user32.dll entrypoint findwindow public extern static intptr findwindow string lpcla...