2013-11-25 4 views
2

Я создаю приложение для рабочего стола Windows с VS Express 2010. Я как бы новичок, когда дело доходит до C# и .Net, но я чувствую, что мне удалось довольно далеко. Однако теперь я застрял в небольшой проблеме, в которой мне нужна помощь или совет.Как зарегистрировать пользовательскую горячую клавишу?

Что я сделал до сих пор, так это то, что я сделал форму с вводом, где пользователь может определить горячую клавишу. Я сохранить эту информацию так:

private void newSessionHotkey_KeyDown(object sender, KeyEventArgs e) 
{ 
    Properties.Settings.Default.HotkeyNewSession = converter.ConvertToString(e.KeyData); 
    Properties.Settings.Default.Save(); 
} 

Но теперь, когда я сумел сохранить горячую клавишу, я заметил, что RegisterHotKey API ожидает, что горячие клавиши должны быть разделены на две переменные: одна с модификаторами и одним нажатием клавиши , Но из того, что я понимаю, у меня есть только объект Keys прямо сейчас.

Есть ли у кого-нибудь предложения, как я могу превратить свое сохраненное значение в то, что принимает RegisterHotKey?

+0

Не конвертируйте его в строку, сохраните его как значение Keys. Теперь это просто. –

ответ

0

Это зависит от того, используете ли вы WPF или WinForms-приложение, но способ WPF состоит в том, чтобы создать «команду», а затем добавить комбинацию ярлыков к команде, созданной вами как InputGesture.

В вашем коде:

public static RoutedCommand SaveCommand = new RoutedCommand(); 
SaveCommand.InputeGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control)); 

отдельно:

private void SaveCommandExecuted(object sender, ExecutedRoutedEventArgs e) 
{ /* Code to execute here */ } 

В вашем XAML:

<Window.CommandBindings> 
<CommandBinding Command="{x:Static local:MyWindow.SaveCommand}" Executed="SaveCommandExecuted"/> 
</Window.CommandBindings> 

В основном то, что это делает это создает Бодрствующее, который выглядит для событий клавиатуры на в окне, когда он находит тот, который соответствует вашей комбинации клавиш (и жест, прикрепленный к вашей команде o bject), тогда он запускает функцию, указанную в аргументе «Выполненный» XAML CommandBinding (как в: функции, выполняемой при выполнении команды).

Дайте мне знать, если вы используете WinForms, и я отредактирую, чтобы включить этот метод.

+0

Я использую WinForms. Я забыл упомянуть, что это глобальная горячая клавиша, которую я пытаюсь сделать здесь. Я создал форму для выбора горячей клавиши, и мне удалось сделать горячую клавишу с жестко закодированной горячей клавишей ... Но то, что я пытаюсь сделать сейчас, это преобразовать мою сохраненную ценность в то, что понимает RegisterHotKey. Я пробовал convert.ConvertFromString(), но это просто возвращает объект Keys, и мне кажется, что мне тоже нужен объект ModifierKeys? – arood

Смежные вопросы