如何将嵌入窗口作为父级返回到Windows

时间:2014-04-22 09:56:52

标签: delphi embed delphi-xe5

我使用ShellExecute启动Adobe Reader。之后,我将窗口重定向到具有WinApi.Windows.SetParent的面板。现在,当我关闭我的应用程序时,Adobe Reader仍然在内存中活动,我必须在任务管理器中结束该过程才能打开新会话。

我的问题是:如何在我的应用中访问Adobe Reader?我该怎么说呢? (发送关闭和最小化等消息)如何将其作为父项返回到Windows?所有这些都在Delphi XE5

编辑:

这是我用来设置新父代码的代码:

ShellExecute(Handle, nil, PChar('C:\Tool\Temp.pdf'), nil,  nil, SW_SHOWNORMAL);
Sleep(500);
wHandle := FindWindow(NIL,'Temp.pdf - Adobe Reader');
WinApi.Windows.SetParent(wHandle, Panel1.Handle);

1 个答案:

答案 0 :(得分:1)

以下是我自己问题的答案:

  • 我把手柄保存到wHandle var。由于这是全局变量,我可以在我的代码中的任何地方访问它。例如。表单的OnClose事件

  • To' talk'到Abobe Reader我必须使用SendMessage方法并传递所需的参数。我可以使用wHandle指向Adobe Reader。 Adobe Reader的父母实际上没有问题。

  • 当我想将Adobe Reader作为父级返回给Windows时,我只需将Set1.Parent的NewParent参数从Panel1.Handle更改为0.

我通过阅读我的问题的评论得到了答案。他们都指出了我正确的方向。