Question:
In my program, I want to get the content of a specific edit box (or input box, text box...) of another process. For example, when the cursor is in the first column, "TextBox1" should be returned.

What I have tried
- Use GetDlgItem and GetWindowText
 - Send 
WM_GETTEXTmessage to the window, which was suggested in a Q&A in from the august 2001 issue of MSDN Magazine and a stackoverflow question 
char currentContext[256];
SendMessage(cfg.mainWnd, 
WM_GETTEXT, sizeof(currentContext) / sizeof(currentContext[0]), (LPARAM)currentContext);  
// cfg.mainWnd is the window which edit boxes lie in.
- EnumChildWindows and callback
 
HWND GetInputWindow()
{
    HWND activeWindow = GetForegroundWindow();
    // lpdwProcessId cannot be null...
    DWORD a = 1;
    LPDWORD lpdwProcessId = &a;
    auto threadId = GetWindowThreadProcessId(activeWindow, lpdwProcessId);
    std::cout << "ThreadId: " << threadId << " ProcessId: " << *lpdwProcessId << "\n";
    return activeWindow;
}
BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
{
    std::cout << "Being called.\n";
    char temp1[256];
    char temp2[256];
    GetClassNameA(hWnd, temp1, 255);
    if (!strcmp(temp1, "Edit"))
    {
        SendMessage(hWnd, WM_GETTEXT, sizeof(temp2) / sizeof(char), (LPARAM)temp2);
        return false;
    }
    printf("text: %s", temp2);
    MessageBox(NULL, temp2, L"test", MB_OK);
    return true;
}
// ...
HWND activeWindow = GetInputWindow();
EnumChildWindows(activeWindow, EnumChildProc, 0);
All the methods above just get "MainWindow", i.e. the title of the window in the example above.
Appendix
I used spy++ to monitor the window in the example. Just one window was catched.
