Como obter o texto selecionado de um aplicativo ativo, sem usar uma área de transferência

O que eu estou fazendo

A minha principal intenção é permitir uma utilização amigáveltext to speech para uso pessoal no Win 7. A abordagem deve funcionar no Google Chrome, VS e Eclips

Code example:

O código a seguir cria um gancho de teclado global paractrl + alt + space, chamado hookEvent. Se o evento for disparado, ele inicia / pára de falar o conteúdo da área de transferência (que pode ser atualizado comctrl + 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);
    }
Questão

Eu preferiria não usar a área de transferência. Ou pelo menos, restaurando o valor depois, 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;
    }

Quais são minhas opções?

Editar

Para minha surpresa, descobri que o leitor da área de transferência é o melhor caminho a percorrer. Criei um aplicativo da área de notificação, que responde ao clique esquerdo (área de transferência) e clique com o botão direito (o menu é aberto). No menu, o usuário pode acelerar, falar ou criar um arquivo de áudi

questionAnswers(2)

yourAnswerToTheQuestion