不太清楚,但是一般情况下,接受输入的窗口必须是当前激活的窗口。你可以用 SendMessage/PostMessage 试一试。

解决方案 »

  1.   

     SendKeys 不能实现一些特殊的键, 如 Alt+PrintScr 。 不过使用 API ,可以改变这样的状况。
    API函数声明
            Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    '一个抓屏的例子
    Const VK_SNAPSHOT As Byte = &H2C
    ' 把应用窗口图象放到剪贴板:
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
    '?把整个屏幕抓到剪贴板:
    Call keybd_event(VK_SNAPSHOT, 1, 0, 0)
        可以用该方法抓 AVI 图象。
      

  2.   

    GetKeyboardStates获取键盘状态,然后设置某键按下,再用SetKeyboardStates关注
      

  3.   

    API SendInput;
    不过该函数需要NT sp3或windows 98以上keybd_event 和 mouse_event在win95以上可以使用,NT上不知能否使用。MSDN这么说:
    "...
    Windows NT: This function has been superseded. Use SendInput instead.
    ..."
      

  4.   

    首先你需要用GetKeyState捕获击键,然后再使用keybd_event来仿真应用程序的击键。GetKeyState:
    声明:Private Declare Function GetKeyState Lib "user32" _
        (ByVal nVirtKey As Long) As Integer
    参数:nVirtKey——代表你所要获取信息虚拟键
         返回值——返回键的状态
    示例:返回左边的Ctrl键的状态
         Dim rc As Integer
         rc = GetKeyState(VK_LCONTROL)keybd_event:
    声明:Private Declare Sub keybd_event Lib "user32" _
        (ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)
    参数:bVk——发送给键盘缓冲区的虚拟键
         bScan——键的硬件扫描码。一般设为0
         dwFlags——事件信息掩码
         dwExtranInfo——附加信息
         返回值——无
    示例:发送一个虚拟值32给窗口进行处理
         keybd_event 32, 0, KEYEVENTF_KEYUP, 0 (多说一句:一些流行的远程控制应用软件就是这样向远程的计算机发送击键,并获取远程计算机相应的响应信息的。)