zoukankan      html  css  js  c++  java
  • 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
    ",m_char);
    62     }
    63     return 0;
    64 
    65 }
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    19.JavaScript实现一定时长下点击次数
    18.JavaScript实现许愿墙效果
    17.JavaScript实现鼠标右键自定义菜单
    16.JavaScript用setTimeout函数做出计时效果
    15.JavaScript实现放大镜效果
    2-5 数组形状
    2-4 排序
    2-3 arrary数组的数值的计算
    2-2array结构
    2-1Numpy概述
  • 原文地址:https://www.cnblogs.com/yuliyang/p/3348373.html
Copyright © 2011-2022 走看看