模拟键盘鼠标事件
VC 模拟鼠标和键盘输入
![VC 模拟鼠标和键盘输入](https://img.taocdn.com/s3/m/cc2ded523b3567ec102d8a70.png)
VC 模拟鼠标和键盘输入 - 天下 - 博客频道 -模拟鼠标点击:1、这里是鼠标左键按下和松开两个事件的组合即一次单击:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )2、模拟鼠标右键单击事件:mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )3、两次连续的鼠标左键单击事件构成一次鼠标双击事件:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )4、使用绝对坐标MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点--直接设定绝对坐标并单击mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);其中X,Y分别是你要点击的点的横坐标和纵坐标模拟键盘输入:[cpp]void EnterString(const char* text) { bool bShift = false; size_t length = strlen(text);for(size_t index = 0;index < length;index++) { int val = text[index];if(val >= 97 && val <= 122) //小写a-z {val -= 32; bShift = false; } else if(val>= 65 && val <= 90) //大写A-Z { bShift = true;} else if(val >= 48 && val <= 57) //数字0-9 { bShift = false; } else //特殊符号{ switch(val) { case '`':val = 192; bShift = false;break; case '~': val = 192;bShift = true; break; case '!':val = '1'; //!和1在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '@': val = '2'; //@和2在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '#': val = '3'; bShift = true;break; case '$': val = '4';bShift = true; break; case '%':val = '5'; bShift = true;break; case '^': val = '6';bShift = true; break; case '&':val = '7'; bShift = true;break; case '*': val = '8';bShift = true; break; case '(':val = '9'; bShift = true;break; case ')': val = '0';bShift = true; break; case '-':val = 189; bShift = false;break; case '=': val = 187;bShift = false; break; case '_':val = 189; bShift = true;break; case '+': val = 187;bShift = true; break; case '[':val = 219; bShift = false;break; case '{': val = 219;bShift = true; break; case ']':val = 221; bShift = false;break; case '}': val = 221;bShift = true; break; case '\\':val = 220; bShift = false;break; case '|': val = 220;bShift = true; break; case ';':val = 186; bShift = false;break; case ':': val = 186;bShift = true; case '\'': val = 222; bShift = false; break; case'\"': val = 222; bShift = true;break; case ',': val = 188;bShift = false; break; case '<': val = 188; bShift = true;break; case '.': val = 190;bShift = false; break; case '>':val = 190; bShift = true;break; case '/': val = 191;bShift = false; break; case '?':val = 191; bShift = true;break; default: break;} } if(bShift)keybd_event(VK_SHIFT,0,0,0); keybd_event(val,0,0,0);keybd_event(val,0,KEYEVENTF_KEYUP,0); if(bShift)keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); } }但是要注意,如果用户默认是中文输入法,那我们得先想办法切换到英文输入法才行。
c#模拟键盘鼠标事件sendkeys
![c#模拟键盘鼠标事件sendkeys](https://img.taocdn.com/s3/m/3d128e109e3143323868934f.png)
C#模拟键盘鼠标事件-SendKeys2007-09-18 15:13 7689人阅读评论(1) 收藏举报1.模拟键盘事件System.Windows.Forms.SendKeys以下是SendKeys 的一些特殊键代码表。
键代码BACKSPACE {BACKSPACE}、{BS} 或{BKSP}BREAK {BREAK}CAPS LOCK {CAPSLOCK}DEL 或DELETE {DELETE} 或{DEL}DOWN ARROW(下箭头键){DOWN}END {END}ENTER {ENTER} 或~ESC {ESC}HELP {HELP}HOME {HOME}INS 或INSERT {INSERT} 或{INS}LEFT ARROW(左箭头键){LEFT}NUM LOCK {NUMLOCK}PAGE DOWN {PGDN}PAGE UP {PGUP}PRINT SCREEN {PRTSC}(保留,以备将来使用)RIGHT ARROW(右箭头键){RIGHT}SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW(上箭头键){UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号{ADD}数字键盘减号{SUBTRACT}数字键盘乘号{MULTIPLY}数字键盘除号{DIVIDE}若要指定与SHIFT、CTRL 和ALT 键的任意组合一起使用的键,请在这些键代码之前加上以下一个或多个代码:键代码SHIFT + (SHIFT="+")CTRL ^ (CTRL="^") 如果输入ALT % private void button1_Click(object sender, System.EventArgs e) {//英文输入this.richTextBox1.Focus();for(int i=65;i<91;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}for(int i=97;i<123;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}private void button3_Click(object sender, System.EventArgs e) {//数字输入this.richTextBox1.Focus();for(int i=0;i<10;i++){SendKeys.Send(i.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}private void button4_Click(object sender, System.EventArgs e) {//Backspacethis.richTextBox1.Focus();SendKeys.Send("{Backspace}");}private void button5_Click(object sender, System.EventArgs e) {//Homethis.richTextBox1.Focus();SendKeys.Send("{Home}");}private void button6_Click(object sender, System.EventArgs e) {//Endthis.richTextBox1.Focus();SendKeys.Send("{End}");}private void button7_Click(object sender, System.EventArgs e) {//Enterthis.richTextBox1.Focus();SendKeys.Send("{Enter}");private void button8_Click(object sender, System.EventArgs e) {//Deletethis.richTextBox1.Focus();SendKeys.Send("{Delete}");}private void button2_Click(object sender, System.EventArgs e) {//Shift+Homethis.richTextBox1.Focus();SendKeys.Send("+{Home}");}private void button9_Click(object sender, System.EventArgs e) {//Shift+Endthis.richTextBox1.Focus();SendKeys.Send("+{End}");}看下方法的说明public class SendKeys : System.ObjectSystem.Windows.Forms 的成员摘要:提供将键击发送到应用程序的方法。
模拟鼠标事件的实现思路及代码
![模拟鼠标事件的实现思路及代码](https://img.taocdn.com/s3/m/5e8576a0112de2bd960590c69ec3d5bbfd0adaad.png)
模拟鼠标事件的实现思路及代码鼠标事件是指在计算机应用程序中,用户通过鼠标和其它输入设备进行操作时产生的一系列事件。
鼠标事件包括点击、双击、移动、按下和释放等操作,对于许多交互式应用程序来说,鼠标事件是非常重要的。
在本文中,我将介绍一种实现模拟鼠标事件的思路,并提供相关的代码示例。
实现思路:1.首先,需要确定要模拟的鼠标事件的类型。
常见的鼠标事件包括点击、双击、移动、按下和释放等。
根据所需的具体功能,选择相应的事件类型。
2.确定事件的触发方式。
鼠标事件可以通过多种方式触发,例如在窗口中点击鼠标按钮、按下键盘上的一些按键等。
3. 通过操作系统提供的API或库函数,模拟鼠标事件的产生。
不同的操作系统提供不同的API或库函数来模拟鼠标事件。
在Windows操作系统中,可以使用Win32 API提供的函数来模拟鼠标事件;在Linux操作系统中,可以使用X Window系统提供的函数来模拟鼠标事件;在Mac OS操作系统中,可以使用Quartz库提供的函数来模拟鼠标事件。
4.编写代码实现相应的模拟鼠标事件功能。
根据所选的编程语言和操作系统,编写代码来实现模拟鼠标事件的功能。
代码应包括鼠标事件的触发、产生和处理等逻辑。
代码示例:下面是一个使用C#语言在Windows操作系统上实现模拟鼠标点击事件的代码示例:```csharpusing System;class Program[DllImport("user32.dll")]public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);const uint MOUSEEVENTF_LEFTDOWN = 0x02;const uint MOUSEEVENTF_LEFTUP = 0x04;static void Main(string[] args)//模拟鼠标点击事件SimulateMouseClick(500, 500);}static void SimulateMouseClick(int x, int y)//移动鼠标到指定位置SetCursorPosition(x, y);//模拟鼠标按下并释放左键mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, UIntPtr.Zero);mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, UIntPtr.Zero);}static void SetCursorPosition(int x, int y)SetCursorPos(x, y);}[DllImport("user32.dll")]private static extern bool SetCursorPos(int X, int Y);```上述代码通过调用Windows提供的`mouse_event`函数,模拟鼠标点击事件。
C#模拟键盘鼠标事件-SendKeys
![C#模拟键盘鼠标事件-SendKeys](https://img.taocdn.com/s3/m/2ded730279563c1ec5da715a.png)
C#模拟键盘鼠标事件-SendKeys2007-09-18 15:13 7689人阅读评论(1) 收藏举报1.模拟键盘事件System.Windows.Forms.SendKeys以下是SendKeys 的一些特殊键代码表。
键代码BACKSPACE {BACKSPACE}、{BS} 或{BKSP}BREAK {BREAK}CAPS LOCK {CAPSLOCK}DEL 或DELETE {DELETE} 或{DEL}DOWN ARROW(下箭头键){DOWN}END {END}ENTER {ENTER} 或~ESC {ESC}HELP {HELP}HOME {HOME}INS 或INSERT {INSERT} 或{INS}LEFT ARROW(左箭头键){LEFT}NUM LOCK {NUMLOCK}PAGE DOWN {PGDN}PAGE UP {PGUP}PRINT SCREEN {PRTSC}(保留,以备将来使用)RIGHT ARROW(右箭头键){RIGHT}SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW(上箭头键){UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号{ADD}数字键盘减号{SUBTRACT}数字键盘乘号{MULTIPLY}数字键盘除号{DIVIDE}若要指定与SHIFT、CTRL 和ALT 键的任意组合一起使用的键,请在这些键代码之前加上以下一个或多个代码:键代码SHIFT + (SHIFT="+")CTRL ^ (CTRL="^") 如果输入ALT % private void button1_Click(object sender, System.EventArgs e) {//英文输入this.richTextBox1.Focus();for(int i=65;i<91;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}for(int i=97;i<123;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}private void button3_Click(object sender, System.EventArgs e) {//数字输入this.richTextBox1.Focus();for(int i=0;i<10;i++){SendKeys.Send(i.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}private void button4_Click(object sender, System.EventArgs e) {//Backspacethis.richTextBox1.Focus();SendKeys.Send("{Backspace}");}private void button5_Click(object sender, System.EventArgs e) {//Homethis.richTextBox1.Focus();SendKeys.Send("{Home}");}private void button6_Click(object sender, System.EventArgs e) {//Endthis.richTextBox1.Focus();SendKeys.Send("{End}");}private void button7_Click(object sender, System.EventArgs e) {//Enterthis.richTextBox1.Focus();SendKeys.Send("{Enter}");private void button8_Click(object sender, System.EventArgs e) {//Deletethis.richTextBox1.Focus();SendKeys.Send("{Delete}");}private void button2_Click(object sender, System.EventArgs e) {//Shift+Homethis.richTextBox1.Focus();SendKeys.Send("+{Home}");}private void button9_Click(object sender, System.EventArgs e) {//Shift+Endthis.richTextBox1.Focus();SendKeys.Send("+{End}");}看下方法的说明public class SendKeys : System.ObjectSystem.Windows.Forms 的成员摘要:提供将键击发送到应用程序的方法。
按键精灵event的用法
![按键精灵event的用法](https://img.taocdn.com/s3/m/4507ddf10d22590102020740be1e650e52eacf6b.png)
按键精灵event的用法
按键精灵是一个自动化操作工具,可以模拟键盘和鼠标的操作。
其中,event函数是按键精灵中的一个重要函数,它可以通过发送指定的键码或字符来模拟键盘操作。
语法格式:
event(eventType, vkCode, scanCode, flags, time, hwnd) 其中,eventType表示事件类型,可以是以下值之一:
1. KEYEVENTF_KEYDOWN:按下键。
2. KEYEVENTF_KEYUP:释放键。
3. KEYEVENTF_EXTENDEDKEY:扩展键,如功能键、小键盘上的键等。
vkCode表示键码,scanCode表示扫描码,flags表示附加标志,time表示事件发生时间,hwnd表示窗口句柄。
例如,下面的代码可以模拟按下“Alt+F4”组合键:
event(1, 18, 0, 0, 0, 0) --按下Alt键
event(1, 115, 0, 0, 0, 0) --按下F4键
event(2, 115, 0, 2, 0, 0) --释放F4键
event(2, 18, 0, 2, 0, 0) --释放Alt键
除了模拟按键操作外,event函数还可以模拟鼠标操作,例如模拟单击、拖拽等。
需要注意的是,使用该函数时需要确保输入法处于英文状态,否则可能会出现无法正确模拟按键的情况。
总之,按键精灵的event函数是一个非常强大的函数,可以为我
们的自动化操作提供很大的帮助,但是在使用时需要特别小心,避免误操作导致不可挽回的后果。
android详细解释键盘和鼠标事件
![android详细解释键盘和鼠标事件](https://img.taocdn.com/s3/m/730772ba1a37f111f1855b6b.png)
/jinhaijian/article/details/6013985目的:通过全面的分析Android的鼠标和键盘事件。
了解Android中如何接收和处理键盘和鼠标事件,以及如何用代码来产生事件。
主要学习内容:1. 接收并处理鼠标事件:按下、弹起、移动、双击、长按、滑动、滚动2. 接收并处理按键事件:按下、弹起3. 模拟鼠标/按键事件1. Android事件现代的用户界面,都是以事件来驱动的来实现人机交换的,而Android上的一套UI控件,无非就是派发鼠标和键盘事件,然后每个控件收到相应的事件之后,做相应的处理。
如Button 控件,就只需要处理Down、move、up这几个事件,Down的时候重绘控件,move的时候一般也需要重绘控件,当up的时候,重绘控件,然后产生onClick事件。
在Android中通过实现OnClickListener接口的onClick方法来实现对Button控件的处理。
对于触摸屏事件(鼠标事件)有按下有:按下、弹起、移动、双击、长按、滑动、滚动。
按下、弹起、移动(down、move、up)是简单的触摸屏事件,而双击、长按、滑动、滚动需要根据运动的轨迹来做识别的。
在Android中有专门的类去识别,android.view.GestureDetector。
对于按键(keyevent),无非就是按下、弹起、长按等。
2. Android事件处理Android手机的坐标系是以左上定点为原点坐标(0,0), 向右为X抽正方形,向下为Y抽正方向。
2.1 简单触摸屏事件在Android中任何一个控件和Activity都是间接或者直接继承于android.view.View。
一个View对象可以处理测距、布局、绘制、焦点变换、滚动条,以及触屏区域自己表现的按键和手势。
当我们重写View中的onTouchEvent(MotionEvent)方法后,就可以处理简单的触摸屏事件。
代码如下:view plaincopy to clipboardprint?1.public boolean onTouchEvent(MotionEvent event)2. {3. int events[] = {MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE,4. MotionEvent.ACTION_UP, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE,5. MotionEvent.ACTION_POINTER_DOWN,MotionEvent.ACTION_POINTER_UP,6. MotionEvent.EDGE_TOP,MotionEvent.EDGE_BOTTOM,MotionEvent.EDGE_LEFT,MotionEvent.EDGE_RIGHT};7.8. String szEvents[]={"ACTION_DOWN", "ACTION_MOVE",9. "ACTION_UP", "ACTION_MOVE", "ACTION_CANCEL", "ACTION_OUTSIDE",10. "ACTION_POINTER_DOWN","ACTION_POINTER_UP",11. "EDGE_TOP","EDGE_BOTTOM","EDGE_LEFT","EDGE_RIGHT"};12. for(int i=0; i < events.length; i++)13. {14. if(events[i] == event.getAction())15. {16. if(oldevent != event.getAction())17. {18. DisplayEventType(szEvents[i]);19. oldevent = event.getAction();20. }21. break;22. }23. }24. return super.onTouchEvent(event);25. }1.import android.view.GestureDetector;2.import android.view.GestureDetector.OnGestureListener;3.public class TestEvent extends Activity {4. /** Called when the activity is first created. */5.6. TextView m_eventType;7. int oldevent = -1;8. private GestureDetector gestureDetector= new GestureDetector(new OnGestureListener()9. {10.11. // 鼠标按下的时候,会产生onDown。
win32模拟鼠标键盘操作
![win32模拟鼠标键盘操作](https://img.taocdn.com/s3/m/84b13dfa6394dd88d0d233d4b14e852458fb3925.png)
win32模拟⿏标键盘操作import win32gui, win32ui, win32con, win32apiimport time# 获取当前⿏标的位置class Opt():VK_CODE = {'backspace': 0x08,'tab': 0x09,'clear': 0x0C,'enter': 0x0D,'shift': 0x10,'ctrl': 0x11,'alt': 0x12,'pause': 0x13,'caps_lock': 0x14,'esc': 0x1B,'spacebar': 0x20,'page_up': 0x21,'page_down': 0x22,'end': 0x23,'home': 0x24,'left_arrow': 0x25,'up_arrow': 0x26,'right_arrow': 0x27,'down_arrow': 0x28,'select': 0x29,'print': 0x2A,'execute': 0x2B,'print_screen': 0x2C,'ins': 0x2D,'del': 0x2E,'help': 0x2F,'0': 0x30,'1': 0x31,'2': 0x32,'3': 0x33,'4': 0x34,'5': 0x35,'6': 0x36,'7': 0x37,'8': 0x38,'9': 0x39,'a': 0x41,'b': 0x42,'c': 0x43,'d': 0x44,'e': 0x45,'f': 0x46,'g': 0x47,'h': 0x48,'i': 0x49,'j': 0x4A,'k': 0x4B,'l': 0x4C,'m': 0x4D,'n': 0x4E,'o': 0x4F,'p': 0x50,'q': 0x51,'r': 0x52,'s': 0x53,'t': 0x54,'u': 0x55,'v': 0x56,'w': 0x57,'x': 0x58,'y': 0x59,'z': 0x5A,'numpad_0': 0x60,'numpad_1': 0x61,'numpad_2': 0x62,'numpad_3': 0x63,'numpad_4': 0x64,'numpad_5': 0x65,'numpad_6': 0x66,'numpad_7': 0x67,'numpad_8': 0x68,'numpad_9': 0x69,'multiply_key': 0x6A,'add_key': 0x6B,'separator_key': 0x6C,'subtract_key': 0x6D,'decimal_key': 0x6E,'divide_key': 0x6F,'F1': 0x70,'F2': 0x71,'F3': 0x72,'F4': 0x73,'F5': 0x74,'F6': 0x75,'F7': 0x76,'F8': 0x77,'F9': 0x78,'F10': 0x79,'F11': 0x7A,'F12': 0x7B,'F13': 0x7C,'F14': 0x7D,'F15': 0x7E,'F16': 0x7F,'F17': 0x80,'F18': 0x81,'F19': 0x82,'F20': 0x83,'F21': 0x84,'F22': 0x85,'F23': 0x86,'F24': 0x87,'num_lock': 0x90,'scroll_lock': 0x91,'left_shift': 0xA0,'right_shift ': 0xA1,'left_control': 0xA2,'right_control': 0xA3,'left_menu': 0xA4,'right_menu': 0xA5,'browser_back': 0xA6,'browser_forward': 0xA7,'browser_refresh': 0xA8,'browser_stop': 0xA9,'browser_search': 0xAA,'browser_favorites': 0xAB,'browser_start_and_home': 0xAC, 'volume_mute': 0xAD,'volume_Down': 0xAE,'volume_up': 0xAF,'next_track': 0xB0,'previous_track': 0xB1,'stop_media': 0xB2,'play/pause_media': 0xB3,'start_mail': 0xB4,'select_media': 0xB5,'start_application_1': 0xB6,'start_application_2': 0xB7,'attn_key': 0xF6,'crsel_key': 0xF7,'exsel_key': 0xF8,'play_key': 0xFA,'zoom_key': 0xFB,'clear_key': 0xFE,'+': 0xBB,',': 0xBC,'-': 0xBD,'.': 0xBE,'/': 0xBF,'`': 0xC0,';': 0xBA,'[': 0xDB,'\\': 0xDC,']': 0xDD,"'": 0xDE,'`': 0xC0}# 当前⿏标位置def cursor_point(self):pos = win32api.GetCursorPos()return int(pos[0]), int(pos[1])# 移动⿏标位置def mouse_move(self, new_x, new_y):if new_y is not None and new_x is not None:point = (new_x, new_y)# print(point)win32api.SetCursorPos(point)self.x = new_xself.y = new_y# print(cursor_point())# ⿏标左击事件def mouse_left_click(self, new_x=None, new_y=None, times=1):self.mouse_move(new_x, new_y)time.sleep(0.1)while times:win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)times -= 1# ⿏标右击事件def mouse_right_click(self, new_x=None, new_y=None):self.mouse_move(new_x, new_y)time.sleep(0.1)win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN,0,0,0,0)win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP,0,0,0,0)# 键盘输⼊⽂本def key_input(self, input_words=''):for word in input_words:win32api.keybd_event(self.VK_CODE[word],0,0,0)win32api.keybd_event(self.VK_CODE[word],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(0.1)# 键盘输⼊事件def key_even(self, input_key):win32api.keybd_event(self.VK_CODE[input_key],0,0,0)win32api.keybd_event(self.VK_CODE[input_key],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(1)# 按下ctrl+adef ctrl_a(self):win32api.keybd_event(0x11, 0, 0, 0)win32api.keybd_event(0x41, 0, 0, 0)win32api.keybd_event(0x41, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1)def get_windows(windowsname):# 获取窗⼝句柄handle = win32gui.FindWindow(None,windowsname)# 将窗⼝放在前台,并激活该窗⼝(窗⼝不能最⼩化)win32gui.SetForegroundWindow(handle)# 获取窗⼝DChdDC = win32gui.GetWindowDC(handle)# 根据句柄创建⼀个DCnewhdDC = win32ui.CreateDCFromHandle(hdDC)# 创建⼀个兼容设备内存的DCsaveDC = newhdDC.CreateCompatibleDC()def image(appnos): # 补充扫描opt = Opt()for appno in appnos:print("当前⿏标位置为,", opt.cursor_point())# opt.mouse_left_click(204, 58) # Start Scaningopt.mouse_left_click(198, 59)print("当前⿏标位置为,", opt.cursor_point())time.sleep(1)# 弹窗1, 点击扫描扫描间隔6sopt.mouse_left_click(1016, 554) # Notime.sleep(8)# 进⼊路径,填写投保单号opt.mouse_right_click(69, 158) # appnotime.sleep(0.5)opt.mouse_left_click(222, 168) # Changetime.sleep(0.5)opt.mouse_left_click(437, 176) # Change appno1040.5 498.5 time.sleep(0.5)opt.mouse_left_click(1040, 498) # NOtime.sleep(0.5)opt.ctrl_a()for _ in range(2):opt.key_even('backspace')opt.key_input(str(int(appno)))opt.mouse_left_click(879, 562) # Change appno YES 879.5 562.5 time.sleep(0.5)opt.mouse_left_click(49, 158) # 勾选框time.sleep(0.5)# opt.mouse_left_click(29, 145) # 勾选框print("当前⿏标位置为,", opt.cursor_point())opt.mouse_left_click(1009, 70) # uploadtime.sleep(4)opt.mouse_left_click(1007, 615, 2) # 确定time.sleep(0.5)print(appno)def newImage(appnos): # 新单扫描opt = Opt()for appno in appnos:get_windows("NB scan")opt = Opt()opt.mouse_left_click(201, 87) # Start Scanningtime.sleep(8)# 106, 180# 进⼊路径,填写投保单号opt.mouse_right_click(106, 180) # appnotime.sleep(0.5)opt.mouse_left_click(203, 191) # Changetime.sleep(0.5)opt.mouse_left_click(445, 191) # Change appno1040.5 498.5 time.sleep(0.5)opt.mouse_left_click(1040, 497) # NOtime.sleep(0.5)opt.ctrl_a()for _ in range(2):opt.key_even('backspace')opt.key_input(str(int(appno)))opt.mouse_left_click(879, 562) # Change appno YES 879.5 562.5 time.sleep(0.5)opt.mouse_left_click(52, 183) # 勾选框 52, 183 37, 167time.sleep(0.5)# opt.mouse_left_click(29, 145) # 勾选框print("当前⿏标位置为,", opt.cursor_point())opt.mouse_left_click(1015, 100) # uploadtime.sleep(4)opt.mouse_left_click(1000, 618, 2) # 确定 1000, 618time.sleep(0.5)print(appno)if __name__ == '__main__':get_windows("NB supplementary scan")# get_windows("ImagingClientLogin")time.sleep(0.5)image([2800210835,2800210836,2800210837,2800210838])# get_windows("NB scan")# time.sleep(0.5)# newImage([# 2800210835,# 2800210836,# 2800210837,# 2800210838,# ])。
pynput 用法
![pynput 用法](https://img.taocdn.com/s3/m/d4ac8f2b24c52cc58bd63186bceb19e8b9f6ec42.png)
pynput 用法Pynput是一个用于控制和监控键盘和鼠标的Python库。
它提供了一种非常便捷的方式来模拟按键和鼠标事件,并且可以捕获键盘和鼠标的输入。
使用Pynput,你可以编写Python程序来自动化键盘和鼠标操作。
你可以模拟键盘按键的输入,例如按下和释放某个键,或者发送特殊的组合键如Ctrl+C。
此外,你还可以移动鼠标指针、点击鼠标按钮以及滚动鼠标滚轮。
除了模拟输入,Pynput还可以捕获键盘和鼠标事件。
你可以注册回调函数来处理按键按下、按键释放以及鼠标移动、点击等事件。
这意味着你可以利用Pynput 来开发键盘记录器、屏幕截图工具、自定义的鼠标控制器等等。
为了使用Pynput库,你首先需要安装它。
你可以使用Python的包管理器pip 来安装,只需在命令行中运行"pip install pynput"即可。
代码示例:```pythonfrom pynput.keyboard import Key, Controllerkeyboard = Controller()# 模拟按键操作keyboard.press(Key.ctrl)keyboard.press('c')keyboard.release('c')keyboard.release(Key.ctrl)# 移动鼠标from pynput.mouse import Controllermouse = Controller()mouse.position = (100, 100)mouse.move(50, 50)# 捕获按键事件from pynput.keyboard import Listenerdef on_press(key):print(f'按键 {key} 被按下')def on_release(key):print(f'按键 {key} 被释放')with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()# 捕获鼠标事件from pynput.mouse import Listenerdef on_move(x, y):print(f'鼠标移动到 ({x}, {y})')def on_click(x, y, button, pressed):if pressed:print(f'鼠标点击在 ({x}, {y})')def on_scroll(x, y, dx, dy):print(f'鼠标滚轮滚动 {dx}, {dy}')with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:listener.join()```通过上述代码示例,你可以开始使用Pynput库来控制和监控键盘和鼠标,实现各种自动化和定制化的需求。
js中window的proxy方法
![js中window的proxy方法](https://img.taocdn.com/s3/m/e8b2af91d05abe23482fb4daa58da0116c171f2a.png)
js中window的proxy方法【引言】在JavaScript中,Window对象是一个非常重要的概念,它代表浏览器窗口。
Window对象提供了一系列方法,方便开发者操作浏览器窗口。
今天,我们将探讨Window对象中的proxy方法,了解其用途及如何使用。
【Window对象概述】Window对象是JavaScript中全局对象的实例,它提供了对浏览器窗口的全面控制。
通过Window对象,我们可以操作浏览器窗口的属性,如宽度、高度、滚动条等。
此外,Window对象还包含了许多实用的方法,如alert、prompt等。
【Window的proxy方法介绍】proxy是Window对象的一个方法,其主要用于在浏览器窗口中模拟鼠标和键盘事件。
通过使用proxy方法,开发者可以轻松地实现一些高级交互功能。
以下是proxy方法的语法:```javascriptWindow.proxy(eventName, target, method);```- eventName:事件名称,如"mousedown"、"mouseup"等。
- target:事件目标对象,即要在哪个元素上触发事件。
- method:事件处理函数,用于处理触发事件后的逻辑。
【proxy方法的用途和实例】1.模拟鼠标点击:```javascript// 创建一个按钮var button = document.createElement("button"); button.innerHTML = "点击我";// 将按钮添加到页面中document.body.appendChild(button);// 模拟点击按钮Window.proxy("mousedown", button, function() { console.log("模拟鼠标按下");});Window.proxy("mouseup", button, function() { console.log("模拟鼠标弹起");});```2.模拟键盘事件:```javascript// 创建一个输入框var input = document.createElement("input"); input.type = "text";// 将输入框添加到页面中document.body.appendChild(input);// 模拟键盘输入Window.proxy("keydown", input, function(event) {console.log("模拟键盘按下:", event.keyCode);});```【总结】本文详细介绍了JavaScript中Window对象的proxy方法,通过实例演示了如何使用proxy方法模拟鼠标和键盘事件。
adb shell中模拟键盘鼠标事件
![adb shell中模拟键盘鼠标事件](https://img.taocdn.com/s3/m/062e411452d380eb62946d4f.png)
Android自动化测试初探-5:再述模拟键盘鼠标事件(adb shell 实现)2010-07-28 17:01上一篇博文中讲述了通过Socket编程从外部向Emulator发送键盘鼠标模拟事件,貌似实现细节有点复杂。
其实Android还有一种更简单的模拟键盘鼠标事件的方法,那就是通过使用adb shell 命令。
1. 发送键盘事件:命令格式1:adb shell input keyevent “value”其中value以及对应的key code如下表所列:KeyEvent ValueKEYCODECommentKEYCODE_UNKNOWN1KEYCODE_MENU在SDK2.1的模拟器中命令失效,sendevent命令可行2KEYCODE_SOFT_RIGHT3KEYCODE_HOME4KEYCODE_BACK5KEYCODE_CALL6KEYCODE_ENDCALLKEYCODE_08 KEYCODE_19 KEYCODE_210 KEYCODE_311 KEYCODE_412 KEYCODE_513 KEYCODE_614 KEYCODE_715 KEYCODE_816 KEYCODE_917 KEYCODE_STARKEYCODE_POUND19KEYCODE_DPAD_UP20KEYCODE_DPAD_DOWN21KEYCODE_DPAD_LEFT22KEYCODE_DPAD_RIGHT23KEYCODE_DPAD_CENTER24KEYCODE_VOLUME_UP25KEYCODE_VOLUME_DOWN26KEYCODE_POWER27KEYCODE_CAMERA28KEYCODE_CLEARKEYCODE_A30 KEYCODE_B31 KEYCODE_C32 KEYCODE_D33 KEYCODE_E34 KEYCODE_F35 KEYCODE_G36 KEYCODE_H37 KEYCODE_I38 KEYCODE_J39 KEYCODE_KKEYCODE_L41 KEYCODE_M42 KEYCODE_N43 KEYCODE_O44 KEYCODE_P45 KEYCODE_Q46 KEYCODE_R47 KEYCODE_S48 KEYCODE_T49 KEYCODE_U50 KEYCODE_VKEYCODE_W52KEYCODE_X53KEYCODE_Y54KEYCODE_Z55KEYCODE_COMMA56KEYCODE_PERIOD57KEYCODE_ALT_LEFT58KEYCODE_ALT_RIGHT59KEYCODE_SHIFT_LEFT60KEYCODE_SHIFT_RIGHT61KEYCODE_TABKEYCODE_SPACE63KEYCODE_SYM64KEYCODE_EXPLORER65KEYCODE_ENVELOPE66KEYCODE_ENTER67KEYCODE_DEL68KEYCODE_GRAVE69KEYCODE_MINUS70KEYCODE_EQUALS71KEYCODE_LEFT_BRACKET72KEYCODE_RIGHT_BRACKETKEYCODE_BACKSLASH74KEYCODE_SEMICOLON75KEYCODE_APOSTROPHE76KEYCODE_SLASH77KEYCODE_AT78KEYCODE_NUM79KEYCODE_HEADSETHOOK80KEYCODE_FOCUS81KEYCODE_PLUS82KEYCODE_MENU83KEYCODE_NOTIFICATIONKEYCODE_SEARCH85TAG_LAST_KEYCODE命令格式2:adb shell sendevent [device] [type] [code] [value]如: adb shell sendevent /dev/input/event0 1 229 1 代表按下按下menu 键adb shell sendevent /dev/input/event0 1 229 0 代表按下松开menu 键说明:上述的命令需组合使用另外所知道的命令如下:Key Name CODEMENU 229HOME 102BACK (back button) 158CALL (call button) 231END (end call button) 1072. 发送鼠标事件(Touch):命令格式:adb shell sendevent [device] [type] [code] [value]情况1:在某坐标点上touch如在屏幕的x坐标为40,y坐标为210的点上touch一下,命令如下adb shell sendevent /dev/input/event0 3 0 40adb shell sendevent /dev/input/event0 3 1 210adb shell sendevent /dev/input/event0 1 330 1 //touchadb shell sendevent /dev/input/event0 0 0 0 //it must haveadb shell sendevent /dev/input/event0 1 330 0 //untouchadb shell sendevent /dev/input/event0 0 0 0 //it must have注:以上六组命令必须配合使用,缺一不可情况2:模拟滑动轨迹(可下载并采用aPaint软件进行试验)如下例是在aPaint软件上画出一条开始于(100,200),止于(108,200)的水平直线adb shell sendevent /dev/input/event0 3 0 100 //start from point (100,200)adb shell sendevent /dev/input/event0 3 1 200adb shell sendevent /dev/input/event0 1 330 1 //touchadb shell sendevent /dev/input/event0 0 0 0adb shell sendevent /dev/input/event0 3 0 101 //step to point (101,200)adb shell sendevent /dev/input/event0 0 0 0…………………… //m ust list each step, here just skipadb shell sendevent /dev/input/event0 3 0 108 //end point(108,200)adb shell sendevent /dev/input/event0 0 0 0adb shell sendevent /dev/input/event0 1 330 0 //untouchadb shell sendevent /dev/input/event0 0 0 0。
VB模拟鼠标键盘动作
![VB模拟鼠标键盘动作](https://img.taocdn.com/s3/m/c3cfd585ec3a87c24028c4c6.png)
模拟鼠标键盘动作有些时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。
那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows 中响应键盘事件的机制。
当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。
如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。
当你按下一个键时,这个键的扫描码就被传给系统。
扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。
键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。
键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。
什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。
无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。
简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。
当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。
然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。
最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。
这个过程可以简单的如下表示:用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口明白了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。
Java使用Robot类模拟鼠标、键盘事件
![Java使用Robot类模拟鼠标、键盘事件](https://img.taocdn.com/s3/m/126fc31d77c66137ee06eff9aef8941ea76e4bff.png)
Java使⽤Robot类模拟⿏标、键盘事件Robot类⽤于模拟⿏标、键盘事件,⽣成本机系统输⼊事件。
Robot 的主要⽤于⾃动化、⾃运⾏的程序和其他需要⾃动控制⿏标和键盘的程序相当于实际操作的效果,不仅仅只是⽣成对应的⿏标、键盘事件。
⽐如Robot.mouseMove() 将实际移动⿏标光标,⽽不是只⽣成⿏标移动事件。
实现的是本机的全局模拟,不仅仅局限于写的程序和IDERobot类常⽤⽅法:void delay (int ms) 睡眠指定的时间(类似于线程中sleep)void keyPress(int keycode)按下指定的键void keyRelease(int keycode)释放指定的键void mousePress(int buttons)按下⼀个或多个⿏标按键void mouseRelease(int buttons)释放⼀个活多个⿏标按键void mouseMove(int x,int y)将⿏标移动到给定的屏幕坐标上void mouseWheel(int wheelAmt)滚动⿏标滑轮实例:1package my_package;23import java.awt.*;4import java.awt.event.InputEvent;5import java.awt.event.KeyEvent;678/**9 * 利⽤Robot实现⾃动清屏10*/11public class Test {12public static void main(String[] args) throws AWTException {13 System.out.println("ok");14 Robot robot = new Robot();1516//将⿏标移到控制台区域17 robot.mouseMove(300,600);1819//单击右键20 robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);21 robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);2223//按CTRL+⼩键盘的数字0,实现清屏。
C#模拟鼠标键盘动作
![C#模拟鼠标键盘动作](https://img.taocdn.com/s3/m/7486d53d67ec102de2bd89e6.png)
C#模拟鼠标键盘动作在实际应用中,有时需要程序模拟鼠标点击或键盘按键操作,代替某些程序既定的人工操作,这样不但省时省力,效率较高,而且可以进行一些人力很难持续完成的工作。
因为人是血肉之躯,人有思考的能力,但是人是会疲劳的,而电脑不会,只要有足够的资源和性能稳定的硬件设备。
模拟键盘动作SendKeys.Send 方法向活动应用程序发送击键。
命名空间:System.Windows.Forms程序集:System.Windows.Forms(在System.Windows.Forms.dll 中)方法签名:public static void Send(string keys)参数keys类型:System.String要发送的击键字符串。
备注:每个键都由一个或多个字符表示。
要指定单个键盘字符,请使用该字符本身。
例如,要表示字母 A,请将字符串“A”传递给方法。
要表示多个字符,请将各个附加字符追加到它之前的字符的后面。
要表示字母 A、B 和 C,请将参数指定为“ABC”。
加号 (+)、插入符号 (^)、百分号 (%)、波形符 (~) 以及圆括号 () 对SendKeys具有特殊含义。
要指定这些字符中的某个字符,请将其放在大括号 ({}) 内。
例如,要指定加号,请使用“{+}”。
要指定大括号字符,请使用“{{}”和“{}}”。
中括号 ([ ]) 对SendKeys没有特殊含义,但必须将它们放在大括号内。
在其他应用程序中,中括号具有特殊含义,此含义可能会在发生动态数据交换 (DDE) 时起重要作用。
键盘字符要指定在按键(如 Enter 或 Tab)时不显示的字符,以及表示操作而不表示字符的键,请使用下表中的代码。
键代码Backspace {BACKSPACE}、{BS} 或 {BKSP} Break {BREAK}Caps Lock {CAPSLOCK}Del 或 Delete {DELETE} 或 {DEL}向下键{DOWN}End {END}Enter {ENTER} 或 ~Esc {ESC}Help {HELP}Home {HOME}Ins 或 Insert {INSERT} 或 {INS}向左键{LEFT}Num Lock {NUMLOCK}Page Down {PGDN}向上翻页{PGUP}Print Screen {PRTSC}(保留供将来使用)向右键{RIGHT}Scroll Lock {SCROLLLOCK}TAB {TAB}向上键{UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号{ADD}数字键盘减号{SUBTRACT}数字键盘乘号{MULTIPLY}数字键盘除号{DIVIDE}要指定与 Shift、Ctrl 和 Alt 键的任意组合一起使用的键,请在这些键代码之前加上以下一段或多段代码。
键盘怎么模拟鼠标操作
![键盘怎么模拟鼠标操作](https://img.taocdn.com/s3/m/00ffc7de4128915f804d2b160b4e767f5acf80b3.png)
键盘怎么模拟鼠标操作使用计算机时总会遇到一些小问题,比如,鼠标坏了!Windows 提供了用键盘模拟鼠标的方法,可解燃眉之急了,下面由店铺教大家怎么使用键盘模拟鼠标操作。
键盘怎么模拟鼠标操作1①打开鼠标键(1)按Ctrl+Esc组合键打开开始选单,按S键然后按C键打开控制面板;(2)按方向键移动到“辅助选项”,按回车键打开它的属性对话框;(3)按Ctrl+Tab组合键切换到“鼠标”页,按Alt+M组合键选中“使用鼠标键”选项;(4)按Alt+S组合键进入鼠标键设置对话框,按Alt+T选中“最高速度”项,然后按右方向键将其调至最大,同理,将“加速”项调至最大;(5)按两次回车键退出对话框后就可以使用鼠标键了。
注1:如果你启用鼠标键的目的是做一些辅助的事情,可以省去上面的第(4)步。
注2:启用鼠标键后托盘中会显示一个鼠标图标。
②鼠标键的打开与关闭按NumLock键进行切换。
③鼠标键的三种状态(1)标准单击状态:启用鼠标键后系统处于该状态下,此时,所有的操作都与左键有关,托盘中的鼠标图标左键发暗;(2)右键单击状态:按数字键盘上的减号(-)进入该状态,此时所有的操作都与右键有关,托盘中的鼠标图标右键发暗。
(3)同时按下左右键状态:按数字键盘上的.星号(*)进入该状态,此时所有的操作都是在左、右两键同时按下的状态下进行,托盘中的鼠标图标左、右两键都发暗。
要切换到标准单击状态,按数字键盘上的斜杠(/)键。
④用“鼠标键”移动鼠标指针(1)水平或垂直移动鼠标指针:按数字键盘上的箭头键;(2)沿对角移动鼠标指针:按数字键盘上的Home、End、PageUp和Page Down键;(3)加快移动:先按住Ctrl键,然后再按(1)、(2)中的按键;(4)减慢移动:先按住Shift键,然后再按(1)、(2)中的按键。
⑤用“鼠标键”单击以下涉及的所用按键均指数字键盘上的按键。
(1)左键单击,按5,要双击则按加号(+);(2)右键单击,先按减号(-)进入右键单击状态,然后按5,此后要用右键双击则按加号(+)即可。
python模拟鼠标键盘操作
![python模拟鼠标键盘操作](https://img.taocdn.com/s3/m/c3b51f846429647d27284b73f242336c1eb9309c.png)
python模拟⿏标键盘操作前⾔1 懒⼈,⼯作中可以模拟真⼈操作,不⽤⾃⼰点击2游戏⼈员这是做模拟外挂的必备知识,不管⼿机还是电脑游戏,尤其副本准备模块代码如下:实现了⼀个最简单的输⼊密码,enter进⼊的登录过程如果想遍历,可以使⽤itertools 包,很有⽤,具体⽤法这⾥不介绍了。
· ⿏标点击有m.click(x, y, button, n) -- 点击,想x,y坐标,button:-1表⽰左键,-2表⽰右键,n:默认1次,2双击m.move(x, y) -- ⿏标移动m.screen_size() -- 获取屏幕尺⼨· 键盘操作k.type_string('abcdefg') --输⼊内容k.press_key('a') --按a键k.release_key('a') --松开a键k.tap_key('a') --点击a键k.tap_key('a', n=2, interval=5) --点击a键2次,每次间隔5秒k.tap_key(k.function_keys[5]) --功能键F5k.press_keys([k.alt_key, 'a']) --组合按键,试验不成功win10 系统没反应关于监听键盘操作窗⼝:import pyHookimport pythoncom需要⽤到这两个模块,安装⽅法可以⽹上百度,我下载的是pyHook-1.5.1-cp27-cp27m-win_amd64.whl,放到python安装⽬录Scripts下,执⾏pip install pyHook-1.5.1-cp27-cp27m-win_amd64.whl即可其中ctypes⽐较复杂,会单独写⼀篇运⾏结果如下,可以把输⼊的内容保存到⼀个⽂档中(例えば:txt/excel)这是两张图⽚拼出来的,拼接处有些明显,具体实现如下1 2 3 4 5 6 7import Imageimage1 =Image.open('C:\\Pictures\\csdn\\1.png'.decode('utf8').encode('gbk')) #如果是中⽂路径image1 =Image.open('C:\\Pictures\\csdn\\2.png'.decode('utf8').encode('gbk'))w1,h1 =image1.sizew2,h2 =image2.sizenewIm=Image.new('RGB', (max(w1,w2), h1+h2+1), 'white')newIm.paste(image1,(0,0))8 9newIm.paste(image2,(0,h1))newIm.save('C:\\Pictures\\csdn\\Image.png','jpeg')还是挺简单的。
国家二级VB机试键盘与鼠标事件过程模拟试卷5_真题-无答案
![国家二级VB机试键盘与鼠标事件过程模拟试卷5_真题-无答案](https://img.taocdn.com/s3/m/9781bbe8a300a6c30d229fdb.png)
国家二级VB机试(键盘与鼠标事件过程)模拟试卷5(总分52,考试时间90分钟)1. 选择题1. 以下关于键盘事件的叙述中,错误的是A. 按下键盘按键既能触发KeyPress事件,也能触发KeyDown事件B. KeyDown、KeyUp事件过程中,大、小写字母被视作相同的字符C. KeyDown、KeyUp事件能够识别Shift、Alt、Ctrl等键D. KeyCode是KevPress事件的参数2. 以下可以判断是否在文本框(名称为Text1)内按下了回车键的事件过程是A. Text1_ChangeB. Text1_ClickC. Text1_KeyPressD. Text1_GotFocus3. 以下说法中正确的是A. 当焦点在某个控件上时,按下一个字母键,就会执行该控件的KeyPress事件过程B. 因为窗体不接受焦点,所以窗体不存在自己的KeyPress事件过程C. 若按下的键相同,KeyPress事件过程中的KeyAscii参数与KeyDown事件过程中的KeyCode参数的值也相同D. 在KeyPress事件过程中,KeyAscii参数可以省略4. 向文本框中输入字符时,下面能够被触发的事件是A. GotFocusB. KeyPressC. ClickD. MouseDown5. 关于KeyPress事件,以下叙述中正确的是A. 在控件数组的控件上按键盘键,不能触发KeyPress事件B. 按下键盘上任一个键时,都能触发KeyPress事件C. 按字母键时,拥有焦点的控件的KeyPress事件会被触发D. 窗体没有KeyPress事件6. 下列事件的事件过程中,参数是输入字符ASCII码的是A. KeyDown事件B. KeyUp事件C. KeyPress事件D. Change事件7. 文本框Text1的KeyDown事件过程如下:Private Sub Text1_KeyDown(KeyCode As Integer,Shift As Integer)…End Sub其中参数KeyCode的值表示的是发生此事件时A. 是否按下了Alt键或Ctrl键B. 按下的是哪个数字键C. 所按的键盘键的键码D. 按下的是哪个鼠标键8. VB中有3个键盘事件:KeyPress、KeyDown、KeyUp,若光标在Text1文本框中,则每输入一个字母A. 这3个事件都会触发B. 只触发KeyPress事件C. 只触发KeyPress、KeyUp事件D. 不触发其中任何一个事件9. 在窗体上画一个命令按钮和一个文本框(名称分别为Command1和Text),并把窗体的KevPreview属性设置为True,然后编写如下代码:Dim SaveAll As String Private Sub Form_KeyPress(KeyAscii_Private SUb Form_Load() As Integer)Text1.Text="":Text1.SetFocus SaveAll=SaveAll+Chr(KeyAscii)End SUb End SubPrivate Sub Commandl_Click() Text1.Text=LCase(SaveAll)+SavAllEnd Sub程序运行后,直接用键盘输入:VB,再单击命令按钮,则文本框中显示的内容为A. vbVBB. 不显示任何信息C. VBD. 出错10. 窗体上有一个Text1文本框,并编写了下面事件过程:Private SUb Text1_KeyPress(KeyAscii As Integer) KeyAscii=KeyAscii+3End SUb程序运行时,在文本框中输入字符“A”,则在文本框中实际显示的是A. AB. BC. CD. D11. 对于文本框Text1,能够获得按键的ASCII码值的事件过程是A. Text1 KeyUpB. Text1 KeyPressC. Text1 ClickD. Text1 Change12. 将窗体的KeyPreview属性设为True,然后编写如下程序:Private SUb Form_KeyDown(KeyCode_ Private SUb Form_KeyPress(KeyAscii As Integer,Shift As Integer) As Integer) Print Chr(KeyCode) Print Chr(KeyAscii)End Sub End Sub运行程序时,按下字母键a,则窗体上显示的是A. A AB. A aC. a AD. a a13. 在窗体上画1名为Command1的命令按钮和1名Text1的文本框,再编写如下程序:Dim ss As String Private Sub Commandl_Click()Private Sub Text1_KeyPress(KeyAscii_ Dim m As String,i As Integer As Integer) For i=Len(ss)To 1 Step-1 If Chr(KeyAscii)<>""Then m=m+Mid(ss,i,1) ss=ss+Chr(KeyAscii) NextEnd Sub Text 1.Text=UCase(m) End Sub程序运行后,在文本框中输入“Number 100”,并单击命令按钮,则文本框中显示的是A. NUMBER 100B. REBMUNC. REBMUN 100D. 001 REBMUN14. 窗体上有1个名称为Text1、内容为空的文本框。
xtestfakemotionevent 用法
![xtestfakemotionevent 用法](https://img.taocdn.com/s3/m/4805f20b66ec102de2bd960590c69ec3d5bbdbc9.png)
XTestFakeMotionEvent和XTestFakeButtonEvent是用于在X11窗口系统中模拟鼠标和键盘事件的函数。
XTestFakeMotionEvent函数用于模拟鼠标移动事件,它有五个参数:
* 第一个参数是Display指针,它指向X11显示设备。
* 第二个参数是屏幕号,写-1就是默认屏幕。
* 第三个参数是坐标,指定鼠标移动到的位置。
* 第四个参数和第五个参数都是延时,分别表示鼠标移动到指定位置之前的延时和之后的延时,单位是毫秒。
例如,要模拟鼠标在当前屏幕的(100, 100)位置移动,可以这样写:
```C
XTestFakeMotionEvent(display, DefaultScreen(display), 100, 100, 0, 0);
```
XTestFakeButtonEvent函数用于模拟鼠标按键事件,它有四个参数:
* 第一个参数是Display指针,它指向X11显示设备。
* 第二个参数是按键号,左键是1,中键是2,右键是3,其它依次递加。
* 第三个参数表示是否按下按键,如果写True就表示按下按键,写False就表示放开按键。
* 第四个参数是延时,单位是毫秒。
例如,要模拟鼠标左键按下事件,可以这样写:
```C
XTestFakeButtonEvent(display, Button1, True, 0);
```
以上是Xtestfakemotionevent的基本使用方法,可以查阅其manpage以获得更多关于如何使用的信息。
远程控制之鼠标、按键模拟
![远程控制之鼠标、按键模拟](https://img.taocdn.com/s3/m/042d3336a4e9856a561252d380eb6294dd882272.png)
远程控制之⿏标、按键模拟做远程控制相关软件(远程办公、远程教育、远程协助等)时,⿏标、按键模拟必不可少。
在windows环境下,windows API提供的两个⽅法可以很⽅便的完成⿏标、按键的模拟:mouse_event、keybd_event。
模拟⿏标按键单击时,⾸先要计算⿏标位置X、Y(使⽤ClientToScreen),并把被控端⿏标位置移到X、Y位置,即⿏标Move事件(SetCursorPos),之后使⽤mouse_event来模拟需要执⾏的⿏标⾏为,主要为按下、弹起。
按键的模拟主要是键的按下与弹起。
⿏标模拟:1// MOUSEEVENTF_LEFTDOWN = $0002; //左键按下2// MOUSEEVENTF_LEFTUP = $0004; //左键弹起3// MOUSEEVENTF_RIGHTDOWN = $0008; //右键按下4// MOUSEEVENTF_RIGHTUP = $0010; //右键弹起5// MOUSEEVENTF_MIDDLEDOWN = $0020; //中键按下6// MOUSEEVENTF_MIDDLEUP = $0040; //中键弹起78//设置⿏标位置(模拟⿏标必须先设置正确位置)9 SetCursorPos(X, Y)1011//左键单击(右键、中键与此类似)12 mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)13 mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0)14//左键单击组合写法15 mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, x, y, 0, 0)1617//左键双击(右键、中键与此类似)18 mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)19 mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0)20 mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)21 mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0)22//左键双击组合写法23 mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, x, y, 0, 0)24 mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, x, y, 0, 0)MouseEvent键盘模拟:1//按下A键Ord('A')为取按键的ASCII值2 keybd_event(Ord('A'), 0, 0, 0);3//放开A键(键盘的⼀次敲击就执⾏了相应键的⼀次按下与放开)4 keybd_event(Ord('A'), 0, KEYEVENTF_KEYUP, 0);56//组合键:Ctrl + A7 keybd_event(VK_CONTROL, 0, 0, 0);8 keybd_event(Ord('A'), 0, 0, 0);9 keybd_event(Ord('A'), 0, KEYEVENTF_KEYUP, 0);10 keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);。
Windows下C++模拟键盘输入,鼠标点击,鼠标移动,获取句柄
![Windows下C++模拟键盘输入,鼠标点击,鼠标移动,获取句柄](https://img.taocdn.com/s3/m/66cf9433b5daa58da0116c175f0e7cd185251858.png)
Windows下C++模拟键盘输入,鼠标点击,鼠标移动,获取
句柄
展开全文
在Windows下完成这些功能需要用到VC
模拟键盘输入:
VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo); //包含windows.h
鼠标按键事件:
备注:模拟鼠标单击
mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_L EFTUP,0,0,0,0);
鼠标移动事件:
获取其它程序句柄:
备注:
HWND id=FindWindow(NULL,"微信");//类名(第一个参数)可以为空,第二个参数为需要获取那个程序的句柄的程序名,打开任务管理器可以看到。
获取微信的句柄
QT中在FindWindow中直接填入程序名字符串(第二个参数),可能会报错或者无法正确获取程序句柄;
解决方案:需要将程序名字符串转为 LPCWSTR 再填入
如:
QString appNameStr("微信");
QString classNameStr("WeChatMainWndForPC");
LPCWSTR appName = reinterpret_cast<LPCWSTR>(appNameStr.data());
LPCWSTR className= reinterpret_cast<LPCWSTR>(classNameStr.data());。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android中的MotionEvent 及其它事件处理2014-09-18 08:47 7386人阅读评论(0) 收藏举报MotionEvent对象当用户触摸屏幕时将创建一个MotionEvent对象。
MotionEvent包含关于发生触摸的位置和时间等细节信息。
MotionEvent对象被传递到程序中合适的方法比如View对象的onTouchEvent()方法中。
在这些方法中我们可以分析MotionEvent对象那个,以决定要执行的操作。
MotionEvent对象是与用户触摸相关的时间序列,该序列从用户首次触摸屏幕开始,经历手指在屏幕表面的任何移动,直到手指离开屏幕时结束。
手指的初次触摸(ACTION_DOWN 操作),滑动(ACTION_MOVE操作)和抬起(ACTION_UP)都会创建MotionEvent对象。
所以每次触摸时候这三个操作是肯定发生的,而在移动过程中会产生大量事件,每个事件都会产生对应的MotionEvent对象记录发生的操作,触摸的位置,使用的多大压力,触摸的面积,合适发生,以及最初的ACTION_DOWN和时发生等相关的信息。
在设置事件时我们有2种设置的方式,一种是委托式一种是回调式。
第一种就是将事件的处理委托给监听器处理,你可以定义一个View.OnTouchListener接口的子类作为监听器,其中有onTouch()方法。
而第二种是重写View类自己本身的onTouchEvent方法,也就是控件自己处理事件。
onTouch方法接收一个MotionEvent参数和一个View参数,而onTouchEvent方法仅接收MotionEvent参数。
这是因为监听器可以监听多个View 控件的事件。
通过MotionEvent方法getation可以得到该Motionevent具体是哪个操作如ACTION_DOWN。
1、MotionEvent中getAction()与getActionMasked()的区别如果我们在监听Ontouch()里面测试的时候会发现,这两个返回值竟然是一样的。
查询API 我们发现ACTION_MASK说明是:Constant Value: 255 (0x000000ff)。
也就是哦0Xff.public final intgetAction ()Return the kind of action being performed. Consider using getActionMasked() and getActionIndex() to retrieve the separate masked action and pointer index.翻译意思大概是返回action的类型,考虑使用getActionMasked()和getActionIndex()来获得单独的经过掩码的action和触控点的索引.public final intgetActionMasked ()Return the masked action being performed, without pointer index information. Use getActionIndex() to return the index associated with pointer actions.翻译意思大概:返回经过掩码的action,没有触控点索引信息. 通过getActionIndex()来得到触控操作点的索引.所以两个返回值差别就是一个类似IP中掩码问题。
一个MotionEvent中的action代码,前8位是实实在在包含表示哪一个动作常量.后八位呢就是包含了触控点的索引信息.动作常量就是指代什么类型操作,由于触摸操作可能是多点的,所以索引信息就是用来作为多点的标识,比如单点的话索引值是为0的。
因为ACTION_MASK = 0x00ff所以ACTION_MASK掩码过后的action码就没有索引信息了.也就是说getActionMasked()得到的值是经过掩码处理过的action码,里面信息只有动作常量如何获得索引值呢?先将action跟0xff00相与清除前8位用于存储动作常量的信息,然后将action右移8位就可以得到索引值了.我们就可以自己想办法得到索引信息了.我们知道ACTION_POINTER_INDEX_MASK=0xff00。
即先对action用ACTION_POINTER_INDEX_MASK进行掩码处理,即maskedIndex = action&ACTION_POINTER_INDEX_MASK = action&0xff00这各掩码也就是将action这个数的前8位清零.然后再将maskedIndex向右移8位就能够得到索引值了.通过调用getActionIndex()函数即可得到该该操作的索引值了。
为什么要有索引信息?因为,这样说吧,Android中,当有触摸事件发生时(假设已经注册了事件监听器),调用你注册监听器中的方法onTouch(,MotionEventev);传递了一个MotionEvent的对象过来.但是,想想,上面只传递进来一个MotionEvent过来,如果只是单点触控那是没有问题.问题就是当你多个手指触控的时候也是只传递这一个MotionEvent进来,这个时候,你当然想知道每个手指的所对应的触控点数据信息啦.所以MotionEvent中有就要索引信息了.事件是你可以很容易通过API看到,MotionEvent还包含了移动操作中其它历史移动数据.方便处理触控的移动操作.android sdk对于这个类的描述中就有这么一句:For efficiency, motion events with ACTION_MOVE may batch together multiple movement samples within a single object.出于效率的考虑,事件代码为ACTION_MOVE的Motion,会在一个MotionEvent对象中包含多个移动数据采样Android事件处理转自:/kf/201109/102655.html目的:通过全面的分析Android的鼠标和键盘事件。
了解Android中如何接收和处理键盘和鼠标事件,以及如何用代码来产生事件。
主要学习内容:1. 接收并处理鼠标事件:按下、弹起、移动、双击、长按、滑动、滚动2. 接收并处理按键事件:按下、弹起3. 模拟鼠标/按键事件1. Android事件现代的用户界面,都是以事件来驱动的来实现人机交换的,而Android上的一套UI控件,无非就是派发鼠标和键盘事件,然后每个控件收到相应的事件之后,做相应的处理。
如Button 控件,就只需要处理Down、move、up这几个事件,Down的时候重绘控件,move的时候一般也需要重绘控件,当up的时候,重绘控件,然后产生onClick事件。
在Android中通过实现OnClickListener接口的onClick方法来实现对Button控件的处理。
对于触摸屏事件(鼠标事件)有按下有:按下、弹起、移动、双击、长按、滑动、滚动。
按下、弹起、移动(down、move、up)是简单的触摸屏事件,而双击、长按、滑动、滚动需要根据运动的轨迹来做识别的。
在Android中有专门的类去识别,android.view.GestureDetector。
对于按键(keyevent),无非就是按下、弹起、长按等。
2. Android事件处理Android手机的坐标系是以左上定点为原点坐标(0,0), 向右为X抽正方形,向下为Y抽正方向。
2.1 简单触摸屏事件在Android中任何一个控件和Activity都是间接或者直接继承于android.view.View。
一个View对象可以处理测距、布局、绘制、焦点变换、滚动条,以及触屏区域自己表现的按键和手势。
当我们重写View中的onTouchEvent(MotionEvent)方法后,就可以处理简单的触摸屏事件。
代码如下:1 view plaincopy to clipboardprint?2public booleanonTouchEvent(MotionEvent event)3 {4int events[] = {MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE,5MotionEvent.ACTION_UP, MotionEvent.ACTION_MOVE,MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE,6MotionEvent.ACTION_POINTER_DOWN,MotionEvent.ACTION_POINTER_UP, 7MotionEvent.EDGE_TOP,MotionEvent.EDGE_BOTTOM,MotionEvent.EDGE_LEFT,Mo tionEvent.EDGE_RIGHT};89 String szEvents[]={"ACTION_DOWN", "ACTION_MOVE", 10"ACTION_UP", "ACTION_MOVE", "ACTION_CANCEL", "ACTION_OUTSIDE", 11"ACTION_POINTER_DOWN","ACTION_POINTER_UP",12"EDGE_TOP","EDGE_BOTTOM","EDGE_LEFT","EDGE_RIGHT"};13for(int i=0; i <events.length; i++)14 {15if(events[i] == event.getAction())16 {17if(oldevent != event.getAction())18 {19DisplayEventType(szEvents[i]);20oldevent = event.getAction();21 }22break;23 }24 }25return super.onTouchEvent(event);26 }27public booleanonTouchEvent(MotionEvent event)28 {29int events[] = {MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, 30MotionEvent.ACTION_UP, MotionEvent.ACTION_MOVE,MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE,31MotionEvent.ACTION_POINTER_DOWN,MotionEvent.ACTION_POINTER_UP,32MotionEvent.EDGE_TOP,MotionEvent.EDGE_BOTTOM,MotionEvent.EDGE_LEFT,Mo tionEvent.EDGE_RIGHT};3334 String szEvents[]={"ACTION_DOWN", "ACTION_MOVE",35"ACTION_UP", "ACTION_MOVE", "ACTION_CANCEL", "ACTION_OUTSIDE", 36"ACTION_POINTER_DOWN","ACTION_POINTER_UP",37"EDGE_TOP","EDGE_BOTTOM","EDGE_LEFT","EDGE_RIGHT"};38for(int i=0; i <events.length; i++)39 {40if(events[i] == event.getAction())41 {42if(oldevent != event.getAction())43 {44DisplayEventType(szEvents[i]);45oldevent = event.getAction();46 }47break;48 }49 }50return super.onTouchEvent(event);51 }2.2手势识别很多时候,一个好的用户界面能够吸引用户的眼球。