拦截键盘消息

jishengzu 2009-03-21 04:39:55

protected override void WndProc(ref Message m)//监视Windows消息
{
const int WM_HOTKEY = XXX;//XXX这里按下键盘(按下没放开时)发送的消息对应的值是什么

System.Console.WriteLine(m.Msg);
switch (m.Msg)
{
case WM_HOTKEY:
//System.Console.WriteLine(m.Msg);
break;
}
base.WndProc(ref m); //将系统消息传递自父类的WndProc
}
...全文
173 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cd87279798 2010-12-30
  • 打赏
  • 举报
回复
看下了。。。正好需要看这个资料
wuyi8808 2009-03-22
  • 打赏
  • 举报
回复
// 命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。
// 在派生类中重写 ProcessCmdKey 方法时,控件应返回 true 以指示它已处理该键。
// 对于未由该控件处理的键,应返回调用基类的 ProcessCmdKey 方法的结果。

using System.Windows.Forms;

class Test : Form
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Apps : // 应用程序键
case Keys.RWin : // 右 Win 键
case Keys.Menu | Keys.Alt : // Alt 键
case Keys.F4 | Keys.Shift : // Shift-F4 键
MessageBox.Show("Key Press : " + keyData);
return true;
}
return base.ProcessCmdKey (ref msg, keyData);
}

static void Main()
{
Application.Run(new Test());
}
}





// 可以用 msg.LParam 来区分左右 Alt, Ctrl, Shift, 两个Enter 键

using System.Windows.Forms;

class Test : Form
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
string s = string.Empty;
switch ((int)msg.LParam)
{
case 0x20380001 : s = "LAlt" ; break;
case 0x21380001 : s = "RAlt" ; break;
case 0x001d0001 : s = "LControl"; break;
case 0x011d0001 : s = "RControl"; break;
case 0x002a0001 : s = "LShift" ; break;
case 0x00360001 : s = "RShift" ; break;
case 0x001c0001 : s = "Enter" ; break;
case 0x011c0001 : s = "PadEnter"; break;
}
MessageBox.Show(msg + "\r\n" + keyData + "\r\n" + s);
return base.ProcessCmdKey(ref msg, keyData);
}

static void Main()
{
Application.Run(new Test());
}
}
tommir3 2009-03-22
  • 打赏
  • 举报
回复
楼主,你问这个问题我以前也问过类似的,一直没有解决,你可能能帮我。
怎样截取windows的热键,例如: 左右win键,Alt + Tab,Ctrl + Alt + Del,
Ctrl + Esc,Ctrl + Shift + Esc.....等等等等。
楼主,谢谢你了。
sohighthesky 2009-03-22
  • 打赏
  • 举报
回复
是KeyDown事件时吧,是0x0100
更多参见:http://www.diybl.com/course/3_program/c++/cppjs/2007925/73636.html
wesleyluo 2009-03-21
  • 打赏
  • 举报
回复
自定义消息处理,似乎是通过自定义发送 消息 值,然后判定的。
像6楼说的 。
indeep 2009-03-21
  • 打赏
  • 举报
回复
进来学习啦
only_lonely 2009-03-21
  • 打赏
  • 举报
回复
哦?似乎很深奥呀····
li45214521 2009-03-21
  • 打赏
  • 举报
回复
查看下 windows 消息机制
wsmall1 2009-03-21
  • 打赏
  • 举报
回复
找到了
是 0x0312
wsmall1 2009-03-21
  • 打赏
  • 举报
回复
以前做过C++的开发,在C#中没有WindowMessage的枚举,这个值应该是可以自己定义的,也就是说自己定义一个WindowMessage的枚举,在枚举中创建WM_HOTKEY对应的16进制的值,然后在判断就可以了。
wsmall1 2009-03-21
  • 打赏
  • 举报
回复
这个东西我不是很懂,给你个地址,你看一下:
http://cache.baidu.com/c?m=9d78d513d99256af59fa940f484d8b304411df347d9683402895870fd33a541b0120a1ac26510d19899e6b6776ff1a07bcb7217240527de886cf83499aa6c27672dd3a6f364bd95c11d61fae9b1075c226c750ebf819e0bff23893afd0d3d85144ca245f3cdfae&p=882a9643929d12a059abc86d5c54&user=baidu
feng199 2009-03-21
  • 打赏
  • 举报
回复
关注中
jishengzu 2009-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wsmall1 的回复:]
&H312

但愿你有用
[/Quote]
这东西哪里查来的 不是数值类型
wsmall1 2009-03-21
  • 打赏
  • 举报
回复
&H312

但愿你有用
jishengzu 2009-03-21
  • 打赏
  • 举报
回复
哎这几天用了不少分结果没有一个有用的答案,希望这次有答案了、

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧