我有两个进程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;如果以及如何实现这一点,你有什么想法吗?
发布于 2013-04-22 18:53:31
如果您确实有两个独立的进程,那么您需要进程间通信(IPC)。例如,您可以使进程A成为进程外的COM服务器,该服务器由进程B以Office自动化的方式使用。这是许多选项之一,但它们都需要IPC。
但是,这听起来有点像您在同一进程中有一个可执行文件和一个DLL。在这种情况下,您有两个独立的VCL实例。这意味着您不能在两个模块之间传递TForm对象,或者任何其他的VCL对象。实际上,您不能在这两个模块之间传递任何类,因为您不能在模块之间共享类。模块A中的TObject与模块B中的TObject不同。
您的主要选项包括:
https://stackoverflow.com/questions/16145264
复制相似问题