当前位置:文档之家› JAVA模拟键盘鼠标操作

JAVA模拟键盘鼠标操作

JAVA模拟键盘鼠标操作
JAVA模拟键盘鼠标操作

//可以在eclipse下直接运行的示例程序:

package key_robot;

import java.awt.*;

import java.awt.event.*;

import javax.swing.JOptionPane;

public class key_robot {

public key_robot() {

}

// 鼠标单击,要双击就连续调用

private static void pressMouse(Robot r, int m, int delay) { r.mousePress(m);

r.delay(10);

r.mouseRelease(m);

r.delay(delay);

}

// 键盘输入方法

private static void pressKeys(Robot r, int[] ks, int delay) { for (int i = 0; i < ks.length; i++) {

r.keyPress(ks[i]);

r.delay(10);

r.keyRelease(ks[i]);

r.delay(delay);

}

}

public static void main(String[] args) throws Exception { final Robot rb = new Robot();

new Thread() {

public void run() {

rb.delay(2000); // 模拟回车

rb.keyPress(KeyEvent.VK_ENTER);

rb.keyRelease(KeyEvent.VK_ENTER);

}

}.start();

JOptionPane.showMessageDialog(null,

"以下程序自动执行,包括本对话框,点击运行后请不要移动鼠标和键盘.\n

如果不能正常执行程序,请先关闭输入法");

rb.delay(1500);

// 设置开始菜单的大概位置

int x = 40;

int y = Toolkit.getDefaultToolkit().getScreenSize().height- 10; // 鼠标移动到开始菜单,

rb.mouseMove(x, y);

rb.delay(500);

// 单击三次开始菜单

for (int i = 0; i < 3; i++)

pressMouse(rb, InputEvent.BUTTON1_MASK, 500);

rb.delay(1000);

// 运行CMD命令r cmd enter

int[] ks = { KeyEvent.VK_R, KeyEvent.VK_C, KeyEvent.VK_M,

KeyEvent.VK_D, KeyEvent.VK_ENTER, };

pressKeys(rb, ks, 500);

rb.mouseMove(400, 400);

rb.delay(500);

// 运行DIR命令dir enter

ks = new int[] { KeyEvent.VK_D, KeyEvent.VK_I, KeyEvent.VK_R, KeyEvent.VK_ENTER };

pressKeys(rb, ks, 500);

rb.delay(1000);

// 运行CLS命令cls enter

ks = new int[] { KeyEvent.VK_C, KeyEvent.VK_L, KeyEvent.VK_S, KeyEvent.VK_ENTER };

pressKeys(rb, ks, 500);

rb.delay(1000);

// 运行EXIT命令exit enter

ks = new int[] { KeyEvent.VK_E, KeyEvent.VK_X, KeyEvent.VK_I, KeyEvent.VK_T, KeyEvent.VK_ENTER };

pressKeys(rb, ks, 500);

rb.delay(1000);

// 右键测试

x = Toolkit.getDefaultToolkit().getScreenSize().width - 10;

rb.mouseMove(x, y);

// 如果是双键鼠标,请改用InputEvent.BUTTON2_MASK标

pressMouse(rb, InputEvent.BUTTON3_MASK, 500);

// 显示日期调整对话框a

pressKeys(rb, new int[] { KeyEvent.VK_A }, 1000);

rb.delay(2000);

pressKeys(rb, new int[] { KeyEvent.VK_ESCAPE }, 0);

rb.delay(1000);

new Thread() {

public void run() {

rb.delay(1000); // 回车

rb.keyPress(KeyEvent.VK_ENTER);

rb.keyRelease(KeyEvent.VK_ENTER);

}

}.start();

JOptionPane.showMessageDialog(null, "演示完毕!");

}

}

VB编程的键盘控制

V B编程的键盘控制Prepared on 21 November 2021

VB编程的键盘控制 我们利用VisualBASIC编写程序,多数情况只涉及到鼠标操作(如单击、双击、拖动等),但如果程序中需要实现文本编辑、热键激活或利用键盘进行游戏控制等功能时,将不可避免地碰到键盘捕获及处理的问题。下面,我们就来看一看VB编程中如何进行键盘控制。 一、概述 在VB中,很多控件都提供了键盘输入功能(如文本框、组合框等),但它们对键盘的处理较简单,遇到复杂一点的要求即无能为力。因而VB提供了KeyPress、KeyUp、KeyDown三种键盘事件,当用户按键时,会触发这三种事件,而且窗体和接受键盘输入的控件都识别这三种事件。下表对这些事件作了描述。 键盘事件触发原因 KeyPress按下某ASCII字符键 KeyDown按下键盘的任意键 KeyUp释放键盘的任意键 KeyPress事件无法检测到的情况: SHIFT、CTRL和ALT键的特殊组合。 光标控制键。 HOME、END、PAGEUP、PAGEDOWN等。 数字小键盘的数字键与打字键盘数字键的区别。 不仅响应按键操作而且响应释放键操作(KeyPress只响应按键操作)。 键盘事件彼此不相互排斥。按下某键时将生成KeyDown和KeyPress事件,而松开此键时生成KeyUp事件。当用户按下一个KeyPress不能检测的键时将触发KeyDown事件,松开此键时生成KeyUp事件。若使用KeyUp和KeyDown事件应确保KeyPress事件的功能不够用,通常编写KeyPress事件的代码比较容易。 二、KeyPress事件 在按下与ASCII字符对应的键时将触发KeyPress事件。ASCII字符集代表标准键盘的字母、数字和标点符号以及部分控制键(ENTER、TAB、BACKSPACE键等)。KeyDown和KeyUp事件能够检测其它功能键、编辑键和光标定位键。当处理标准ASCII字符时应使用KeyPress事件。例如,如果希望将输入到文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写:PrivateSubText1_KeyPress(KeyAsciiAsInteger) KeyAscii=Asc(Ucase(Chr(KeyAscii))) EndSub KeyAscii参数返回对应所按键的ASCII代码。 也可通过KeyPress事件识别部分控制键。例如,下述事件过程使用KeyPress检测用户是否正在按BACKSPACE键: PrivateSubText1_KeyPress(KeyAsciiAsInteger) IfKeyAscii=8ThenMsgBox"YouPressedtheBACKSPACEkey." EndSub 注:BACKSPACE键的ASCII值为8。 还可用KeyPress事件改变某些键的缺省行为。例如,当在文本框内按ENTER键就会结束当前行输入并将光标转到下一行(Multiline属性设为True)。在KeyPress事件中截断ENTER键(ASCII 值为13)就可避免这种情况:

利用VB建立鼠标键盘操作回放

利用VB建立鼠标键盘操作回放 很多的教学软件或系统监视软件可以自动记录回放用户的输入文字或点击按钮等操作操作,这个功能的实现是使用了Windows的Hook函数。本文介绍如何通过使用VB来实现鼠标键盘操作的纪录和回放。Windows提供API函数SetwindowsHookEx来建立一个Hook,通过这个函数可以将一个程序添加到Hook链中监视Windows消息,函数语法为: Public Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long 其中参数idHook指定建立的监视函数类型。通过Windows MSDN帮助可以看到,SetwindowsHookEx函数提供15种不同的消息监视类型,在这里我们将使用WH_JOURNALRECORD和WH_JOURNALPLAYBACK来监视键盘和鼠标操作。参数lpfn 指定消 息函数,在相应的消息产生后,系统会调用该函数并将消息值传递给该函数供处理。函数的一般形式为: Hookproc (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall; 其中code为系统指示标记,wParam和lParam为附加参数,根据不同的消息监视类型而不同。只要在程序中建立这样 一个函数再通过SetwindowsHookEx函数将它加入到消息监视链中就可以处理消息了。 在不需要监视系统消息时需要调用提供UnHookWindowsHookEx来解除对消息的监视。WH_JOURNALRECORD和WH_JOURNALPLAYBACK类型是两种相反的Hook类型,前者获得鼠标、键盘动作消息,后者回放鼠 标键盘消息。所以在程序中我们需要建立两个消息函数,一个用于纪录鼠标键盘操作并保存到一个数组中,另一个用于 将保存的操作返给系统回放。 下面是具体的程序实现:首先建立一个新工程,在Form1中加入三个CommandButton控件用于控制消息钩子,另外还 可以增加若干Command或者TextBox控件用于检验操作回放的效果。然后在工程中增加一个模块文件,在模块中加入以下 定义和代码: Option Explicit Public Type EVENTMSG message As Long paramL As Long paramH As Long time As Long hwnd As Long End Type Public Declare Function CallNextHookEx Lib "user32" _ (ByVal hHook As Long, _

adb shell中模拟键盘鼠标事件

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 Value KEYCODE Comment KEYCODE_UNKNOWN 1 KEYCODE_MENU 在SDK2.1的模拟器中命令失效,sendevent命令可行 2 KEYCODE_SOFT_RIGHT 3 KEYCODE_HOME 4 KEYCODE_BACK 5 KEYCODE_CALL 6 KEYCODE_ENDCALL

KEYCODE_0 8 KEYCODE_1 9 KEYCODE_2 10 KEYCODE_3 11 KEYCODE_4 12 KEYCODE_5 13 KEYCODE_6 14 KEYCODE_7 15 KEYCODE_8 16 KEYCODE_9 17 KEYCODE_STAR

KEYCODE_POUND 19 KEYCODE_DPAD_UP 20 KEYCODE_DPAD_DOWN 21 KEYCODE_DPAD_LEFT 22 KEYCODE_DPAD_RIGHT 23 KEYCODE_DPAD_CENTER 24 KEYCODE_VOLUME_UP 25 KEYCODE_VOLUME_DOWN 26 KEYCODE_POWER 27 KEYCODE_CAMERA 28 KEYCODE_CLEAR

VB编程的键盘控制

VB编程的键盘控制 我们利用Visual BASIC编写程序,多数情况只涉及到鼠标操作(如单击、双击、拖动等),但如果程序中需要实现文本编辑、热键激活或利用键盘进行游戏控制等功能时,将不可避免地碰到键盘捕获及处理的问题。下面,我们就来看一看VB编程中如何进行键盘控制。 一、概述 在VB中,很多控件都提供了键盘输入功能(如文本框、组合框等),但它们对键盘的处理较简单,遇到复杂一点的要求即无能为力。因而VB提供了KeyPress、KeyUp、KeyDown 三种键盘事件,当用户按键时,会触发这三种事件,而且窗体和接受键盘输入的控件都识别这三种事件。下表对这些事件作了描述。 KeyDown和KeyUp事件提供了最低级的键盘响应,可用这些事件检测KeyPress事件无法检测到的情况: ◆SHIFT、CTRL和ALT键的特殊组合。 ◆光标控制键。 ◆HOME、END、PAGEUP、PAGEDOWN等。 ◆数字小键盘的数字键与打字键盘数字键的区别。 ◆不仅响应按键操作而且响应释放键操作(KeyPress只响应按键操作)。 键盘事件彼此不相互排斥。按下某键时将生成KeyDown和KeyPress事件,而松开此键时生成KeyUp事件。当用户按下一个KeyPress不能检测的键时将触发KeyDown事件,松开此键时生成KeyUp事件。若使用KeyUp和KeyDown事件应确保KeyPress事件的功能不够用,通常编写KeyPress事件的代码比较容易。 二、KeyPress事件 在按下与ASCII字符对应的键时将触发KeyPress事件。ASCII字符集代表标准键盘的字母、数字和标点符号以及部分控制键(ENTER、TAB、BACKSPACE键等)。KeyDown 和KeyUp事件能够检测其它功能键、编辑键和光标定位键。当处理标准ASCII字符时应使用KeyPress事件。例如,如果希望将输入到文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写: Private Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = Asc(Ucase(Chr(KeyAscii))) End Sub KeyAscii参数返回对应所按键的ASCII代码。 也可通过KeyPress事件识别部分控制键。例如,下述事件过程使用KeyPress检测用户是否正在按BACKSPACE键:

VC 模拟鼠标和键盘输入

VC 模拟鼠标和键盘输入 - 天下 - 博客频道 - https://www.doczj.com/doc/128621921.html, 模拟鼠标点击: 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;

JAVA模拟键盘鼠标操作

//可以在eclipse下直接运行的示例程序: package key_robot; import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; public class key_robot { public key_robot() { } // 鼠标单击,要双击就连续调用 private static void pressMouse(Robot r, int m, int delay) { r.mousePress(m); r.delay(10); r.mouseRelease(m); r.delay(delay); } // 键盘输入方法 private static void pressKeys(Robot r, int[] ks, int delay) { for (int i = 0; i < ks.length; i++) { r.keyPress(ks[i]); r.delay(10); r.keyRelease(ks[i]); r.delay(delay); } } public static void main(String[] args) throws Exception { final Robot rb = new Robot(); new Thread() { public void run() { rb.delay(2000); // 模拟回车 rb.keyPress(KeyEvent.VK_ENTER); rb.keyRelease(KeyEvent.VK_ENTER); } }.start();

VB常用快捷键

VB常用快捷键 窗体设置,控件布局时用: alt+v+x可以快速显示出工具框 Alt+P+N 引用 ctrl+左右键头可以移动控件 shift+左右键头调整控件大小 F7 切换到编辑窗口 Shift+f7 切换代码窗口 开发代码,调试代码都能用的: Ctrl+C复制 Ctrl+V粘贴 Ctrl+X剪贴 Ctrl+F查找 开发代码时用的: Tab 向右推 Shift+Tab 向左推 Ctrl+H 替换 Ctrl+J 呵呵,有点显丑。有几个函数。老要看总是记不住,呵呵(Alt+→)ctrl+home jump to 首行 ctrl+end jump to 末尾 调试时使用的: F5 运行 F8 断点运行 F9 设置/清除断点 Ctrl+G 立即窗口 Shift+F2 到定义处 Ctrl+Shift+F9 清除所有断点 Ctrl+shift+F2 到上次编辑处 Ctrl+PauseBreak 强行暂停程序(专门对付死循环之类的) shift+F9 可以监视表达式 Ctrl+W 编辑监视窗口 Ctrl+n n Enter 偶经常要另开一个程序先做试验,你们可能很少用吧?呵呵以上几个,是我使用中最多的。当然。其它的我也有使用。如:Ctrl+J(所选控件置前),Ctrl+J(所选控件置底),F7,Shift+F4还有那些Windows通用的那些快捷

键:Ctrl+C,Ctrl+V ,哈哈,这二个快捷键,偶好像使用次数。也可以在所有使用快捷中前几名呢!哈哈! 1、F1:显示MSDN帮助。当然你要安装MSDN,否则得不到真正的帮助了 2、F2:显示对象浏览器。这里你可以看到对象的各种属性、方法与事件 3、F3:查找一下个满足条件的内容 4、F4:显示当前选中控件的属性窗体 5、F5:运行程序(https://www.doczj.com/doc/128621921.html,则是F8了) 6、F7:由窗体设计切换到对应的代码窗体 7、F8:单步执行程序 8、F9:切换断点 9、Alt+A:打开外接程序菜单 10、Alt+D:打开调试菜单 11、Alt+E:打开编辑菜单 12、Alt+F:打开文件菜单 13、Alt+H:打开帮助菜单 14、Alt+I:打开图表菜单 15、Alt+O:打开格式菜单 16、Alt+T:打开工具菜单 17、Alt+P:打开工程菜单 18、Alt+R:打开运行菜单 19、Alt+U:打开查询菜单 20、Alt+Q:退出 21、Alt+V:打开视图菜单 22、Alt+W:打开窗口菜单 23、Alt+→:根据输入的字符检索出可以使用的关键字 24、Tab:让选中的代码,集休缩进 25、Shift+F2:查看当前光标所在的变量或函数、子过程的定义。这一快捷键很方便,比如程序中有一个 call PubFunction ,你只要将鼠标在PubFunction 任意一处点中,然后按Shift+F2就可以直接转到函数的声明处。 26、Shift+F4:打开属性页窗口,与F4不一样哦 27、Shift+F5:重新启动 28、Shift+F7:由代码窗体切换到对应的窗体设计界面 29、Shift+F8:逐过程单步执行。按过程进行调试 30、Shift+F9:快速监视 31、Shift+Tab:让选中的代码集体凸出

总结Selenium WebDriver中一些鼠标和键盘事件的使用

本文将总结Selenium WebDriver 中的一些鼠标和键盘事件的使用,以及组合键的使用,并且将介绍WebDriver 中没有实现的键盘事件(Keys 枚举中没有列举的按键)的扩展。举例说明扩展Alt+PrtSc 组合键来截取当前活动窗口并将剪切板图像保存到文件。 在使用Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作;或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是Actions 类,在使用该类的过程中会配合使用到Keys 枚举以及Mouse、Keyboard、CompositeAction 等类。 其次,在实际测试过程中,可能会遇到某些按键没办法使用Actions、Keys 等类来实现的情况。比如通过使用Alt+PrtSc 组合键来实现截取屏幕当前活动窗口的图像,在Keys 枚举中,因为没有枚举出PrtSc 键,所以没办法通过Action 的KeyDown(Keys) 来模拟按下这个动作。 再次是在自动化测试中,可能会遇到一些附件、文件上传的场景,或者是多文件上传,这些在Selenium2.0 之后,可以直接使用WebElement 类的sendKeys() 方法来实现。 下面就分别介绍这些情况的具体使用。 鼠标点击操作 鼠标点击事件有以下几种类型: 清单1. 鼠标左键点击 Actions action = new Actions(driver);action.click();// 鼠标左键在当前停留的位置做单击操作 action.click(driver.findElement(https://www.doczj.com/doc/128621921.html,(element)))// 鼠标左键点击指定的元素 清单2. 鼠标右键点击 Actions action = new Actions(driver); action.contextClick();// 鼠标右键在当前停留的位置做单击操作 action.contextClick(driver.findElement(https://www.doczj.com/doc/128621921.html,(element)))// 鼠标右键点击指定的元素 清单3. 鼠标双击操作 Actions action = new Actions(driver); action.doubleClick();// 鼠标在当前停留的位置做双击操作

模拟键盘鼠标事件

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.

VB 有关鼠标的操作

VB 有关鼠标的操作   假如没有鼠标,电脑的普及率绝对没有目前这么高。在windows下,鼠标的作用不亚于键盘。因此,在VB中设计基于windows下的应用程序,鼠标的操作和设计是非常重要的。 一、鼠标的移动、按键事件 要想在VB程序中自如应用鼠标,先要了解有关鼠标的事件,并学会如何编写这些事件过程。最常见的鼠标事件有: 当在某个对象上移动鼠标、按下鼠标按键、释放鼠标按键时均会触发鼠标事件,它们分别是:MouseMove、MouseDown、MouseUp。   这三个鼠标事件过程均会返回四个参数:Button As Integer, Shift As

具体解释如下: 1、 MouseDown事件 当单击鼠标上的任何一个按键之后,都会引起MouseDown事件。许多对象都有这个事件。如用鼠标在窗体上单击,可以引发这个事件,用鼠标单击“按钮”“标签”“文本框”等对象也可以引发这个事件。该事件还带回来不少参数,下面是鼠标单击窗体任何位置所引发的MouseDown事件,单击其它对象所带回的参数与此相同: Private Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Integer,Y As Integer)   End Sub 其中: (1)、Button参数 Button参数带回来的信息是用户按了鼠标上的哪能一个键,左键?右键?还是中间键? Button=1,说明用户按的是鼠标的左键; Button=2,说明用户按的是鼠标的右键; Button=4,说明用户按的是鼠标的中间键;   (2)、Shift参数 Shift参数带回来的是用户按鼠标按键时是否同时按下了键盘上的Shift、Ctrl、Alt键。 Shift=1,说明用户在按下鼠标按键的同时,还按下了键盘上的Shift键;Shift=2,说明用户在按下鼠标按键的同时,还按下了键盘上的Ctrl键;

USB模拟鼠标与键盘使用说明

第一章使用说明 1.1 功能简介 本例程是用实验板来模拟鼠标或键盘,即将相关程序下载到单片机,并将学习板与电脑通过U口连接后,本学习板可以当作U口的鼠标或者键盘来用。 其中能够模拟实现的鼠标功能为:鼠标左移、右移、上移、下移,鼠标左键按下和右键按下。 能够模拟实现的键盘功能为:数字1和2的键入、SHIFT和ALT功能键的键入、大小写切换和小键盘数字键功能的键入。 本例程共用到学习板上的六个按键,位于矩阵键盘左上角的S6、S7、S10、S11、S14和S15。 1.2鼠标的信息说明 将UsbMouse.hex文件下载到单片机中,且之后保证USB1口(位于学习板左上方)与电脑的U口处于连接状态(USB1口即为TX-1C开发板的U口)。 稍等片刻,便会先后在电脑屏幕的右下角出现下面两个提示(此提示只在第一次安装时出现): 图1.1 系统发现新硬件提示 图1.2安装成功提示 右键单击“我的电脑”,选中“管理”项,点击并进入,在其左侧的项目栏里点击“设备管理器”,便会发现其中多了如下一个设备,也就是我们的TX-1C开发板所模拟的鼠标,如图1.3所示。

图1.3 设备描述显示 双击“USB人体学输入设备”,会弹出如图1.4和图1.5的属性描述 图1.4 属性描述---常规选项卡

图1.5 属性描述---详细信息选项卡 1.3 鼠标的使用说明 在使用USB模拟鼠标与键盘功能之前,请确保将芯片PDIUSBD12左侧的两根插针用跳帽连接起来(这两根跳帽是用于芯片PDIUSBD12向单片机发出中断的连接线)!!! 总共使用到的矩阵键盘中的六个按键的功能分别如表1.1所示 据此, 面上实验一下,体会自制鼠标的乐趣。 1.4 键盘的相关说明 将文件夹“键盘实例”中的UsbKeyboard.hex文件下载到单片机中,并通过USB 线将TX-1C学习板与电脑U口连接后,同样会出现如图1.1.、图1.2类似的安装信息(也是在第一次安装时提示,以后都不再提示,除非更改程序中的相关设备描述信息,让电脑以为是一个以前从未连接过的设备连接了。)同样的打开设备管理器,也可以找到如图1.3、图1.4、图1.5类似的信息。在此就不再赘述了。下面列出相关按键的功能,如表1.2所示。

vb 属性、方法和事件概述

Visual Basic 属性、方法和事件 属性、方法和事件概述 Visual Basic 的窗体和控件是具有自己的属性、方法和事件的对象。可以把属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。日常生活中的对象,如小孩玩的气球同样具有属性、方法和事件。气球的属性包括可以看到的一些性质,如它的直径和颜色。其它一些属性描述气球的状态(充气的或未充气的)或不可见的性质,如它的寿命。通过定义,所有气球都具有这些属性;这些属性也会因气球的不同而不同。 气球还具有本身所固有的方法和动作。如:充气方法(用氦气充满气球的动作),放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。所有的气球都具备这些能力。 气球还有预定义的对某些外部事件的响应。例如,气球对刺破它的事件响应是放气,对放手事件的响应是升空。 如果能对气球编程的话,Visual Basic 代码将如下所示。其作用是设置气球的属性: Balloon.Color = Red Balloon.Diameter = 10 Balloon.Inflated = True 注意代码的语法,首先是对象(Balloon),接着是属性(Color),然后是赋值(Red)。重复这条语句,但是,换一个不同的值,就可以改变气球的颜色。属性也可以在程序设计阶段在“属性”窗口中设置。 调用气球的方法是这样的: Balloon.Inflate Balloon.Deflate Balloon.Rise 5 它的语法与属性的语法相似,对象(一个名词)后面紧跟着方法(一个动词)。在第三个例子中有一个附加项,称为一个参数,表示气球上升的高度。一些方法有一个或多个参数,它们对执行的动作做进一步的描述。 气球对一个事件的响应如下所示: Sub Balloon_Puncture() Balloon.Deflate Balloon.MakeNoise "Bang" Balloon.Inflated = False

VB模拟鼠标键盘动作

VB模拟鼠标键盘动作 有些时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows 中响应键盘事件的机制。 当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示: 用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口 明白了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。在VB中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。 1.局部级模拟 从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈,这实在是很简单,windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessage和PostMessage,它们的区别是PostMessage函数直接把消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用SendMessage是不正确的(因为模拟键盘消息是不需要返回值的,不然目标程序会没反应),切记切记!PostMessage函数的VB声明如下: Declare Function PostMessage Lib"user32"Alias"PostMessageA"(ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long 参数hwnd是你要发送消息的目标程序上某个控件的句柄,参数wMsg是消息的类型,表示你要发送什么样的消息,最后wParam和lParam这两个参数是随消

硬件模拟键盘鼠标,键鼠控制器KMC3

硬件模拟键盘鼠标(键鼠控制器KMC3) 1 概述 键鼠控制器KMC3,是一款通过RS232接口控制,输出标准键盘鼠标信号的设备,即可通过计算机的com口来控制它完成进行模拟硬件键盘鼠标的操作。主要应用场合为:彩票速打、游戏辅助、计算机自动控制、远程控制、多机同步操作等。 2 产品特点 速度快:键盘鼠标信号的模拟,每秒可达100个以上,只要串口能够将指令发送出来,它就能够将指令转换为键盘或者鼠标信号发送出去, 性能稳定:所有元器件均选用工业级器件,可保证长期稳定运行,决无误码与丢码现象。 兼容性好:输入端为标准RS232接口,可直接与计算机的com口连接;输出端为PS2接口,可直接连计算机的PS2键盘、鼠标接口,亦可通过转接线 转为usb接口。 控制简单:串口控制,指令协议简单,发送指令无需考虑时间间隔,连续发送即可;无需握手信号验证,只要串口能发送出去,就能保证转换成功。 与手工操作键盘鼠标完全相同:该设备完全模拟手工操作键盘鼠标的特点,通过com口控制指令转发出来的键盘鼠标信号与普通手工操作键盘鼠标没 有任何区别。 3 工作原理 键鼠控制器KMC3内嵌单片机,通过单片机完成RS232串口信号到键盘鼠标信号的转换过程;控制指令部分,键盘的指令根据手工操作特性,分为键盘的通码、断码两种,鼠标的指令部分根据手工操作鼠标的特点分为按键、移动等几个指令了;输出的键盘鼠标信号部分,是单片机软件模拟的符合PS2协议的信号,实际输出到计算机之后,其效果与硬件键盘、鼠标效果完全相同,同时该设备能够模拟键盘鼠标对计算机发出的各种控制指令进行响应;如果直接将设备连接到计算机的ps2接口,则计算机会默认该设备为普通的键盘鼠标设备,而无需

VB6全局键盘、鼠标钩子

VB: è????ü?ì?¢êó±ê13×ó '--------------------------------- 'Form '°2×°13×ó Private sub AddHook() '?ü?ì13×ó lHook(0) = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0) 'êó±ê13×ó lHook(1) = SetWindowsHookEx(WH_MOUSE_LL, AddressOf CallMouseHookProc, App.hInstance, 0) End Sub 'D?13×ó Private sub DelHook() UnhookWindowsHookEx lHook(0) UnhookWindowsHookEx lHook(1) End Sub '--------------------------------- '?£?é Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long) Public Type KEYMSGS vKey As Long 'Dé?a?? (and &HFF) sKey As Long 'é¨?è?? flag As Long '?ü°′??£o128 ì§?e£o0 time As Long 'Window??DDê±?? End Type Public Type MOUSEMSGS X As Long 'x×ù±ê Y As Long 'y×ù±ê a As Long b As Long time As Long 'Window??DDê±?? End Type Public Type POINTAPI

VC模拟鼠标键盘输入

vc模拟键盘输入 keybd_event(VK_LWIN, 0, 0 ,0); keybd_event('M', 0, 0 ,0); keybd_event('M', 0, KEYEVENTF_KEYUP ,0); keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0); 方法1: HWND hwnd=::FindWindow(0, "文档1"); //假设你要找的窗口标题为“文档1”CWnd::FromHandle(hwnd)->SetForegroundWindow(); ::PostMessage(hwnd, WM_KEYDOWN, VK_ESCAPE, 0L); //发送ESC按下的键盘消息 方法2:这里以向记事本程序发送Ctrl+s按键消息为例: CWnd *pWnd = FindWindow("Notepad", NULL); if (pWnd->GetSafeHwnd()) { pWnd->ShowWindow(SW_NORMAL); pWnd->SetForegroundWindow(); 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); } 对于其他程序,关键就是要找到就收消息的窗口句柄。 ::mouse_event(1) 模拟鼠标动作API函数mouse_event,它可以实现模拟鼠标按下和放开等动作。 VOID mouse_event( DWORD dwFlags, // 鼠标动作标识。 DWORD dx, // 鼠标水平方向位置。 DWORD dy, // 鼠标垂直方向位置。 DWORD dwData, // 鼠标轮子转动的数量。 DWORD dwExtraInfo // 一个关联鼠标动作辅加信息。 ); 其中,dwFlags表示了各种各样的鼠标动作和点击活动,它的常用取值如下:MOUSEEVENTF_MOVE 表示模拟鼠标移动事件; MOUSEEVENTF_LEFTDOWN 表示模拟按下鼠标左键; MOUSEEVENTF_LEFTUP 表示模拟放开鼠标左键; MOUSEEVENTF_RIGHTDOWN 表示模拟按下鼠标右键; MOUSEEVENTF_RIGHTUP 表示模拟放开鼠标右键; MOUSEEVENTF_MIDDLEDOWN 表示模拟按下鼠标中键;

第三章常见的鼠标键盘交互方法

TrackBall模式 Trackball模式是跟踪球模式,具体来说,就是物体的中心位置不变,而改变视点的位置,从而使模型随着鼠标的移动绕着中心位置旋转。 对于鼠标移动需要计算相应的视点(照相机)的运动情况,在osg中,通过TrackballManipulator::calcMovement()来实现,并且对于不同的鼠标事件,分别进行如下的操作: 1.按下鼠标的左键,则旋转照相机。 2.按下鼠标中间键或者同时按下鼠标的左键和与右键,则改变物体的中心位置,也即对物体进行平移操作。 3.按下鼠标的右键,则对模型进行缩放。 在按下鼠标的左键从而旋转照相机时,这里主要模拟了一个跟踪球技术,球的半径理想情况下应该基于旋转中心到鼠标所指的物体上某点的距离,但是为了简化处理,一般情况下,球的半径TRACKBALLSIZE可以预先给定,也能达到比较好的模拟效果。具体实现过程如下:首先分别记录两次鼠标事件的坐标的(x1,y1)和(x2,y2),根据x坐标的最小值X min和最大值X max,以及y坐标的最小值Y min和最大值Y max,对(x1,y1)和(x2,y2)坐标进行规范化,转化到(-1,1)之间,不妨假设新的坐标点为p1和p2,然后通过将p1和p2投影到跟踪球上,从而获取相应的z 坐标。这样,以球的中心为起始点,计算出的球上的两个点为终点,可以确定两个向量,不妨记作P1和P2,那么旋转轴axis = P2^ P1,旋转的弧度为:t = ||(P2- P1)|| / (2.0*TRACKBALLSIZE),为了避免产生某些不可操纵的结果,必须先将t规范到(-1,1)之间,再将其转化为角度angles,然后将照相机绕着axis旋转angles的角度,从而实现了对照相机的旋转操作。 在osg的实现中,该跟踪球并不是一个正规的球体,而是进行了一定的变形,在中心附近是一个半径为TRACKBALLSIZE的球体,而在离中心达到一定距离时(小于球的半径TRACKBALLSIZE),该球体被扭曲成了四个双曲面。 在Trackball模式的具体实现时,有许多细节问题,如 1.首先需要将世界坐标系转化到视点坐标系,这可以通过先将中心平移到视点后根据照相机的up、物体的中心以及视点重新确立坐标系。在osg中,由void TrackballManipulator::computePosition(const osg::Vec3& eye,const osg::Vec3& center,const osg::Vec3& up)实现。 2.模型的旋转通过鼠标控制,因此需要判断鼠标是否移动,具体实现时,可以预先自定义一个速率v,分别记录下连续两次鼠标事件的时间和位置,计算出间隔的时间?t和移动的距离?s,如果?s > v * ?t,就可以认为鼠标移动,并根据鼠标的具体事件(如按下的是左键、右键等)进行相应的操作。在osg中,由bool TrackballManipulator::isMouseMoving()实现。 3.需要有一个函数接收不同的鼠标和键盘事件,从而做出相应的处理。在osg中,由bool TrackballManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us)实现,如果事件被正确处理,返回true,否则返回false。其中GUIEventAdapter接受来自GUI的更新事件,GUIActionAdapter则是对这些GUI事件的回应。 Quaternion The quaternions are members of a noncommutative division algebra first invented by William Rowan Hamilton. The idea for quaternions occurred to him while he was walking along the Royal

相关主题
文本预览
相关文档 最新文档