Это действительно сильно зависит от вашего сценария.
Функция FindWindowEx используется для поиска окон, имеющих определенный класс и, возможно, определенный фрагмент текста в окне. Функция EnumChildWindows просто для перечисления дочерних окон.
Я думаю, что производительность должна быть вашей последней заботой здесь. Первый - это выбор правильного API. Если вы действительно ищете окна определенного класса, используйте FindWindowEx, в противном случае EnumChildWindows. Нет никакого смысла в реализации функции, использующей EnumChildWindows, чтобы иметь то же поведение, что и FindWindowEx.
Теперь, после выбора правильного решения, если профилировщик определенно скажет вам, что решение слишком медленное, то вам следует подумать о том, чтобы вручную реализовать более конкретную функцию. Не раньше, чем.