...键,比如ctrl+Enter,shif+D。可否借参考下MyHotKeyClass
发布网友
发布时间:2024-10-15 13:38
我来回答
共3个回答
热心网友
时间:2024-11-05 19:07
同问。
我试过,自定义命令是不支持“Shift+字母”这样的快捷键组合的。至于钩子,C#似乎并不支持真正的钩子,而且钩子有被杀毒软件误杀的可能性。
在主窗口的PreviewKeyDown事件中处理也会存在问题。——中文输入法打开时无效。
所以我是用输入法切换这个办法,一旦发现中文输入法打开
if (e.key == Key.ImeProcessed)
{
//MessageBox.Show(……
}
,就弹出个消息框,用户点击后自动关闭中文输入法:
System.Windows.Input.InputMethod.Current.ImeState =InputMethodState.Off;
——但这个办法显然不是太好。
实际上,即使中文输入法打开时,如果可以从PreviewKeyDown事件的参数e中取到“用户按下了哪个字母键引起了输入法的输入行为”,就可以解决“Shift+字母”组合键的问题了。但很遗憾,取不到——MSDN的说法应该并不正确(我在网上查过,似乎确实是.net的问题)。如果哪位高人知道如何取此字母键,请务必分享,先谢过。哈哈。
至于用遍历的办法判断二十六个字母键是否处于被按下状态我没试过。
ctrl+Enter貌似倒是比较容易实现:在PreviewKeyDown事件中判断用户是否按下了这个组合键,然后实现自定义逻辑,再令:e.Handled=true;
即可。
热心网友
时间:2024-11-05 18:59
这个我也不怎么会,我就想回下:怎么样给菜单项"打开"加上快捷键Ctrl+O,并且按这个组合键时能够 真正起作用!
热心网友
时间:2024-11-05 19:01
<Window.Resources>
<RoutedUICommand x:Key="Play" Text="play" />
<RoutedUICommand x:Key="Stop" Text="stop" />
<RoutedUICommand x:Key="Back" Text="back" />
<RoutedUICommand x:Key="Advance" Text="advance" />
<RoutedUICommand x:Key="Reaset" Text="reaset" />
</Window.Resources>
<Window.InputBindings>
<KeyBinding Modifiers="Ctrl+Alt" Key="I" Command="{StaticResource Play}"/>
<KeyBinding Gesture="Ctrl+Alt+2" Command="{StaticResource Stop}"/>
<KeyBinding Gesture="Ctrl+Alt+3" Command="{StaticResource Back}"/>
<KeyBinding Gesture="Ctrl+Alt+4" Command="{StaticResource Advance}"/>
<KeyBinding Gesture="Ctrl+Alt+5" Command="{StaticResource Reaset}"/>
</Window.InputBindings>
<Window.CommandBindings>
<CommandBinding Command="{StaticResource Play}"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed"/>
<CommandBinding Command="{StaticResource Stop}"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed_1"/>
<CommandBinding Command="{StaticResource Back}"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed_2"/>
<CommandBinding Command="{StaticResource Advance}"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed_3"/>
<CommandBinding Command="{StaticResource Reaset}"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed_4"/>
</Window.CommandBindings>
这个是我写过的一个项目的例子。。参考下