用如下代码,可编辑框中没什么反应,错在哪呢?        
         DWORD Key;
LPARAM lpar;
WPARAM wpar;
         HWND hwnd; hwnd=::GetDlgItem(m_hWnd,IDC_EDIT1);
Key=::OemKeyScan(0x61);//模拟按下a字符
wpar=::MapVirtualKey(Key & 0xff,1);
lpar=(Key &0xff)<<16;
lpar|=0x1;
::SendMessage(hwnd,WM_KEYDOWN,wpar,lpar);

解决方案 »

  1.   

    模拟键盘鼠标输入使用下面的函数:
    VOID keybd_event(
      BYTE bVk,           // virtual-key code
      BYTE bScan,         // hardware scan code
      DWORD dwFlags,      // flags specifying various function options
      DWORD dwExtraInfo   // additional data associated with keystroke
    );
    VOID mouse_event(
      DWORD dwFlags, // flags specifying various motion/click variants
      DWORD dx,      // horizontal mouse position or position change
      DWORD dy,      // vertical mouse position or position change
      DWORD dwData,  // amount of wheel movement
      DWORD dwExtraInfo 
                     // 32 bits of application-defined information
    );
    模拟代码(省略了很多代码):48为0键
             ...
    for(int i=0;i<101;i++)
    {
    num[i] = 48;
    if( 0 <= i && i <= 10)
    {
    static BYTE code = 48;
    num[i] = code;
    code++;
    }
    if( 10 < i && i <= 10 + 26)
    {
    static BYTE code = 65;
    num[i] = code;
    code++;
    }
    }
             ...
    void CSimulateDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    static int count=0;
    switch(nIDEvent)
    {
    case 1:
    keybd_event(num[count],0,0,0); 
    keybd_event(num[count],0,KEYEVENTF_KEYUP,0);
    count++; if(count >= sizeof(num)/sizeof(BYTE))
    {
    OnKeyboard();
    KillTimer(1);
    count = 0;
    }
    break;
    case 2:
    POINT lpPoint;
    GetCursorPos(&lpPoint);
    SetCursorPos(lpPoint.x, lpPoint.y);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); 
    break;
    default:
    break; 
    }

    CDialog::OnTimer(nIDEvent);
    }
      

  2.   

    用keybd_event是可以的,但为什么用发送WM_KEYDOWN消息就不成呢,我发送WM_CHAR消息就可以啊
      

  3.   


    ::PostMessage(hwnd,WM_KEYDOWN,wpar,lpar);
      

  4.   

    消息有几种,有的是可以用来触发事件的,有的只是被动的响应的(事件发生了,给你一个处理它的机会)。
    键盘消息WM_KEYDOWN就是属于被动的响应消息,而不是触发事件的。你可以参看关于的说明
    再对比 WM_CLOSE, WM_QUIT等的说明
      

  5.   

    谢谢,搞定了,用postmessage就可以了