Установить значение текстового поля в диалоговом окне других приложений PInvoke - PullRequest
1 голос
/ 31 августа 2011

Можно ли использовать PInvoke (или какой-либо другой метод) для изменения значения текстового поля в диалоге, принадлежащем другому процессу?

Разработка в .NET.Я предположил, что наличие вызовов, таких как SetWindowText, будет указывать на то, что то же самое можно сделать для текстовых полей.Я бы предпочел не использовать SendKeys.

1 Ответ

4 голосов
/ 31 августа 2011

Конечно, это возможно.Вы можете проверить исходный код моей библиотеки LinqToWindows: https://github.com/Eskat0n/linqtowindows

Эта библиотека использует PInvoke для получения обработчика окна, указанного в предложении LINQ where, получает экземпляры дочерних окон и изменяет его свойство Text следующим образом (изменяя текствсе элементы редактирования в диалоговом окне открытия файла):

var shell = new Shell();

var openDialog = shell.Windows
    .Where(x => x.Text.Contains("Open"))
    .SingleOrDefault()
    .Cast<OpenFileDialog>();

var edits = openDialog.OfType<Edit>();
foreach (var edit in edits)
    edit.Text = "Hello Word!";

Код не проверен, но должен работать.Пожалуйста, посмотрите на тестовый проект, включенный в решение LinqToWindows, для дальнейших примеров.

...