ОК, я кое-что понял.
Начальная точка теперь точно знает дескриптор окна, мы знаем только частичный заголовок окна, поэтому первое, что нужно сделать, это найти это главное окно:
...
EnumWindows((WNDENUMPROC)on_enumwindow_cb, 0);
...
, который перечисляет все окна на рабочем столе. Это делает обратный вызов с каждым из этих оконных дескрипторов:
BOOL CALLBACK on_enumwindow_cb(HWND hwndWindow, LPARAM lParam) {
TCHAR wsTitle[2048];
LRESULT result;
result = SendMessage(hwndWindow, WM_GETTEXT, (WPARAM) 2048, (LPARAM) wsTitle);
...
и используя wsTitle и немного магии регулярных выражений, мы можем найти желаемое окно.
Используя ранее упомянутый Spy ++, я мог выяснить имя класса поля редактирования текста и использовать его для поиска нужного поля в hwndWindow :
hwndEdit = FindWindowEx(hwndWindow, NULL, L"RichEdit20W", NULL);
и тогда мы можем прочитать текст из этого поля:
result = SendMessage(hwndEdit, WM_GETTEXT, (WPARAM) 4096, (LPARAM) wsText);
Надеюсь, это поможет любому, кто борется с той же проблемой!