Delphi如何获取ShellExecute的返回值

问题遇到的现象和发生背景

Delphi相关问题。
ShellExecute的部分方法。
现在我有一个方法,例如我这个方法需要调用某个值,我用C语言在【文件】里面写了一个Hello.c文件,然后程序会固定输出一个Hello World程序,现在我需要用Delphi来调用这个Hello.exe,并且获得这个Hello.exe之后输出的Hello World返回值。如果用cmd调用这个exe,那可谓是非常简单。

我当然知道这里面是Hello World,但是我仍旧是需要知道如何获取其返回值。如果后期有人修改了Hello.c,并且修改了里面的Hello World,我需要知道这个这个exe将要输出的值是什么。

是的,这是个非常简单的程序,我希望能通过最少的代码解决这个问题。当然,我知道有一个函数为ShellExecute方法,但是这个函数似乎不能提供返回值,只能够运行相对应的exe文件。这种情况下我还是得问该如何获取其输出返回值。

当然,如果已经现有网址的话,那更好。我翻过百度、谷歌、bing,都找不到相关的代码与文档。如果有谁能够提意见,我会非常感谢的!

Delphi版本:11.1

问题相关代码,请勿粘贴截图
//这个是运行一个exe程序,我只是不知道其返回值罢了。
ShellExecute(Handle, nil, 'Hello.exe', '', nil, nil, SW_SHOWNORMAL);
运行结果及报错内容

没有运行结果,因为根本获取不到。

我的解答思路和尝试过的方法

尝试百度,尝试谷歌,尝试bing,但都没用,找不到相关代码,或者说是代码过于长了,以至于我找不到报错的地方。

我想要达到的结果

成功获取cmd运行的返回值。

CreateChildProcess创建子进程;
CreatePipe创建管道;
连接子进程的管道;
从管道获取子进程输出。

设置一个先决条件,也就是无论用户怎么调试【Hello.c】文件,都不会用到输入功能,程序将会一直保持着输出形式。
也就是说,无论如何,Hello.c文件里面将只有【printf('输出内容');】,且不含pause、不含if、不含while循环,不存在死循环等一系列设定。
这就是用户修改的Hello.c文件,自然,Delphi程序调用的时候,只会获得其输出内容,不仅如此,还会自动识别里面的【\n】换行标识符,并在Delphi的字符串里保存这个换行。Hello.c文件里面可能会有很多句printf,但也只会有printf,不会有别的任何一个语句。

Delphi程序需要做的,就是在Hello.c文件已经缺失,目标文件夹里面只有一个exe,就像【D:\Hello.exe】一样,只需获得其输出内容即可。

现在我需要一个方法,填入exe的文件路径,然后会输出其返回值,如果是一个窗口文件或者没有返回值,就将其当做空字符串返回,如果是个死循环,则主线程将会一直听在那里。是的,就是这样。