Process PowerBuilder应用程序如何充当另一个来宾可执行文件的主机?

Process PowerBuilder应用程序如何充当另一个来宾可执行文件的主机?,process,activex,executable,powerbuilder,Process,Activex,Executable,Powerbuilder,如何在PowerBuilder应用程序中将第三方可执行文件作为子进程运行 我想要实现的唯一目标是第三方exe文件的打开和关闭,就像我们在PowerBuilder中打开和关闭工作表一样 我不想给我的应用程序的用户任何其他选项来关闭第三方exe,而不关闭我的主PowerBuilder应用程序。同样,不允许用户在不运行PowerBuilder应用程序的情况下运行第三方exe 所有这些听起来像是某种ActiveX行为。所以我可以说,如果第三方exe成为ActiveX,那么我的目标就实现了。这只是我的猜测

如何在PowerBuilder应用程序中将第三方可执行文件作为子进程运行

我想要实现的唯一目标是第三方exe文件的打开和关闭,就像我们在PowerBuilder中打开和关闭工作表一样

我不想给我的应用程序的用户任何其他选项来关闭第三方exe,而不关闭我的主PowerBuilder应用程序。同样,不允许用户在不运行PowerBuilder应用程序的情况下运行第三方exe


所有这些听起来像是某种ActiveX行为。所以我可以说,如果第三方exe成为ActiveX,那么我的目标就实现了。这只是我的猜测。真的,我可以选择任何其他符合要求的选项

有一种方法可以像在PowerBuilder应用程序中打开响应窗口一样打开第三方exe。虽然我不确定这是否对你有用,因为你想像打开一个窗口一样打开它。无论如何,下面是代码

本地外部功能确定:

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
框架窗口/要从中打开第三方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
//如果第三方exe已打开,则不允许关闭窗口
如果是第三方管理,则
返回1
如果结束

我想它将帮助您根据您的功能找出可能需要使用“管理”第三方exe函数的其他位置。

如果您有其他应用程序的窗口句柄,您可能可以使用SetParent API函数将其附加到PowerBuilder应用程序中的空白页窗口。图纸窗口的调整大小事件必须使用PB函数Send转发调整大小事件。然后,工作表窗口的关闭事件将发送WM_close事件。

exe用Run()函数打开,但用户可以在主应用程序仍在运行时关闭它。这不是一项特权。不管它是什么类型的,无论是工作表还是响应都可以。Run函数显示了意外的行为,即使它一直发送-1的路径正确。这个问题最重要的部分是用户在使用第三方应用程序时不能关闭它。是的,如果exe以某种方式表现为响应或工作表窗口,那么我认为其他问题可以通过其他技巧解决。谢谢你给了一个好的开始。在SetParent之后,第三方exe无法关闭,但它并不总是正确的。子应用程序(第三方应用程序)的标题栏有时会在我不知道的事件中启用。当父应用程序关闭时,子应用程序不需要向子应用程序发送终止事件。这是自动完成的。此外,父对象的移动也会移动子对象,而不需要移动代码。子应用程序将始终以最大化状态打开,因此在打开窗口并调用SetParent后不需要调整大小。这几乎是我工作初期所需要的一切。非常感谢。请告诉我是否有用于win32 API调用的包装dll可用于PowerBuilder,以使函数调用更简单。我确实试着找到了,但是找不到。我的网站上有大量使用各种Windows API函数的示例。我真的不是100%确定它会起作用,好消息!您是如何获得第三方exe窗口句柄的?也许我会把这个想法作为我网站的一个新例子。我使用了来自imankurpatel000示例代码的相同FindWindowA函数,但这是一种非常尴尬的方式来处理运行过程,因为对于大多数windows应用程序,标题都在不断变化。例如,在记事本中打开的txt文件也会更改其标题。在这种情况下,FindWindowA将失败。幸运的是,我的第三方应用程序有静态标题,所以它为我工作。请参阅该代码的语法。非常感谢您的网站链接。