Member 8100174
Для этого есть два шага:
1. Вам сфокусированного контроля. Мы можем получить текущее активированное окно через GetForegroundWindow API, а затем вызвать GetWindowThreadProcessId API, чтобы получить идентификатор потока текущего окна. Если это не текущий поток, вызовите API AttachThreadInput, чтобы присоединить поток к текущему потоку. После выполнения всех этих заданий мы можем вызвать GetFocus API, чтобы получить сфокусированный дескриптор управления.
2. Получите текст сфокусированного элемента управления. Для этого мы можем вызвать API SendMessageW, чтобы отправить сообщение WM_GETTEXT.
Вы можете получить подробную информацию из приведенного ниже кода:
частная система.Окна.Формы.Timer _timer = новая система.Окна.Формы.Таймер();
частный недействительными Form2_Load(объект отправителя, EventArgs в электронной)
{
//Инициализируйте таймер для обновления управляющего текста.
_таймер.Интервал = 1000;
_таймер.ТИК += новый EventHandler(_timer_Tick);
}
_timer_Tick недействительным(объект отправителя, EventArgs в электронной)
{
пробовать
{
текстовое поле textbox1.Текст = GetTextFromFocusedControl();
}
catch (исключение exp)
{
текстовое поле textbox1.Текст += ехр.Сообщение;
}
}
//Начните отслеживать и показывать текст соответствующего элемента управления.
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
_таймер.Начать();
}
//Получить текст сфокусированного элемента управления
частная строка GetTextFromFocusedControl()
{
пробовать
{
int activeWinPtr = GetForegroundWindow().ToInt32();
int activeThreadId = 0, processId;
activeThreadId = GetWindowThreadProcessId(activeWinPtr, out processId);
инт currentThreadId = исполнения();
if (activeThreadId != currentThreadId)
AttachThreadInput(activeThreadId, currentThreadId, true);
IntPtr activeCtrlId = GetFocus();
вернуть то gettext(activeCtrlId);
}
catch (исключение exp)
{
возвращение опыта.Сообщение;
}
}
//Получить текст элемента управления в положении мыши
частная строка GetTextFromControlAtMousePosition()
{
пробовать
{
Точка Р;
if (GetCursorPos(out p))
{
IntPtr ptr = WindowFromPoint(p);
if (ptr != IntPtr.Zero)
{
вернуть то gettext(ПТР);
}
}
вернуть "";
}
catch (исключение exp)
{
возвращение опыта.Сообщение;
}
}
//Получить текст элемента управления с его дескриптором
частная строка GetText(дескриптор IntPtr)
{
int maxLength = 100;
IntPtr buffer = Маршал.AllocHGlobal((maxLength + 1) * 2);
SendMessageW(handle, WM_GETTEXT, maxLength, buffer);
строка w = Маршал.PtrToStringUni(буфер);
Маршал.FreeHGlobal(буфер);
вернуть ж;
}
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out Point pt);
[DllImport("user32.dll", EntryPoint = "WindowFromPoint", CharSet = кодировка.Авто, ExactSpelling = true)]
публичный статический модификатор extern указателя IntPtr WindowFromPoint(Point на ПТ);
[DllImport("user32.dll", EntryPoint = "SendMessageW")]
публичный статический модификатор extern int и SendMessageW системы([атрибуты inattribute].Указателя IntPtr hwnd элемента, МСГ инт, инт параметр wparam, указателя IntPtr lparam должен);
public const int WM_GETTEXT = 13;
[DllImport("user32.dll", CharSet = кодировка.Авто, ExactSpelling = true)]
внутренний статический extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = кодировка.Авто, ExactSpelling = true)]
внутренний статический extern IntPtr GetFocus();
[DllImport("user32.dll", CharSet = кодировка.Auto, SetLastError = true)]
внутренний статический extern int GetWindowThreadProcessId(int handle, out int processId);
[Атрибута DllImport("user32 определяет", кодировка = кодировка.Анси, функции setlasterror = true, то ExactSpelling = true в)]
внутренний статический модификатор extern int с AttachThreadInput(инт idAttach, idAttachTo тип int, bool и fAttach);
[DllImport("kernel32.dll")]
внутренний статический extern int GetCurrentThreadId();
[DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]
внутренний статический extern int GetWindowText(IntPtr hWnd, [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString, int nMaxCount);
Дайте мне знать, если это не поможет.
Аланд Ли[^]