C++模拟键盘鼠标消息

#include <Windows.h>
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  LeftClick
 *  Description:  左键按下消息
 * =====================================================================================
 */
void LeftClick ( )
{  
  INPUT    Input={0};
  // left down 
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
  ::SendInput(1,&Input,sizeof(INPUT));

  // left up
  ::ZeroMemory(&Input,sizeof(INPUT));
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
  ::SendInput(1,&Input,sizeof(INPUT));
}
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  RightClick
 *  Description:  右键按下消息
 * =====================================================================================
 */
void RightClick ( )
{  
  INPUT    Input={0};
  // right down 
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_RIGHTDOWN;
  ::SendInput(1,&Input,sizeof(INPUT));

  // right up
  ::ZeroMemory(&Input,sizeof(INPUT));
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_RIGHTUP;
  ::SendInput(1,&Input,sizeof(INPUT));
}

/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  鼠标移动消息
 *  Description:  
 * =====================================================================================
 */
void MouseMove (int x, int y )
{  
        double fScreenWidth    = ::GetSystemMetrics( SM_CXSCREEN )-1; 
        double fScreenHeight  = ::GetSystemMetrics( SM_CYSCREEN )-1; 
        double fx = x*(65535.0f/fScreenWidth);
        double fy = y*(65535.0f/fScreenHeight);
        INPUT  Input={0};
        Input.type      = INPUT_MOUSE;
        Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
        Input.mi.dx = fx;
        Input.mi.dy = fy;
        ::SendInput(1,&Input,sizeof(INPUT));
}
int main(){

        while(true)
        {
                MouseMove(0,100);

                Sleep(5000);

                MouseMove(200,0);

                Sleep(5000);
        
        }
    //RightClick ( );
    //LeftClick ( );
        return 0;
}

  以上是使用sendinput函数

以下是使用keybd_event函数

//#include <Windows.h>
#include <afxwin.h>

int main()
{

        //CWnd *pWnd = CWnd::FromHandle(FindWindow("ConsolWindowClass", NULL));   GetConsoleWindow(void);
        CWnd *pWnd = CWnd::FromHandle(GetConsoleWindow());   //本控制台程序发送按键消息
        if (pWnd->GetSafeHwnd()) 
                { 
                        pWnd->ShowWindow(SW_NORMAL); 
                        pWnd->SetForegroundWindow(); 
                        //keybd_event(VK_CONTROL, 0, 0 ,0);
                        keybd_event('E', 0, 0 ,0);
                        keybd_event('E', 0, KEYEVENTF_KEYUP ,0);

                        //keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
                }
        return 0;
}

  demo

 1 /*
 2  * =====================================================================================
 3  *
 4  *       Filename:  get_message.cpp
 5  *
 6  *    Description:  子线程产生按键消息,主线程等待输入,并输出
 7  *
 8  *        Version:  1.0
 9  *        Created:  2013/10/1 10:33:36
10  *       Revision:  none
11  *       Compiler:  gcc
12  *
13  *         Author:  @礼杨_HDU, yuliyang@qq.com
14  *   Organization:  
15  *
16  * =====================================================================================
17  */
18 
19 #include <iostream>
20 #include <Windows.h>
21 using namespace std;
22 DWORD WINAPI ThreadFunction(LPVOID lpParameter)
23 {
24     printf("in thread......");
25     while (TRUE){
26         //your code
27         
28         INPUT Input1 = { 0 };
29         Input1.type       = INPUT_KEYBOARD;
30         Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
31         Input1.ki.wVk   = 0x30; // 0
32         SendInput( 1, &Input1, sizeof( INPUT ) );
33         INPUT Input2 = { 0 };
34         Input2.type       = INPUT_KEYBOARD;
35         Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
36         Input2.ki.wVk   = 0x0d; // 回车
37         SendInput( 1, &Input2, sizeof( INPUT ) );
38 
39         Sleep(10000);
40         
41         Input1.type       = INPUT_KEYBOARD;
42         Input1.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
43         Input1.ki.wVk   = 0x31; //1
44         SendInput( 1, &Input1, sizeof( INPUT ) );
45         
46         Input2.type       = INPUT_KEYBOARD;
47         Input2.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
48         Input2.ki.wVk   = 0x0d; // 回车
49         SendInput( 1, &Input2, sizeof( INPUT ) );
50     }
51     return true;
52 }
53 
54 int main(){
55     HANDLE hT=CreateThread(NULL,0,ThreadFunction,NULL,0,NULL);
56 
57     char m_char;
58     
59     while (cin>>m_char)
60     {
61         printf("%c\n",m_char);
62     }
63     return 0;
64 
65 }