我有一个简单的 Windows Forms 应用程序,它只不过是包含Form
的{{1}}。
我正在覆盖ProcessCmdKey方法,它运行正常。但是,虽然WebBrowser
具有焦点,但WebBrowser
仍然被调用,但是,它不再获取密钥代码。
ProcessCmdKey
答案 0 :(得分:1)
你是否尝试重写WebBroswer的ProcessCmdKey ......我依稀回忆起浏览器在冒泡事件中做了一些时髦的事情......与安全性有关。是的,这是:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx说:
在消息预处理期间调用此方法来处理命令键。命令键是始终优先于常规输入键的键。命令键的示例包括加速器和菜单快捷方式。该方法必须返回true以指示它已处理命令键,或者false以指示该键不是命令键。仅当控件托管在Windows窗体应用程序中或作为ActiveX控件时才会调用此方法。
ProcessCmdKey方法首先确定控件是否具有ContextMenu,如果是,则启用ContextMenu来处理命令键。如果命令键不是菜单快捷方式且控件具有父级,则该键将传递给父级的ProcessCmdKey方法。实际效果是命令键在控制层次结构中“冒泡”。除了用户按下的键之外,键数据还指示与键同时按下哪些修改键(如果有的话)。修饰键包括SHIFT,CTRL和ALT键。
我认为它不会让你在表单级拦截浏览器密钥......我认为事件是由WebBrowser控件吃掉的。
干杯。基思。
编辑:
http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx说:
KeyCode用于从键值中提取密钥代码的位掩码。 修饰符用于从键值中提取修饰符的位掩码。
,该示例包含以下行:
if(e.KeyCode != Keys.Back)
if (Control.ModifierKeys == Keys.Shift) {
所以我猜你需要把那把钥匙旋转到它的组成部分。
答案 1 :(得分:1)
不幸的是,我无法从ProcessCmdKey
+ Lo / Hi单词中抓住 Ctrl + S 事件。
但是我可以从WebBrowser
文件中找到它们:
WebBrowser browser = new WebBrowser();
...
browser.Document.Body.KeyDown += new HtmlElementEventHandler(Body_KeyDown);
...
private void Body_KeyDown(Object sender, HtmlElementEventArgs e)
{
if(e.KeyPressedCode==83 && e.CtrlKeyPressed)
MessageBox.Show("Give me some cookies");
}