2015-06-15 2 views
1

В Delphi можно получить имя процесса и имя класса любого элемента управления, который щелкнул по всей системе через windows api.Как получить включенное свойство элемента управления?

имя процесса:

GetWindowThreadProcessId(Hwnd, ProcessId) 

по идентификатору процесса можно получить на имя процесса

Имя класса:

SetLength(ClassName, 255); 
SetLength(ClassName, GetClassName(Hwnd, pchar(ClassName), 255)); 

Есть простой способ похож на те, упомянутые выше получить свойство с включенным контролем? (без использования UIAutomation)

+4

'IsWindowEnabled' – TLama

+0

Является ли управление оконным? –

+0

Элемент управления может быть любым редактируемым элементом управления (например, TMemo, TEdit, но также и настраиваемыми элементами управления) – Airogat

ответ

2

Если у вас есть ручка окна для элемента управления, функция IsWindowEnabled сообщит вам, включена ли она.

Имейте в виду, что это действует на окно на уровне API, не уровень Delphi VCL. В Delphi могут быть элементы управления, которые не имеют оконных дескрипторов (все, что происходит от TGraphicControl, которое включает в себя TLabel и TSpeedButton), поэтому IsWindowEnabled, очевидно, ничего не может сказать вам об этих элементах управления.

Delphi не предоставляет никаких средств для запроса информации о произвольных элементах управления Delphi из других процессов. Если вам нужно что-то подобное, вам придется организовать внешний процесс для ответа на команды по вашему выбору. То есть вам нужно будет контролировать обе программы, чтобы вы могли поместить в них код для совместной работы.

Если GetWindowThreadProcessId и GetClassName уже говорил вам информацию, которую вы хотите, то IsWindowEnabled будет работать нормально, потому что все они имеют те же ограничения в отношении управления Delphi VCL.

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