2009-11-01 51 views
1

iI有任何方法可以將GUI組件添加到已在運行的應用程序中嗎?將GUI組件添加到預編譯的應用程序

I.E.在第三方GUI中添加額外的選項卡?

我有一個第三方應用程序,我需要在選項卡式界面中添加一個額外的選項卡(或者甚至是一個鏈接到新窗體的按鈕)。

我可以看到UISpy和Spy ++的UI組件,但不能找到一種方式來改變或增加他們...

任何想法?也許改變記憶?

更新:
我創建環繞第三方應用程序的應用程序是.NET,但第三方應用程序是用VB6

+0

只是爲了澄清:你正在談論一個沒有被設計來支持這個應用程序,正確的? – 2009-11-01 23:49:02

+0

是的,應用程序是由外部源編寫的,因此我無法以編程方式執行此操作。 該應用程序具有選項卡式界面,並在VB6中編寫了預.NET程序。 – Darbio 2009-11-02 00:02:30

+0

我的建議是不要這樣做,因爲您發現的任何解決方案都可能非常脆弱,並導致第三方應用程序偶爾崩潰。您可以聯繫第三方應用程序的作者並討論解決方案嗎? – MarkJ 2009-11-02 12:25:40

回答

2

我想這是與反思完全可能的,藉助於假設它沒有被混淆,則爲Reflector。探索反射的源代碼,直到找到表單的類和要修改的表單的實例,然後用反射調用Controls.Add方法或其他任何需要的方法。但是除非你知道究竟是你正在做什麼,你可能會遇到一些來自應用程序的意外行爲。

1

我認爲這是一個.NET WinForm應用程序。如果您沒有源文件並且該應用程序不太大,則可以嘗試「反編譯」它並添加代碼以成爲新的應用程序。

我是Lutz Roeder的反射器的一個很好的粉絲,它從CLR代碼庫中生成代碼。 這是他的工具鏈接。 http://www.lutzroeder.com/dotnet/

更新:

darkassassin93是正確的,希望應用程序不模糊:)

+0

我創建的用於封裝第三方應用程序的應用程序是.NET,但第三方應用程序是用VB6編寫的,所以編譯器不會工作得很好,但我會尋找利益:) :) – Darbio 2009-11-01 23:46:20

+0

@JD:我明白了,我已經用您的評論更新了您的問題,並且還添加了「VB6」標籤。 – 2009-11-01 23:52:43

2

你可以用ResHacker。

http://www.angusj.com/resourcehacker/

基本上,每個GUI形式被保存爲一個特定的Windows可執行文件的內部的資源。 ResHacker有一個內置的GUI編輯器,用於編輯「對話框」(因爲它們在ResHacker中被引用)。

+0

我已經打開了exe文件(和相同目錄下的幾個dll文件),並且在res黑客中沒有對開樹。是否可以在VB6中的另一個文件(例如dll)中保存對話框? – Darbio 2009-11-02 00:07:32

+0

是的,資源也可以保存在DLL文件中。如果我是你,我會搜索目錄中的所有DLL/EXE/OCX文件以查找對話框。 – 2009-11-02 00:57:54

+1

VB6不使用對話框的資源,所以這不會在他的情況下工作 – wqw 2009-11-02 12:02:50

1

你應該有很強的理由這樣做。

我認爲你可以Add Tab using pure WinAPITabCtrl_InsertItem Macro

開始如果你有HWND的TabControl的你可以嘗試添加自己的標籤。與TabCtrl_InsertItem。雖然我不認爲有可能從另一個過程中做到這一點。但你應該嘗試。

+0

我會嘗試這個 - 我已經開始使用我的包裝程序的過程,所以有窗口句柄,我可以很容易地找到標籤控件的HWND。將回報。 – Darbio 2009-11-02 00:04:46

+0

這可能會導致第三方應用程序的代碼出現問題。例如,他們可能會處理選項卡單擊事件或讀取屬性的標籤數量(合理的假設只有*他們*選項卡將存在)。我個人強烈建議你不要使用這種方法。 – MarkJ 2009-11-02 13:16:27

相關問題