2011-12-29 3 views
2

У меня есть программа, которая не моя, у которой есть 3 коробки TEdit и 3 объекта TButton. Я могу легко получить кнопку с помощью ручки:Как получить hWnd из окна редактирования, когда есть несколько?

IntPtr buttonhwnd = FindWindowEx(mainhwnd, IntPtr.Zero, "TButton", "Button Text"); 

Но я не могу сделать то же самое с ящиками Edit, так как они не имеют какой-либо текст в них. Поэтому FindWindowEx(hWnd, IntPtr.Zero, "TEdit", "") может получить все из них. Тем не менее, он получает только первый, с которым он сталкивается, и мне нужен последний. Есть ли способ пропустить несколько ячеек или провести различие между ними?

+0

это Borland VCL (delphi или C++ Builder)? - В любом случае, я думаю, вы должны попробовать Enum все дочерние окна вашей формы, есть api, называемый догадываться, что? EnumChildWindows - см. Этот ответ для некоторых идей ... http://stackoverflow.com/a/821097/559144 –

+0

Программа, которую я пытаюсь получить, находится в Delphi, и я использую C#. Что касается вашей ссылки, я думаю, что на примере отсутствуют некоторые объявления, потому что я не могу заставить .NET их принять. Я пошел в PInvoke и попытался использовать их определение, но это то же самое. EnumWindow (s) Proc и EnumWindows нигде не определены. Использование делегата для EnumWindowsProc не учитывает EnumWindowProc и не соответствует параметрам, приведенным в примере. Но я скорее всего делаю что-то неправильно. – ozdrgnaDiies

+1

В общем, вы должны использовать интерфейсы доступа для программного программирования UI. Тем не менее, вы можете видеть, имеют ли элементы управления уникальные идентификаторы, и в этом случае вы можете использовать их для их различения. –

ответ

3

Я нашел ответ:

Учитывая есть 3 управления, я могу использовать:

//Get first occuring Edit box 
IntPtr edithWnd = FindWindowEx(mainhWnd, IntPtr.Zero, "TEdit", ""); 
//And the second 
edithWnd = FindWindowEx(mainhWnd, edithWnd, "TEdit", ""); 
//And finally the one I want 
edithWnd = FindWindowEx(mainhWnd, edithWnd, "TEdit", ""); 

Хотя не динамична, она получает работу для меня. Тем не менее, для будущих ссылок для людей, которым это может понадобиться: есть ли способ различать их, кроме того, что они знают, в какой позиции Z они находятся?

+0

Это в значительной степени. Если нет способа идентифицировать их, вам просто нужно перечислить их всех и «угадать» или продолжать получать следующий (не безопасный), пока не найдете то, что считаете правильным. – Deanna

Смежные вопросы