PowerBuilder 应用程序如何充当另一个来宾可执行文件的宿主?
How PowerBuilder application act as host for another guest executable?
如何在我的 PowerBuilder 应用程序中 运行 将第 3 方可执行文件作为子进程?
我唯一想要实现的 objective 是第 3 方 exe 文件的打开和关闭就像我们在 PowerBuilder 中打开和关闭 Sheet 一样。
我不想为我的应用程序的用户提供任何其他选项来关闭第 3 方 exe 而无需关闭我的主 PowerBuilder 应用程序。同样的方式不允许用户 运行 没有 运行ning PowerBuilder 应用程序的第 3 方 exe。
所有这些听起来都像是某种 ActiveX 行为。所以我可以说,如果第 3 方 exe 成为 ActiveX,那么我的 objective 就实现了。这只是我的猜测。我真的可以选择满足要求的任何其他选项。
有一种方法可以在您的 PowerBuilder 应用程序中像响应 window 打开第 3 方 exe。虽然我不确定这是否对您有用,因为您想像 sheet window 一样打开它。不管怎样,下面是代码。
本地外部函数声明:
Function long FindWindowA (long classname, string windowname) LIBRARY "user32.dll" alias for "FindWindowA;Ansi"
Function Boolean BringWindowToTop (long classname) LIBRARY "user32.dll" alias for "BringWindowToTop;Ansi"
局部函数:
public function integer of_manage_third_party_exe ()
public function integer of_manage_third_party_exe ();///////////////////////////////////////////////////////////////////////////////////
//
// Returns 1 - window is not opened
// -1 : A window is opened so bring it to top
//
///////////////////////////////////////////////////////////////////////////////////
long ll_handle //unique id of window opened
ll_handle = FindWindowA(0,"Title of third party exe")
//If the window is not opened Then bring the window to top
If ll_handle > 0 Then
Post BringWindowToTop(ll_handle)
Return -1
End If
Return 1
您的框架 window/the window 的激活事件中的脚本,您将从中打开第 3 方 exe:
of_manage_third_party_exe()
CloseQuery 事件中的脚本:
//if third party exe is open then don't allow to close the window
If of_manage_third_party_exe ( ) < 0 Then
Return 1
End If
我想它会帮助您根据您的功能找出可能必须使用 of_manage_third_party_exe 函数的其他地方。
如果您有另一个应用程序的 window 句柄,您可以使用 SetParent API 函数将其附加到空白 sheet window在 PowerBuilder 应用程序中。 sheet window 的调整大小事件必须使用 PB 函数发送来转发调整大小事件。 sheet window 的关闭事件将发送 WM_CLOSE 事件。
如何在我的 PowerBuilder 应用程序中 运行 将第 3 方可执行文件作为子进程?
我唯一想要实现的 objective 是第 3 方 exe 文件的打开和关闭就像我们在 PowerBuilder 中打开和关闭 Sheet 一样。
我不想为我的应用程序的用户提供任何其他选项来关闭第 3 方 exe 而无需关闭我的主 PowerBuilder 应用程序。同样的方式不允许用户 运行 没有 运行ning PowerBuilder 应用程序的第 3 方 exe。
所有这些听起来都像是某种 ActiveX 行为。所以我可以说,如果第 3 方 exe 成为 ActiveX,那么我的 objective 就实现了。这只是我的猜测。我真的可以选择满足要求的任何其他选项。
有一种方法可以在您的 PowerBuilder 应用程序中像响应 window 打开第 3 方 exe。虽然我不确定这是否对您有用,因为您想像 sheet window 一样打开它。不管怎样,下面是代码。
本地外部函数声明:
Function long FindWindowA (long classname, string windowname) LIBRARY "user32.dll" alias for "FindWindowA;Ansi"
Function Boolean BringWindowToTop (long classname) LIBRARY "user32.dll" alias for "BringWindowToTop;Ansi"
局部函数:
public function integer of_manage_third_party_exe ()
public function integer of_manage_third_party_exe ();///////////////////////////////////////////////////////////////////////////////////
//
// Returns 1 - window is not opened
// -1 : A window is opened so bring it to top
//
///////////////////////////////////////////////////////////////////////////////////
long ll_handle //unique id of window opened
ll_handle = FindWindowA(0,"Title of third party exe")
//If the window is not opened Then bring the window to top
If ll_handle > 0 Then
Post BringWindowToTop(ll_handle)
Return -1
End If
Return 1
您的框架 window/the window 的激活事件中的脚本,您将从中打开第 3 方 exe:
of_manage_third_party_exe()
CloseQuery 事件中的脚本:
//if third party exe is open then don't allow to close the window
If of_manage_third_party_exe ( ) < 0 Then
Return 1
End If
我想它会帮助您根据您的功能找出可能必须使用 of_manage_third_party_exe 函数的其他地方。
如果您有另一个应用程序的 window 句柄,您可以使用 SetParent API 函数将其附加到空白 sheet window在 PowerBuilder 应用程序中。 sheet window 的调整大小事件必须使用 PB 函数发送来转发调整大小事件。 sheet window 的关闭事件将发送 WM_CLOSE 事件。