Cómo obtener el texto seleccionado de una aplicación activa, sin usar un portapapeles

Qué estoy haciendo

Mi intención principal es permitir que el usuario sea amigabletext to speech para uso personal en Win 7. El enfoque debería funcionar en Google Chrome, VS y Eclipse.

Code ejemplo:

l siguiente código crea un enlace de teclado global paractrl + alt + space, llamado hookEvent. Si se dispara el evento, comienza / deja de hablar del contenido del portapapeles (que se puede actualizar conctrl + c).

    /// <summary>
    /// KeyboardHook from: http://www.liensberger.it/web/blog/?p=207
    /// </summary>
    private readonly KeyboardHook hook = new KeyboardHook();
    private readonly SpeechSynthesizer speaker = //
        new SpeechSynthesizer { Rate = 3, Volume = 100 };

    private void doSpeaking(string text)
    {
        // starts / stops speaking, while not blocking UI
        if (speaker.State != SynthesizerState.Speaking)
            speaker.SpeakAsync(text);
        else
            speaker.SpeakAsyncCancelAll();
    }
    private void hookEvent(object sender, KeyPressedEventArgs e)
    {
        this.doSpeaking(Convert.ToString(Clipboard.GetText()));
    }
    public Form1()
    {
        InitializeComponent();
        hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hookEvent);
        hook.RegisterHotKey(ModifierKeysx.Control|ModifierKeysx.Alt, Keys.Space);
    }
Pregunta

Preferiría no usar el portapapeles. O al menos, restaurando el valor después, algo como:

    [MethodImpl(MethodImplOptions.Synchronized)]
    private string getSelectedTextHACK()
    {
        object restorePoint = Clipboard.GetData(DataFormats.UnicodeText);
        SendKeys.SendWait("^c");
        string result = Convert.ToString(Clipboard.GetText());
        Clipboard.SetData(DataFormats.UnicodeText, restorePoint);

        return result;
    }

¿Cuáles son mis opciones

Editar

Para mi sorpresa, descubrí que mi lector de portapapeles es la mejor manera de hacerlo. Creé una aplicación de área de notificación, que responde al clic izquierdo (portapapeles) y al botón derecho (se abre el menú). En el menú, el usuario puede acelerar, hablar o crear un archivo de audio.

Respuestas a la pregunta(2)

Su respuesta a la pregunta