vc2012模拟鼠标键盘操作事件()

模拟键盘代码

void Key_Ctrl_S() { keybd_event(VK_CONTROL, 0, 0, 0);  keybd_event(‘S’, 0, 0, 0);  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);  keybd_event(‘S’, 0, KEYEVENTF_KEYUP, 0); } void Key_Enter() { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } void Key_Y() { keybd_event(‘Y’, 0, 0, 0); keybd_event(‘Y’, 0, KEYEVENTF_KEYUP, 0); }

模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法。mouse_event()在windows后期版本中逐渐被SendInPut()取代。SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同。简单来说就是,添加MOUSEEVENTF_ABSOLUTE标志位表示鼠标移动是通过绝对坐标定位,此时的坐标要通过转换。光标在屏幕中被分成65535个小块,可以通过如下转换:

若不使用MOUSEEVENTF_ABSOLUTE标志位,则坐标是相对前一坐标的位移。

SendInPut()鼠标时间使用结构如下:

msdn中完整解释如下:      dx 鼠标的绝对位置,或自上次鼠标事件的运动量产生的dwFlags成员的值而定。鼠标的x坐标被指定为绝对的数据,相对于被指定为数据的移动像素数。      dy 鼠标的绝对位置,或自上次鼠标事件的运动量产生的dwFlags成员的值而定。鼠标的y坐标被指定为绝对的数据,相对于被指定为数据的移动像素数。      mouseData 如果dwFlags中包含MOUSEEVENTF_WHEEL,mouseData指定滚轮运动的量。正值表示滚轮向前旋转,即远离用户,负值表示滚轮向后旋转,即朝向用户。滚轮被定义为WHEEL_DELTA,这是120。

     下面代码演示了鼠标的几个具体操作。      1、我怎样才能在应用程序中模拟鼠标事件?

     有两个API函数可以使用:mouse_event()和SendInput();

     2、应该使用哪个API函数?

     在Windows NT/2000/XP中,mouse_event()函数已经被SendInput()函数已被取代的。因此,在这些操作系统上,你应该使用SendInput()函数。(除非你需要提供向后兼容性与Windows98等)。

     3、如何使用SendInput()函数来模拟点击鼠标左键?

    // 左键抬起     ::ZeroMemory(&Input,sizeof(INPUT));     Input.type      = INPUT_MOUSE;     Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;     ::SendInput(1,&Input,sizeof(INPUT)); }

4、如何使用SendInput()函数来模拟点击鼠标右键?

    // 右键抬起     ::ZeroMemory(&Input,sizeof(INPUT));     Input.type      = INPUT_MOUSE;     Input.mi.dwFlags  = MOUSEEVENTF_RIGHTUP;     ::SendInput(1,&Input,sizeof(INPUT)); }

5、如何使用SendInput()函数模拟鼠标的移动?

————————

模拟键盘代码

void Key_Ctrl_S() { keybd_event(VK_CONTROL, 0, 0, 0);  keybd_event(‘S’, 0, 0, 0);  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);  keybd_event(‘S’, 0, KEYEVENTF_KEYUP, 0); } void Key_Enter() { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } void Key_Y() { keybd_event(‘Y’, 0, 0, 0); keybd_event(‘Y’, 0, KEYEVENTF_KEYUP, 0); }

模拟鼠标事件,一般可以通过mouse_event()和SendInPut()两种方法。mouse_event()在windows后期版本中逐渐被SendInPut()取代。SendInPut()模拟鼠标移动的事件中,标志位取值不同,输入坐标的意义也不同。简单来说就是,添加MOUSEEVENTF_ABSOLUTE标志位表示鼠标移动是通过绝对坐标定位,此时的坐标要通过转换。光标在屏幕中被分成65535个小块,可以通过如下转换:

若不使用MOUSEEVENTF_ABSOLUTE标志位,则坐标是相对前一坐标的位移。

SendInPut()鼠标时间使用结构如下:

msdn中完整解释如下:      dx 鼠标的绝对位置,或自上次鼠标事件的运动量产生的dwFlags成员的值而定。鼠标的x坐标被指定为绝对的数据,相对于被指定为数据的移动像素数。      dy 鼠标的绝对位置,或自上次鼠标事件的运动量产生的dwFlags成员的值而定。鼠标的y坐标被指定为绝对的数据,相对于被指定为数据的移动像素数。      mouseData 如果dwFlags中包含MOUSEEVENTF_WHEEL,mouseData指定滚轮运动的量。正值表示滚轮向前旋转,即远离用户,负值表示滚轮向后旋转,即朝向用户。滚轮被定义为WHEEL_DELTA,这是120。

     下面代码演示了鼠标的几个具体操作。      1、我怎样才能在应用程序中模拟鼠标事件?

     有两个API函数可以使用:mouse_event()和SendInput();

     2、应该使用哪个API函数?

     在Windows NT/2000/XP中,mouse_event()函数已经被SendInput()函数已被取代的。因此,在这些操作系统上,你应该使用SendInput()函数。(除非你需要提供向后兼容性与Windows98等)。

     3、如何使用SendInput()函数来模拟点击鼠标左键?

    // 左键抬起     ::ZeroMemory(&Input,sizeof(INPUT));     Input.type      = INPUT_MOUSE;     Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;     ::SendInput(1,&Input,sizeof(INPUT)); }

4、如何使用SendInput()函数来模拟点击鼠标右键?

    // 右键抬起     ::ZeroMemory(&Input,sizeof(INPUT));     Input.type      = INPUT_MOUSE;     Input.mi.dwFlags  = MOUSEEVENTF_RIGHTUP;     ::SendInput(1,&Input,sizeof(INPUT)); }

5、如何使用SendInput()函数模拟鼠标的移动?