我有两个进程A和B.进程A是一个包含表单TMainForm
的VCL表单应用程序。进程B是一个DLL,我想从中远程控制这个表单。某事(在过程B中):
MainForm := TMainForm.Create (nil);
MainForm.Handle := FindWindow ('TMainForm', 'MainForm Title'); // does not compile
// These two lines should remote-control the form in process A
MainForm.Edit1.Text := 'Test';
MainForm.Button1.Click;
任何想法是否以及如何做到这一点?
答案 0 :(得分:3)
如果您确实有两个独立的进程,那么您需要进程间通信(IPC)。例如,您可以将进程A转换为进程外COM服务器,该服务器由进程B以Office自动化的方式使用。这是许多人的一种选择,但它们都需要IPC。
但是,听起来有点像你在同一个进程中有可执行文件和DLL。在这种情况下,您有两个独立的VCL实例。这意味着您无法在两个模块之间传递TForm
对象或任何其他VCL对象。实际上,由于无法在模块之间共享类,因此无法在这两个模块之间传递任何类。模块A中的TObject
与模块B中的TObject
不同。
您的主要选项是: