Я пробовал MS UI AF, и я не уверен, что вы подразумеваете под гораздо лучшим решением. Это все равно что играть в йенгу, будучи завязанным.
Мое главное намерение состоит в том, чтобы включить дружественный к пользователюtext to speech
для личного использования на Win 7. Подход должен работать в Google Chrome, VS и Eclipse.
Следующий код создает глобальный хук клавиатуры дляctrl
+ alt
+ space
, называется hookEvent. Если событие запускается, оно начинает / прекращает говорить содержимое буфера обмена (которое может быть обновлено с помощьюctrl
+ 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);
}
Вопрос:Я бы предпочел не использовать буфер обмена. Или, по крайней мере, восстановить значение после, что-то вроде:
[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;
}
Какие у меня варианты?
Редактировать:
К моему удивлению, я обнаружил, что мой читатель буфера обмена - лучший путь. Я создал приложение для области уведомлений, которое реагирует на щелчок левой кнопкой мыши (говорящий буфер обмена) и щелчок правой кнопкой мыши (открывается меню). В меню пользователь может выбрать скорость, говорить или создать аудиофайл.