I don’t know if it can be done through Windows Forms, but through WinAPI you can. As far as I know, it is also available in C # and is in some namespace, I do not remember which one.
The algorithm is as follows: you send a WM_GETTEXT message to the control, passing a pointer to an array of bytes. In it, you get a C-string. Now it needs to be somehow translated into string. I do not know .NET, I can not say how. This string will be the text of the control.
Getting child elements through WinAPI is more complicated. I do not know how to do it.