有一現成程式(除了exe檔案外還有dll、dat檔案),為了想要那個程式的功能,現在唯一辦法是把exe嵌入到form去來展示效果。
尋求詳細添加的步驟及代碼。
萬分感謝。
請不要復制百度上的內容,我已經全部找遍了,都沒有科學的解決方法。
uj5u.com熱心網友回復:
這是不現實的,要別的程式的UI顯示在自己的表單里面并不難,但是你的程式卻無法與現成的程式進行交流,包括資料和功能的交流。舉個例子,你想要某個軟體的繪圖功能,你希望你的程式提供資料給這二個程式,然后這個程式繪好圖之后將影像資料回傳到自己的程式,或者直接顯示出來,這樣是做不到的。即使做到,要不就是使用記憶體和執行緒注入之類的手段,非常麻煩;另外一種有可能的,但是支持這種技術的程式不多,那就是OLE。如果現成的程式是OLE服務器,那你就可以通過OLE技術在VB中添加對他的參考,從而像操作物件一樣通過代碼操作那個軟體。舉個例子,Word,你可以在VB的【參考】視窗將Word.exe,即Word的程式添加進來,然后利用其中提供的Application,document等物件操作Word。這是因為Word的程式本身是OLE服務器,他提供程式與程式之間的功能和資料的交流介面。可以嘗試在VB的【參考】視窗單擊瀏覽,找到exe之后嘗試把他加進來,如果可以則這個exe很有可能是OLE,如果提示不能加載就肯定不是OLE
不過,如果你說我只要把現成的那個軟體的界面嵌入到自己的表單里,不需要功能和資料的交流,這個就好實作。思路如下:
①首先你需要一個“句柄查詢器”,百度搜索這個詞有一堆
②啟動你現有的軟體。例如你要把這個軟體的“ABC[xxx]”視窗嵌入你的程式里,就用那個句柄查詢器去捕獲這個視窗(句柄查詢器的基本用法,按住一個按鈕不放,然后移動滑鼠到需要的表單上,查詢器就會自己去查那個視窗的資料了,找到沒這功能的就換一個吧)。查看那個視窗的類名,這才是1,2部最主要的目的。
③在自己的程式里宣告API函式findwindow函式(具體的宣告百度“findwindow”)
④呼叫findwindow函式傳入之前查到的類名作為引數,這個API函式可以找到符合你所給的類名的視窗,并回傳這個視窗的句柄。查看回傳來的句柄是否和查詢器查到的一樣,一樣的話就可以往下做了。
⑤在自己的程式里宣告API函式SetParent函式(具體的宣告百度“SetParent”)
⑥呼叫SetParent函式,將自己的視窗的句柄(例如視窗Form1的句柄就是Form1.hwnd屬性的值)和拿到的句柄作為兩個引數傳進函式,就可以重設“ABC[xxx]”視窗的父視窗為你自己的視窗。這樣“ABC[xxx]”視窗就嵌入到你的視窗了。
基本上就說這些,不過覺得你要的應該還是兩個程式有資料或功能上的交流,因為你說“為了想要那個程式的功能”,那如果不是OLE的話就放棄吧,基本上沒辦法,或者坐等更高級的大神了~~
uj5u.com熱心網友回復:
夜里寫了這么多辛苦啦。
我不是想實作我的程式里能直接使用它功能。
只是直接加了個外殼而已,僅此這樣。
uj5u.com熱心網友回復:
那就聽1樓的SetParent一下吧,同時注意一下當主表單改變大小時子表單也匹配好,以及主表單關閉時通知子表單關閉uj5u.com熱心網友回復:
帖主莫非要在VB.Form里面實作一個WindowsXP虛擬機?!
uj5u.com熱心網友回復:
VB控制外部視窗為自己的子表單是這個意思嗎
uj5u.com熱心網友回復:
就是這個意思。
求解決方案。
對方程式是exe檔案跟dll檔案。。我用資源管理器生成RES后怎么釋放出來
uj5u.com熱心網友回復:
shell("abc.exe")
uj5u.com熱心網友回復:
那就聽1樓的SetParent一下吧.自己就一個MDIFORM,把EXE視窗當成子視窗放進來就OK了。
uj5u.com熱心網友回復:
沒有你說的那樣的功能,你可以在視窗里面放網頁,放flash,但就是放不了應用程式,uj5u.com熱心網友回復:
在資源編輯器中添加‘自定義資源’就可以把那些 .exe、.dll加到里面去了。
然后你的程式啟動后, LoadResData()到動態位元組陣列中。
從 位元組陣列 寫到磁盤檔案,用Binary模式寫,這個你沒問題的吧。
把那些檔案都寫到同一個檔案夾中,就可以Shell來運行它了。
(如果它原來還有一些子目錄和子目錄內的檔案,要注意‘相對路徑’跟原來一樣就行)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/153396.html
標籤:VB基礎類
下一篇:易語言怎么做外掛啊
