可否通过sendmessage函数实现keybd_event的功能么?该怎么处理

可否通过sendmessage函数实现keybd_event的功能么?
我把模拟键盘输入的如下代码放在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什么的,拳皇模拟器什么的,模拟按键,为什么不好用呢?



------解决方案--------------------
模拟普通字符按下比较简单,要是模拟ctrl + a就困难了

C/C++ code
    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 );
    }

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


------解决方案--------------------
SendInput