如何启用带有附加操作的 Win32 控件并在禁用该操作时远程运行 OnExecute 事件? (在 Delphi 应用程序中)

问题描述 投票:0回答:1

使用

EnableWindow(Handle, True)
可以轻松启用控件,这可以在应用程序内完成,也可以从外部应用程序(如果您可以确定句柄)完成。这允许您启用禁用的按钮,并在
OnClick
事件中有代码时单击它。如果某个操作附加到按钮并且该操作被禁用,则此操作不起作用。

有没有办法从外部应用程序以类似的方式启用操作?

security delphi action
1个回答
0
投票

如果目标应用程序是在启用运行时包的情况下编译的,那么启用操作会更容易。为此,需要编译单独的 dll,它将迭代 Screen.Forms,找到必要的操作并启用它。最重要的是,这个 dll 应该在启用运行时包的相同 Delphi 版本中编译。当注入目标进程时,它将能够与通过全局变量访问的任何内容进行交互,例如应用程序或屏幕。 RAD Studio 中的 UI 测试就是这样工作的,但我没有这么说。

如果目标应用程序是在没有运行时包的情况下编译的,则任务会更加困难并且接近黑客攻击。在注入的 dll 中,您可以使用 FindControl 函数获取指向主机应用程序中的 VCL 对象的指针。之后应该可以使用 RTTI 与该对象进行交互。但在做任何事情之前,您需要以某种方式在主机的地址空间中找到 GetMemoryManager 过程的地址,并将 dll 中的 MM 替换为主机使用的地址。最有可能的是,在所有操作之后,任何卸载 dll 的尝试都会导致主机崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.