Ответ 1
В последних версиях Windows рекомендуемый способ сбора информации из одного приложения в другое (если вы не владеете целевым приложением, конечно) заключается в использовании технологии UI Automation. Википедия довольно хороша для получения дополнительной информации об этом: Microsoft UI Automation
В принципе, автоматизация пользовательского интерфейса будет использовать все необходимые средства для сбора того, что можно собрать.
Вот небольшой консольный прикладной код, который будет отслеживать пользовательский интерфейс других приложений. Запустите его и переместите мышь в разные приложения. Каждое приложение имеет различную поддержку различных "шаблонов автоматизации пользовательского интерфейса". Например, существует шаблон Value и шаблон Text, как показано здесь.
static void Main(string[] args)
{
do
{
System.Drawing.Point mouse = System.Windows.Forms.Cursor.Position; // use Windows forms mouse code instead of WPF
AutomationElement element = AutomationElement.FromPoint(new System.Windows.Point(mouse.X, mouse.Y));
if (element == null)
{
// no element under mouse
return;
}
Console.WriteLine("Element at position " + mouse + " is '" + element.Current.Name + "'");
object pattern;
// the "Value" pattern is supported by many application (including IE & FF)
if (element.TryGetCurrentPattern(ValuePattern.Pattern, out pattern))
{
ValuePattern valuePattern = (ValuePattern)pattern;
Console.WriteLine(" Value=" + valuePattern.Current.Value);
}
// the "Text" pattern is supported by some applications (including Notepad)and returns the current selection for example
if (element.TryGetCurrentPattern(TextPattern.Pattern, out pattern))
{
TextPattern textPattern = (TextPattern)pattern;
foreach(TextPatternRange range in textPattern.GetSelection())
{
Console.WriteLine(" SelectionRange=" + range.GetText(-1));
}
}
Thread.Sleep(1000);
Console.WriteLine(); Console.WriteLine();
}
while (true);
}
Автоматизация пользовательского интерфейса фактически поддерживается Internet Explorer и Firefox, но не Chrome, насколько мне известно. См. Эту ссылку: Когда будет доступен Google Chrome?
Теперь это только начало работы для вас:-), потому что:
-
В большинстве случаев все это имеет серьезные последствия для безопасности. Использование этой технологии (или прямой технологии Windows, такой как WindowFromPoint) потребует достаточных прав для этого (например, для администратора). И я не думаю, что у DExperience есть какой-то способ преодолеть эти ограничения, если они не устанавливают драйвер ядра на компьютере.
-
Некоторые приложения никому не будут раскрывать, даже с надлежащими правами. Например, если я пишу банковское приложение, я не хочу, чтобы вы следили за тем, что отобразит мое приложение:-). Другие приложения, такие как Outlook с DRM, не будут раскрывать что-либо по тем же причинам.
-
Только поддержка пользовательского интерфейса Поддержка текстового шаблона может предоставить больше информации (например, слова), чем просто весь текст. Увы, этот конкретный шаблон не поддерживается IE и FF, даже если они поддерживают глобальную автоматизацию пользовательского интерфейса.
Итак, если все это не сработает для вас, вам нужно будет погрузиться глубже и использовать методы распознавания OCR или формы. Даже при этом будут случаи, когда вы не сможете сделать это вообще (из-за обеспечительных прав).