我有一個用.Net編寫的遺留應用程序。沒有可用的來源。它使用VB腳本通過事件處理擴展它的內部邏輯。所以它是com和.net的混合體。WinForms:Form.FromHandle爲加載到.net可執行代碼的進程主窗體返回null
我使用SpyUI應用程序,並觀察到用戶界面是用Windows窗體編寫的。控件標題爲.Net風格&它看起來像windows窗體(vC++和vb UI看起來完全不同)。
我想通過實現主窗體的System.Windows.Forms.Form實例來擴展應用程序UI並修改控件樹。
所以我寫VB腳本代碼創建我的COM對象,像:
Set obj = CreateObject("MyUiExtender")
obj.InjectIntoUi()
我試圖讓該進程對象的主要形式手柄裝入這個代碼的工作:
Process.GetCurrentProcess().MainWindowHandle; // a meaningfull value
Process.GetCurrentProcess().MainWindowTitle; // the title of the application
到目前爲止好,但下面不工作 - >返回null
var mainForm = Control.FromHandle(Process.GetCurrentProcess().MainWindowHandle)
我OBJE ct被加載到可執行文件中,並嘗試爲同一進程獲取表單實例。我想這是一種應用邊界問題。我的代碼工作完美的,如果我的COM對象通過
t = Type.GetTypeFromProgID("MyUiExtender")
dynamic c = Activator.CreateInstance(t)
c.InjectIntoUi();
加載到.NET應用程序,我想用VB腳本遺址應用程序邊界莫名其妙......
是否仍然有可能得到主要應用形式,例如作爲Windows.Forms.Form類的實例?