首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

全局Hook如何模拟ctrl

2011-12-21 
全局Hook怎么模拟ctrl?在全局Hook的KeyboardHookProc方法是这样写的!private int KeyboardHookProc(int nC

全局Hook怎么模拟ctrl?
在全局Hook的KeyboardHookProc方法是这样写的!
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
  // 侦听键盘事件
  if ((nCode >= 0) && (KeyDownEvent != null || KeyUpEvent != null || KeyPressEvent != null))
  {

  KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam,
  typeof(KeyboardHookStruct));
  if (KeyDownEvent != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN))
  {
  Keys keyData = (Keys)MyKeyboardHookStruct.vkCode;
  KeyEventArgs e = new KeyEventArgs(keyData);
  KeyDownEvent(this, e);
  }
  }
}
在form中引用全局钩子,当按下ctrl键时,要把背景色变为红色
private void hook_KeyDownEvent(object sender, KeyEventArgs e)
{
  if (e.Control)
  {
  this.BackColor = Color.Red;
  }
}

现在在调试的时候,按下ctrl键,e.Control的值是为FALSE。这是怎么回事啊?
我要怎么才能用全局钩子模拟出ctrl键?
麻烦说下。
3Q!

[解决办法]
参考

http://topic.csdn.net/u/20081025/14/f8aad5aa-b219-4350-beb7-bde249d3c471.html
[解决办法]
往消息队列送个ctrl的键值,模拟ctrl按下。。。
[解决办法]

C# code
[DllImport("user32")]        public static extern void keybd_event(                     byte bVk,                     byte bScan,                     uint dwFlags,                     uint dwExtraInfo                                              );//模拟键盘消息byte VK_CONTROL=17;byte VK_C=67;//下面四句话就是CTRL+Ckeybd_event(VK_CONTROL, 0, 0, 0);                        keybd_event(VK_C, 0, 0, 0);                        keybd_event(VK_C, 0, 0x2, 0);                        keybd_event(VK_CONTROL, 0, 0x2, 0);
[解决办法]
楼主表达能力有问题

你问的是“模拟Ctrl”,也就是发送击键,那么7楼已经给你解决了

但是听你表达,你好象是想“拦截Ctrl”,也就是如果按下Ctrl,收到一个通知,而不是主动去触发一个Ctrl键


哎。。。。
[解决办法]
if (KeyDownEvent != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)) 

Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; 
KeyEventArgs e = new KeyEventArgs(keyData); 
KeyDownEvent(this, e); 

这段代码执行没有?如果执行了,直接从vkCode来判断Control是否按下
[解决办法]
是不是被PreviewKeyDown吞掉了
[解决办法]
是不是被PreviewKeyDown吞掉了

热点排行