keybd_event(VK_CONTROL,0,0,0);
keybd_event('C',0,0,0);
keybd_event('C',0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); ok , 可以模拟 CTRL+C

解决方案 »

  1.   

    亲,每个Keybd_event需要延时的keybd_event(17, 0, 0, 0);Sleep(50); keybd_event(86, 0, 0, 0);Sleep(50); keybd_event(86, 0, 0x2, 0);Sleep(50); keybd_event(17, 0, 0x2, 0);你可以拿个播放器测试一下空格键.
      

  2.   

    嗯,sendkey就能实现发送CTRL + C等功能
      

  3.   

    win7+vs2008 express 下通过:/****************************************************************************
    参考:baidu : 如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键
     http://blog.csdn.net/wangjieest/article/details/6958039
    ****************************************************************************/void SimulateKeyDown(HWND hWnd,UINT nChar)
    {
    UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
    LPARAM KeyDownLPARAM= (ScanCode<<16) | 0x00000001 ;
    ::PostMessage(hWnd,WM_KEYDOWN,nChar,KeyDownLPARAM);
    }void SimulatekeyUp(HWND hWnd,UINT nChar)
    {
    UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
    LPARAM KeyUpLPARAM = (ScanCode<<16) | 0xC0000001 ;
    ::PostMessage(hWnd,WM_KEYUP,nChar,KeyUpLPARAM);
    }
    //ctrl+O
    keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),0,0);
    SimulateKeyDown( GetWnd() ,'O');
    SimulatekeyUp  ( GetWnd() ,'O');
    keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0); //发送文本,不限于edit控件。不能用Sendmessage,因为不经过GetMessage循环
    //最后一个参数(lParam)低16位(0001)表示按键一次,高8位00表示按下,C0表示抬起,次高8位(01)表示该键的扫描码,
    //可用 API MapVirtualKey(VirtualKey, 0)取得(注意:扫描码在各系统可能会不同,在此以具体数值示例,
    //实际应用MapVirtualKey取得)。
    HWND m_hWnd=GetWnd();
    TCHAR SendText[100]="::PostMessage(m_hWnd,WM_CHAR,'a',0x001E0001);";
    int len=_tcslen(SendText);
    for (int i=0;i<len;i++)
    {
    ::PostMessage(m_hWnd,WM_CHAR,SendText[i],0); // lparam 不需要准确的值
    }