这个矛盾是我自己引起的~`
我在一段代码里用到WM_COPYDATA,所以必须用到SendMessage.
但是在SendMessage发送WM_COPYDATA之前,我要模拟按键盘,若用keybd_event和PostMessage
均不能正确执行,因为它们发生在SendMessage之后,
而用SendMessage又不能产生模拟按键(是不是不能用SendMessage模拟按键)~~
(以上均进行了测试)
难道一定要用到 钩子吗?或者有什么代替的 比如 用什么来代替WM_COPYDATA
谢谢~~~~~

解决方案 »

  1.   

    看糊涂了
    keybd_event不是通过发送消息实现的吗?
      

  2.   

    那你在keybd_event发生了作用之后再SendMessage不行吗,例如在监测到WM_KEYDOW消息后?
      

  3.   

    ::keybd_event( VK_ESCAPE, 0, 0, 0); 
    ::keybd_event( VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);//用POSTMESSAGE产生一样的效果
    COPYDATASTRUCT cmdMsg;
    .........
    ::SendMessage( adsw_acadMainWnd(),
    WM_COPYDATA,
    (WPARAM)adsw_acadMainWnd(),
    (LPARAM)&cmdMsg);
    以上程序执行的顺序不是先执行ESC,而是先发送WM_COPYDATA再执行ESC
    但是我的目的是先执行ESC 再发送WM_COPYDATA于是我采用以下代码,但是不却响应ESC键了
    ::SendMessage( adsw_acadMainWnd(),
    WM_KEYDOWN,
    VK_ESCAPE,
    0x001c0001);
    ::SendMessage( adsw_acadMainWnd(),
    WM_KEYUP,
    VK_ESCAPE,
    0xc01c0001);
    COPYDATASTRUCT cmdMsg;
    ....
    ::SendMessage( adsw_acadMainWnd(),
    WM_COPYDATA,
    (WPARAM)adsw_acadMainWnd(),
    (LPARAM)&cmdMsg);
    迷惑中...
      

  4.   

    keybd_event很短的时间后再来SendMessage?
      

  5.   

    回复人: dirdirdir3(风) ( ) 信誉:100  2005-09-01 09:09:00  得分: 0  
      那你在keybd_event发生了作用之后再SendMessage不行吗,例如在监测到WM_KEYDOW消息后?
     -------------------------------------------------------------------------------
    我也想这样,但是接收按键消息的窗口  不是我本身程序里的窗口,它是CAD的窗口,所以我才在这里发愁~~ 
     
      

  6.   

    有一个办法就是,你keybd_event之后,在接受到这个消息的地方将一个标志设置一下,
    而在keybd_event之后等待该标志为true的时候再sendmessage WM_COPYDATA,然后将哪个标志reset
      

  7.   

    WM_KEYDOWN是使用postmessage的
    MSDN:
    This message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.
    ---is posted
      

  8.   

    CAD程序,没有办法了,只能HOOK,也比较简单
    我看了一下,键盘消息等应该是发送到程序的post消息队列的,使用sendmessage只能将消息放到发送消息队列,那么THREAD就取不到消息了
      

  9.   

    看来是只有用HOOK了?
    是这样吗?
      

  10.   

    回复人: windcsn(向所有的朋友学习!) ( ) 信誉:110  2005-9-1 13:31:04  得分: 0  
     
    WM_KEYDOWN是使用postmessage的
    MSDN:
    This message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.
    ---is posted--------------------------------------------------------------------------------------MSDN 上写着用POSTED 的消息 是不是就不能用 sendmessage 了?