const int WM_KEYDOWN=0x100;
            const int WM_KEYUP = 0x101;
            const int WM_CHAR = 0x102;//KeyPress
            //每次都要定义const int WM_XXXX=XXXX,有没有定义好的,直接用的,哪个命名空间中?
            SendMessage(this.Handle, WM_KEYDOWN, 66, 1966081);
            SendMessage(this.Handle, WM_KEYUP, 66, -1070596095);
            //只发送上面两个不会引发KeyPress事件
            SendMessage(this.Handle, WM_CHAR, 66, 1966081);//发送这个会引发KeyPress            //----------------------
            SendMessage(this.Handle, WM_KEYDOWN, 'B', 0);
            SendMessage(this.Handle, WM_KEYUP, 'B', 0);            SendMessage(this.Handle, WM_CHAR, 'B', 0);
            //发送按键消息时,最后一个参数,是随便填的,还是有规定?
            //通过重载窗口过程函数 WndProc(ref Message m),我看到
            //比如:实际上当按“B”键时,系统会依次发送WM_KEYDOWN、WM_CHAR、WM_KEYUP三个消息
            //但发送 WM_KEYDOWN、WM_CHAR消息时,m.LParam这个都是一样的:3145729,WM_KEYUP的这个值是:-1070596095 
            //每次都是这个样结果,貌似每个按键都有对应的一个LParam.
            //很显然 发送按键消息时,SendMessage 最后一个参数,并不是随便填的(至少系统产生的消息是这样的)问题来了:
在哪个命名空间要可以直接引用WM_XXXX这样的值,或是没有,要自己定义?
发按键消息时,sendmessage的最后一个参数,有规定还是没有,如果有规定要怎么填

解决方案 »

  1.   

    1 windows定义的可以直接填WM_XXX这样的,或填 0x100; 没有 直接填0 
    2 消息有规定的,按规定填;没有填0。 比如键盘消息,如果最后1个参数表示普通键ascii值,按a键就要填97,按b键就要填98.
      

  2.   

     LRESULT SendMessage(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam);  
    参数 1:hWnd-窗口句柄。窗口可以是任何类型的屏幕对象。 
    参数 2:wMsg-用于区别其他消息的常量值. 
      
    参数 3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄. 
    参数 4: lParam-通常是一个指向内存中数据的指针。没有就是0
      

  3.   

    参数 3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄.  
    参数 4: lParam-通常是一个指向内存中数据的指针。没有就是0
    最后两个参数说是这样说,但发送按键消息肯定是规定死的,第三个参数肯定填ascii值,系统也是这样产生消息,关键是这样的规定在哪里有说明,如果按照下面这样简单的规定,你能让一个初学者发送一个按键消息,并能让应用程序识别?
    LRESULT SendMessage(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam);  
    参数 1:hWnd-窗口句柄。窗口可以是任何类型的屏幕对象。  
    参数 2:wMsg-用于区别其他消息的常量值.  
       
    参数 3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄.  
    参数 4: lParam-通常是一个指向内存中数据的指针。没有就是0