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函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//#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 }
复制代码

 

posted @   小菜鸟_yang  阅读(3773)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示