2010-11-11 51 views
0

我有一個傳統的應用程序實現爲Windows窗體.net應用程序。它允許腳本事件(使用vbs),但不允許改進它的UI。.Net應用程序窗口控件注入

是否有可能將一些自定義用戶控件注入遺留應用程序控件樹中,以便進一步與腳本功能進行通信?

p.s.傳統應用程序代碼被遺漏。從頭開始重寫它也是不可能的

回答

2

如果你付出了很多努力並付出了很多努力,我相信這將有可能使用反射和代碼重寫或任何這樣的事情。但是,它幾乎可以肯定會更簡單,更省時且更不易於通過更改源代碼然後重新編譯來修改GUI。

如果你的圖形用戶界面並不是靈活的,那麼應該通過重新設計或重新分解代碼來實現它,而不是通過濫用現有的代碼來實現它不應該做的事情。


更新#1:正如評論說,既然你不再擁有源代碼,重新編譯的選項了。除非您從頭開始重新編寫應用程序,或者通過反向工程工具(如.NET Reflector)部分獲取某些源代碼。 (假設代碼沒有被模糊處理。)

更新#2:如果你想下去列舉HWND S的路線(Win32的窗口句柄),你可能會感興趣的一個相關的問題,即:修改Windows的默認文件打開/保存對話框。如果您想在這些對話框中插入或更改控件,則基本上必須處理HWND,然後使用本機Win32 API函數通過這些操作控件​​。

+0

是的,的確如此。但是代碼錯過了:對不起,我從一開始就沒有提到 – 2010-11-11 20:36:35

+0

@Andrew:好的,根據你的應用程序的複雜程度,你可能需要考慮重寫它,這樣它才能更加靈活地開始或者部分用.NET反射器或任何其他反向工程工具檢索源代碼(只有在代碼沒有被模糊處理時,該建議才能起作用)。 – stakx 2010-11-11 20:39:21

+0

是否可以使用腳本從dll創建我的COM對象這種情況下,我的代碼將被加載到可執行文件中),然後通過使用win32 native函數遍歷句柄找到我想要的控件並將其轉換回Windows.Forms.Form實例,以獲取對.Controls屬性的訪問權限? – 2010-11-11 20:48:53