Перенаправление текста в «Блокнот»


Автор: Рэймонд Чен
Оригинал статьи:Piping to notepad.

Сегодняшняя программка, посвященная новой видеозаписи от NotepadConf, помещает содержимое стандартного потока ввода в окно Блокнота.

using System;
using System.Diagnostics;
using System.Windows.Automation;
using System.Runtime.InteropServices;

class Program
{
  static void Main(string[] args)
  {
    // Считываем содержимое входного потока в строку
    var everything = Console.In.ReadToEnd();

    // Запускаем новый экземпляр "Блокнота"
    var process = new Process();
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.FileName = @"C:\Windows\System32\notepad.exe";
    process.Start();
    process.WaitForInputIdle();

    // Находим поле редактирования текста
    var edit = AutomationElement.FromHandle(process.MainWindowHandle)
        .FindFirst(TreeScope.Subtree,
                   new PropertyCondition(
                       AutomationElement.ControlTypeProperty,
                       ControlType.Document));

    // Вставляем текст в это окно.
    var nativeHandle = new IntPtr((int)edit.GetCurrentPropertyValue(
                      AutomationElement.NativeWindowHandleProperty));
    SendMessage(nativeHandle, WM_SETTEXT, IntPtr.Zero, everything);
  }

  [DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Unicode)]
  static extern IntPtr SendMessage(
    IntPtr windowHandle, int message, IntPtr wParam, string text);
  const int WM_SETTEXT = 0x000C;
}

Комментарии в достаточной мере поясняют шаги программы. Не самой очевидной может оказаться часть программы, связанная с UI Automation: мы берём главное окно Блокнота, затем просим UI Automation найти в нём элемент Document.

Из этого элемента мы извлекаем дескриптор окна, переводим в 32-разрядное значение и посылаем сообщение WM_SET­TEXT, чтобы вставить текст в окно Блокнота.

Если сохранить эту программу под именем 2np, следующая команда

dir | 2np

откроет Блокнот со списком содержимого каталога.

Измените одну строку кода, и программка будет запускать Wordpad.

Реклама
Запись опубликована в рубрике перевод, программирование с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s