線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2072
推到 Plurk!
推到 Facebook!

請問如何將應用程式(例如:word) 嵌入至表單當中

答題得分者是:jow
linly
一般會員


發表:42
回覆:37
積分:15
註冊:2007-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-07 18:10:07 IP:218.168.xxx.xxx 訂閱
         做出來的效過類似 download.yousendit.com/2A1E363E2D468F90
查了書、看了網頁、BBS 也試了一些方法仍舊是無法達到我的需求,在其
他地方請教也是不告而終,連續弄了四五天還是失敗,希望在貴站可以獲
得一些解決,拜託了。目前為止的寫法是,使用者選擇一個要開啟的應用
程式,在按下 button 後啟動 runApp,目的除了開啟應用程式外,也把它
嵌入到我的表單元件當中。

以下的程式碼中 EnumWindows 的部份原先是使用 FindWindow ,
但似乎它不能把之中的兩個參數都設成 NULL(會發生存取被拒的錯誤代碼)。
另外,EnumWindows 搜尋的是 top-level 的視窗,這種視窗指的是沒有
Parent?我本來也有使用 GetParent 來作為判斷視窗的依據。
以下為程式碼:


[註] 我是使用 .NET 作為開發環境,不過這部份用到都是純 Win32 的 API,
希望有經驗的大大可以指點我一下,不要不理我。

[code cpp]
static STARTUPINFO si; // 全域變數,CreateProcess 所需的參數
static PROCESS_INFORMATION pi; // 全域變數,CreateProcess 所需的參數
...
...

// 初始化上面兩個全域變數
ZeroMemory(&si,sizeof(STARTUPINFO));
ZeroMemory(&pi,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;

// 呼叫 CrreateProcess 開始應用程式
CreateProcess(lpApplicationName,NULL,NULL,NULL,false,0,NULL,NULL,&si,&pi) ;
// 函式等候,直到參數之處理緒進入待機狀態
WaitForInputIdle(pi.hProcess,INFINITE);

// 列舉所有 TOP Level 視窗(這指的是沒有父視窗的嗎?)
EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)(HANDLE)hwnd);

// 設定那個應用程式的父視窗以及位置大小,已達到嵌入的結果
SetParent(childHwnd, hwnd);
SetWindowPos(childHwnd, HWND_TOP, 30, 30, maxW, maxH, 4);
...
...

// EnumWindows 所需要的 CALLBLACK function
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lparam ) {
GetWindowThreadProcessId(hwnd,&lpdwProcessId);
if( lpdwProcessId == pi.dwProcessId ) {
childHwnd = hwnd;
}
return true;
}

[/code]
編輯記錄
linly 重新編輯於 2007-10-07 18:12:05, 註解 無‧
linly 重新編輯於 2007-10-07 18:13:35, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-07 18:36:26 IP:123.193.xxx.xxx 訂閱
如果我沒弄錯你的需求, 你是不是要在應用程式A內去
開啟另一個應用程式B,然後B的parent設定成A, 由A來
負責承載整個需求的顯示工作?

然後A做A的, B做B的,再Pass B 的HANDLE 給 A做一些控制?

可是你如何得知B開放哪些功能給A叫用?

建議你去研究COM/DCOM 中對於 In-Place Activation 的應用方式,
這種應用程式內坎的方式, 不過這種方式或許和你的需求有些不同.

個人看法,僅供參考.
編輯記錄
jow 重新編輯於 2007-10-07 18:37:40, 註解 無‧
系統時間:2024-11-24 14:01:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!