使用SendMessage是否可以使用组合键,如使用Ctrl+A,SendMessage的参数该如何写SendMessage(Handle, WM_KEYDOWN, ?, ?);

解决方案 »

  1.   

    好像是不能发送这样的组合键的吧.应该发一个ctrl的keydonw,再发一个a的keydown.
    不过好像有的程序会去检测键盘状态,应该用按键的那个表来做吧.
      

  2.   

    SendMessage(handle,WM_keyDown,VK_CONTROL+41,0);  // 可以吗 ?
      

  3.   

    SendMessage(handle,WM_keyDown,VK_CONTROL+41,0);
    不行.我現在使用
    keybd_event(VK_CONTROL, Byte(MapVirtualKey(VK_CONTROL,0)), 0, 0);
    keybd_event(65, Byte(MapVirtualKey(65,0)), 0, 0);
    keybd_event(65, Byte(MapVirtualKey(65,0)), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, Byte(MapVirtualKey(VK_CONTROL, 0)), KEYEVENTF_KEYUP, 0);
    這段函數可以實現使用Ctrl+A(兩鍵)的功能
    但是如果使用Shift+Ctrl+Home(三鍵)的功能卻不能使用這種方法,不知個位有何高見,請指點迷經。
      

  4.   

    你上面程序对alt+a可以吗?
    你做一个程序,发到delphi的from的keydown看看,会不行的.
    应为有的程序会检查键盘状态.
      

  5.   

    當然可以了,這段程式只對當前處於活動狀態的Window發送按鈕的Event。
    delphi的from的Kendown本身沒有Ctrl+A的功能當然不行實際上我想討論的是如何向程式中發送組合鍵(三鍵以上)的方法,再次感謝個位對本問題的關注。
      

  6.   

    试下这个
      keybd_event(vk_menu,0,0,0);  // alt key Down
      keybd_event(VK_CONTROL,0,0,0);// control Key down
      keybd_event(VK_HOME,0,0,0);  // Home Key down
      keybd_event(VK_HOME,0,KEYEVENTF_KEYUP,0);    // Home key up
      keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);    // Control key up
      keybd_event(vk_menu,0,KEYEVENTF_KEYUP,0);    // Alt Key up.