none
关于SendMessage RRS feed

  • 问题

  • 请问如何发送一个键盘消息?比如 发送一个粘贴的组合键 Ctrl+V键
      其实我有个设想就是在记事本或者IE的input输入域中 用一个键f2之类去粘贴出数据 并且更换剪贴板的内容。
    却无奈,在编译DLL的时候不晓得拦截到f2之后  更新剪贴板内容? 如何发送这个 粘贴这个消息 ? 


    SendMessage(hwnd, WM_COPY, 0, 0);
    SendMessage(hwnd, WM_CUT, 0, 0);
    SendMessage(hwnd, WM_PASTE, 0, 0);
    上面这些是发送给hwnd的消息吧  如何发送给系统?  我的意思就是如何就像是在记事本或者IE中调用了复制粘贴?


    风紫云
    2009年12月10日 8:12

答案

全部回复

  • keybd_event
    0xBAADF00D
    2009年12月10日 9:18
    版主
  •  if(wParam==WM_RBUTTONDOWN || wParam==WM_NCRBUTTONDOWN)
    {
      keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);
      keybd_event(0x56,MapVirtualKey(0x56,0),0,0);  
              //   按下V键  
             keybd_event(0x56,MapVirtualKey(0x56,0),KEYEVENTF_KEYUP,0);
      keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);
    }
      return CallNextHookEx(g_hMouse,nCode,wParam,lParam);;
    }
    请问是这样么?但是这样在其他应用程序中复制了两次内容  如果去掉if就可以呢 我是新手 请不吝赐教 谢谢啦先

    风紫云
    2009年12月11日 16:44
  • keybd_event是模拟键盘输入,你一共模拟了两次CTRL+V就会复制两次了......把后面两个keybd_event注掉
    0xBAADF00D
    2009年12月12日 5:40
    版主
  • 没有啊 那四句的意思不就是  按下CTRL ,按下V 释放V 释放ctrl ?
    风紫云
    2009年12月13日 14:19
  • 这可能是你程序其他地方带来的问题了


    0xBAADF00D
    2009年12月28日 6:40
    版主