ctrl+home 用postmessage怎么写?PostMessage m_hScrWindow, WM_KEYDOWN, 17, 0
PostMessage m_hScrWindow, WM_KEYDOWN, 36, 0这样只会使home键生效,ctrl键没有生效.为讨论sendkeys和sendmessage.就关于postmessage.哪位老大能给个测试通过的语句吗?以前你们回复的都不行啊.

解决方案 »

  1.   

    简单的了解一下~~~
         我也试验了,发现确实不可以。可能是以下情况。ctrl+home判断的地方,用的GetKeyStatus这个api,这个应该是检查key的状态的。所以可能和post的message没有很多关系(不确定,但是结果显示可能如此)所以,没什么法子了。。
    如果用sendkey能用也可以(不知道行不)另外这种组合的按键,应该是一个id,而响应的是这个id的command。这个应该是个加速键而已,所以可以发command消息和这个加速键id(对于findwindow的东西有点难度地说)如果用的sendmessage可以先setkeystatus,把ctrl设定为按下,然后再传那个home的键。(post不推荐,因为发了队列,不便于控制)send之后把ctrl复位到原来的状态。(findwindow应该也能这样用。)另外就是如果自己的程序可以发送一个消息(比如WM_USER+1234).这个消息就是设定ctrl状态的。这个也可以。以上猜想没有代码,不好意思。
      

  2.   

    不好意思啊,有GETKEYSTATE,没有SET
      SET是一个全局的,整个KEYBOARD。SetKeyboardState。。名字差不多,有点忘记了。
      get这个全局的之后,然后更改byte[VK_CONTROL]=1,然后在SET用完了以后,再SET回原来的状态。
      

  3.   

    我说的都是API.下面的是c++的代码,希望能参考上。
      BYTE lpKeyState[256];
    GetKeyboardState(lpKeyState);//Save the Shift,Ctrl,Alt State.
    BYTE ControlState = lpKeyState[VK_CONTROL];
    //Set Ctrl KEY Down
    lpKeyState[VK_CONTROL] = 1;
    SetKeyboardState(lpKeyState);
    //自己的处理,比如sendmessage//Recover
    lpKeyState[VK_CONTROL] = ControlState;
    SetKeyboardState(lpKeyState);
      

  4.   

    VB就是API
      dim keys(256) as Byte
      GetKeyboardState keys(0)'得到键盘状态
      keys(17)=1'control状态
      SetKeyboardState keys(0)'设置键盘状态
      ....处理
      SetKeyboardState keys(0)'恢复状态  或许可以使用。
      API自己声明,自己的程序容易处理,别人的就不好说了。