如题:SendMessage  keybd_event mouse_event PostKeybdMessage的区别是什么?
当前我只用过SendMessage和keybd_event,每次都是先用SendMessage试,如果不工作,就换keybd_event。他们的区别是怎么样的~~~求解释

解决方案 »

  1.   

    SendMessage:发消息,返回结果在执行.
    PostKeybdMessage:发消息就执行.
    keybd_event mouse_event:是消息相应事件.
      

  2.   

    SendMessage:系统API函数,向指定的对象发送消息,并等待返回结果。
    keybd_event:系统API函数,模拟键盘事件,可模拟按键按下和弹起事件。
    mouse_event:系统API函数,模拟鼠标事件,可模拟鼠标左中右的按下和弹起事件。
    PostKeybdMessage:系统API函数,发送按键消息给指定对象。
      

  3.   

    SendMessage 不工作就对了,一些软件是做了消息过滤的。
      

  4.   

    keybd_event/mouse_event模拟键盘和鼠标动作,走的是驱动
      

  5.   


    那我是不是可以理解为  keybd_event可以完成的SendMessage一定可以完成??
      

  6.   


    SendMessage是MFC框架下的?键盘和鼠标的模拟最好用keybd_event/mouse_event?这里面有没有什么技巧的?
      

  7.   

    SendMessage是间接的调用窗口过程函数,消息是不进消息队列的
    MFC对它进行了封装
    keybd_event/mouse_event 应该都产生的消息吧,进消息队列的
      

  8.   

    SendMessage 不进入消息队列?这个可以在哪里找到依据?有点纠结~
      

  9.   

    SendMessage发送的消息在GetMessage中被分发,不由GetMessage返回
    PostMessage寄送的消息由GetMessage返回,一般会由TranslateMessage后交给DispatchMessage分发keybd_event是被废弃的api,它调用SendInput合成按键消息,目标是焦点窗口,相当于PostMessage给焦点窗口如果窗口过程通过WM_CHAR来判断按键,那么用SendMessage发送WM_KEYDOWN是不行的,因为不会经过TranslateMessage还有一点要注意SendMessage和PostMessage的目标窗口要是接受按键的窗口,比如要往记事本里模拟按键写入文本,此时的目标窗口要是记事本的Edit控件而不是标题是"无标题 - 记事本"的窗口,而用SendInput合成的按键是自动发给焦点窗口的,所以如果要模拟按键应该用SendInput比较方便
      

  10.   


    SendMessage只是向你的窗口发送消息,并不经过驱动;keybd_event相当于你按下了键盘上的按键,这时候先要经过驱动,然后你的窗口才接收到消息。路径不同的。
    至于用法方面要看具体情况而定:举个例子吧,假如现在让你写个程序来控制现在大多数的主流播放器,你怎么做?当然你可以找到它们播放、暂停等操作时候的快捷键消息(可以用spy++检测到的),然后你的程序SendMessage给这些播放器就可以,但是问题是每个播放器的某个相同功能的快捷键都是不同的,你需要枚举各个播放器,来发消息,总之很麻烦(当然还有其他的问题);最简单的方法就是用keybd_event模拟键盘上的多媒体按键(你应该用过吧?有的功能多些的键盘会有一些额外的多媒体按键),其实几乎所有的播放器都会响应多媒体按键的,只需一个keybd_event,生下的事情交给系统去做了。
      

  11.   


    同一个线程间用 SendMessage不进入线程的消息队列;不同线程的时候进入消息队列