我不清楚什么时候可以调用这个函数,据说MSDN上讲在消息队列有消息时,此函数可能调用失败。就算我将这个函数在定时器回调函数中调用,返回值还是0.以下是我的例子代码:LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_KEYDOWN:
OutputDebugString(_T("键被按下\r\n"));
break;
case WM_KEYUP:
OutputDebugString(_T("键抬起\r\n"));
break;

case WM_RBUTTONDOWN:
{
KEYBDINPUT ki1,ki2;
ki1.wVk=ki2.wVk=VK_F4;
ki2.dwFlags=KEYEVENTF_KEYUP;
INPUT ip[2];
ip[0].type=INPUT_KEYBOARD;
ip[0].ki=ki1;
ip[1].type=INPUT_KEYBOARD;
ip[1].ki=ki2;
if(SendInput(2,ip,sizeof(INPUT)))
OutputDebugString(_T("发送消息成功\r\n"));
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}SendInput总是返回0,而且窗体过程也没有接受到WM_KEYDOWN,WM_KEYUP消息。我不清楚这个函数把消息发送到哪里了?哪位大侠清楚呀?

解决方案 »

  1.   

    后来我把代码修改过了:SetForegroundWindow(hWnd);
    Sleep(1000);
    INPUT ip[2]={0};
    KEYBDINPUT ki1={0},ki2={0};
    ki1.wVk=ki2.wVk=VK_F7;
    ki2.dwFlags=KEYEVENTF_KEYUP;
    int a=SendInput(2,ip,sizeof(INPUT));
    TCHAR szMessage[1024];
    _stprintf(szMessage,_T("有%d个消息入队\r\n"),a);
    OutputDebugString(szMessage);现在的函数调用成功了。但是窗体过程没有接受到WM_KEYUP消息。SendInput把消息发送到哪里了呢?
      

  2.   


    SendInput do NOT send the message to the window directly. You must active the window for receiving the user input message from the system.