У меня есть программа, которая не моя, у которой есть 3 коробки TEdit и 3 объекта TButton. Я могу легко получить кнопку с помощью ручки:Как получить hWnd из окна редактирования, когда есть несколько?
IntPtr buttonhwnd = FindWindowEx(mainhwnd, IntPtr.Zero, "TButton", "Button Text");
Но я не могу сделать то же самое с ящиками Edit, так как они не имеют какой-либо текст в них. Поэтому FindWindowEx(hWnd, IntPtr.Zero, "TEdit", "")
может получить все из них. Тем не менее, он получает только первый, с которым он сталкивается, и мне нужен последний. Есть ли способ пропустить несколько ячеек или провести различие между ними?
это Borland VCL (delphi или C++ Builder)? - В любом случае, я думаю, вы должны попробовать Enum все дочерние окна вашей формы, есть api, называемый догадываться, что? EnumChildWindows - см. Этот ответ для некоторых идей ... http://stackoverflow.com/a/821097/559144 –
Программа, которую я пытаюсь получить, находится в Delphi, и я использую C#. Что касается вашей ссылки, я думаю, что на примере отсутствуют некоторые объявления, потому что я не могу заставить .NET их принять. Я пошел в PInvoke и попытался использовать их определение, но это то же самое. EnumWindow (s) Proc и EnumWindows нигде не определены. Использование делегата для EnumWindowsProc не учитывает EnumWindowProc и не соответствует параметрам, приведенным в примере. Но я скорее всего делаю что-то неправильно. – ozdrgnaDiies
В общем, вы должны использовать интерфейсы доступа для программного программирования UI. Тем не менее, вы можете видеть, имеют ли элементы управления уникальные идентификаторы, и в этом случае вы можете использовать их для их различения. –