我把模拟键盘输入的如下代码放在dll中.
::keybd_event(49,1,0,0);
::keybd_event(49,1,KEYEVENTF_KEYUP,0);//按1在另一程序中向dll传递记事本程序的句柄.达到模拟输入的效果.请问,可否通过sendmessage函数实现keybd_event的一样的功能?sendmessage应该怎么写呢,::SendMessage(g_hWnd,WM_CHAR,49,0);//我是这么写的,可是不行.最主要是想问:为什么在记事本里面keybd_event好用,在其他游戏,比如,实况足球啦,NBA什么的,拳皇模拟器什么的,模拟按键,为什么不好用呢?

解决方案 »

  1.   

    UP.那请问用sendmessage能在记事本中实现keybd_event效果么?
      

  2.   

    模拟普通字符按下比较简单,要是模拟ctrl + a就困难了 for( i = 0; i < l; i++ )
    {
    t = *( str + i );
    if( t >= 'a' && t <= 'z' )
    {
    ::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( t + 0x20 ), 0x001f0001 );
    }
    else
    {
    ::SendMessage( hwnd, WM_KEYDOWN, ( WPARAM )( t ), 0x001f0001 );
    }
    ::SendMessage( hwnd, WM_CHAR, ( WPARAM )( t ), 0x001f0001 );
    ::SendMessage( hwnd, WM_KEYUP, ( WPARAM )( t ), 0xc01f0001 );
    }这是我以前写的往一个ide中输入脚本的代码。
      

  3.   

    SendMessage用于处理简单的情况。
      

  4.   

    _____>jennyvenus请问,那个sendmessage最后一个参数0xc01f0001 ,是什么意思,为什么是0xc01f0001 ,不可以是别的么?例如:
    ::SendMessage(hWnd,WM_LBUTTONDOWN,0,(0x00400000 | 0x0010)); 请问,第四个参数,什么意思?
      

  5.   

    顶下._____> jennyvenus 请问,那个sendmessage最后一个参数0xc01f0001   ,是什么意思,为什么是0xc01f0001   ,不可以是别的么? 例如: 
    ::SendMessage(hWnd,WM_LBUTTONDOWN,0,(0x00400000   ¦   0x0010));   请问,第四个参数,什么意思?
      

  6.   

    在WM_LBUTTONDOWN这个消息中,LPARAM参数表示:
    高位为鼠标X坐标
    低位为鼠标Y坐标
      

  7.   

    废话,当然可以。消息就是windows的灵魂啊。问题是你的参数传递错了。哈哈