虚拟键盘注释

合集下载

手机虚拟键盘的介绍

手机虚拟键盘的介绍

手机虚拟键盘的介绍
智能手机在当今越来越普遍,大街上几乎是人人一部,那么,你们知道手机虚拟键盘吗?它具体是什么呢?店铺在这里给大家讲诉一下手机虚拟键盘是什么。

何谓手机虚拟键盘,就是虽然没有实体的按键,但是屏幕上有虚拟的按键存在,用户只要点击虚拟的按键就可以输入内容,而在功能使用上,它与实质键盘并无差异,这些按键就是所谓的“手机虚拟键盘”。

那么手机虚拟键盘失灵怎么办呢?接下来就让我们一起来了解下吧。

手机虚拟键盘基本介绍
智能手机手机虚拟键盘是指用于全触摸手机的虚拟于屏幕的按键虚拟键盘,可直接把触摸屏上的虚拟键盘当实质键盘使用。

手机虚拟键盘为一种以CCITT的标准键,结合多个功能键组成实际键盘及键值表,产生虚拟键盘,以改善数据键入的方法。

手机虚拟键盘至少包含以下步骤:依据预设的键盘状态值显示对应的虚拟键;判断是否有实际键被按下,若被按下键为CCITT标准键其中之一时,查询键值表以得到键值;然后以预设的键盘状态值及键值,查询键值表以得到虚拟键值;若虚拟键值为虚拟键盘切换键则依据虚拟键盘切换键的键值改变键盘状态值并呼叫键盘显示模组以显示对应的虚拟键盘,并且去除键值;否则,呼叫键盘显示模组以显示该虚拟键值。

java仿真模拟键盘输入

java仿真模拟键盘输入
pressKey(robot, KeyEvent.VK_ENTER);
}
closeApplication(robot);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
接下来的工作要涉及刷手机卡到图书馆借阅书籍的工作,涉及模拟仿真键盘输入,今天有时间写个简单的例子,代码如下:
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.KeyEvent;
// 释放按键关闭应用程序(shift+f4)
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyRelease(KeyEvent.VK_F4);
// 保存一个路径
robot.keyPress(KeyEvent.VK_Y);
robot.keyRelease(KeyEvent.VK_Y);
pressKey(robot, KeyEvent.VK_A);
pressKey(robot, KeyEvent.VK_U);
pressKey(robot, KeyEvent.VK_T);
pressKey(robot, KeyEvent.VK_Y);
// 换行
import java.awt.image.BufferedImage;
ቤተ መጻሕፍቲ ባይዱimport java.io.IOException;
public class EmulationKey {

qtvirtualkeyboard源码解析

qtvirtualkeyboard源码解析

qtvirtualkeyboard源码解析qtvirtualkeyboard是一款由Qt官方提供的虚拟键盘组件,旨在为开发者提供方便快捷的虚拟键盘解决方案。

本文将对qtvirtualkeyboard的源码进行解析,探索其核心实现原理及相关功能。

一、引言qtvirtualkeyboard是基于Qt框架的组件,可用于在Qt应用程序中实现虚拟键盘功能。

它提供了丰富的键盘布局和自定义选项,同时支持多种输入方式,如触摸输入和物理键盘输入。

我们将深入研究其源码,以便更好地理解其工作原理和使用方法。

二、项目结构首先,我们来看一下qtvirtualkeyboard的项目结构。

在源码中,主要包含以下几个文件和文件夹:1. keyboard目录:包含了键盘布局的相关代码和资源文件。

其中,keyboard.qml是键盘布局的主要定义文件,keyboardbase.qml是基础键盘布局的定义文件,而layout目录下的qml文件则定义了不同的布局方式。

2. inputcontext目录:包含了输入上下文相关的代码,主要负责处理输入法的切换和输入内容的传递。

3. keyinterceptor目录:提供了键盘事件拦截器的相关代码,用于拦截和处理键盘事件。

4. languages目录:包含了各种语言的键盘布局定义文件,如en_US、zh_CN等。

5. plugin目录:存放了与主题相关的代码和资源文件。

以上是qtvirtualkeyboard源码的主要结构,接下来我们将重点关注各个部分的实现细节。

三、键盘布局qtvirtualkeyboard支持多种键盘布局,例如全键盘布局、数字键盘布局、符号键盘布局等。

这些布局由keyboard.qml和layout目录下的qml文件来定义。

在keyboard.qml文件中,通过使用Qt Quick语言定义了键盘的整体布局和样式。

它包含了四个主要的子项:inputpanel、keyboardbase、candidates和conversion。

按键精灵命令大全

按键精灵命令大全
按键精灵命令大全
• 基本命令
• 键盘命令键盘模拟命令[KeyPress]“按下再弹起”键[KeyDown]“按下”键[KeyUp]“弹起”键键盘控制 命令[WaitKey]等待按键[GetLastKey]获取上一次按键码 鼠标命令鼠标模拟命令[LeftClick]模拟点击 鼠标左键 [RightClick]模拟点击鼠标右键 [MiddleClick]模拟点击鼠标中键 [LeftDoubleClick]模拟双击 鼠标左键[LeftDown]模拟按下鼠标左键[LeftUp]模拟松开鼠标左键[RightDown]模拟按下鼠标右键 [RightUp]模拟松开鼠标右键 [MoveTo]移动鼠标[MoveR]鼠标相对移动[MouseWheel]滚动鼠标滚轮 鼠标控制命令[WaitClick]等待按鼠标[GetLastClick]获取上一次按下的鼠标代码鼠标辅助命令 [SaveMousePos]保存当前鼠标位置 [RestoreMousePos]将鼠标移动到上一次保存的鼠标位置 [LockMouse]锁定鼠标位置[UnlockMouse]解除鼠标锁定控制命令流程控制命令[If]判断语句[Goto]跳 转语句[Rem]Goto命令的标记,也可以做注释[While] ... [EndWhile]循环[For] ... [EndFor]循环 [EndScript]脚本结束颜色控制命令[IfColor]判断屏幕x,y坐标的某点的颜色,来执行后面的动作或控 制过程[Sub] . [Return]定义过程[Gosub]调用过程 其他命令[Delay]脚本暂停执行[MessageBox]弹出 一个窗口[SayString]输入文字,支持变量[Import]导入VBS或插件命令[VBSBegin] ...[VBSEnd]VBS区 块[VBS]单行VBS指令[VBSCall]执行外部VBScript函数[Plugin]调用一个外部插件提供的函数 [UserVar]用户自定义设置[PutAttachment]展开附件[//]注释命令[TracePrint]调试窗口显示文字VBS 命令[VBSCall Delay] 脚本停止执行一段时间,支持变量[VBSCall FindCenterColor] 从屏幕某个区域的中间开始找色[VBSCall FindColor] 在屏幕指定区域从左到右找色[VBSCall FindColorEx] 模糊找色功能[VBSCall FindPic] 找图片,可设定相似度[VBSCall GetCursorPos] 获得当前鼠标的坐标[VBSCall GetPixelColor] 获得指定位置点的颜色[VBSCall GetScreenResolution] 获得当前屏幕分辨率[VBSCall InputBox] “弹出”对话框允许用户输入文字[VBSCall MessageBox] 弹出对话框,支持变量[VBSCall ReadMemory] 读取本机指定内存地址的数值[VBSCall RunApp] 运行一个程序,或打开一个文件[VBSCall SayString] 输入文本.[VBSCall SetCursorPos] 设置鼠标位置[VBSCall GetCursorShape] 获得鼠标形状 ps:每个命令解释在文本前面

按键 命令简介

按键 命令简介
FindColorEx命令有几个参数?9个
在按键精灵中有三种选择——检测上次按键
KeyDown——按下
WaitKey——等待任意按键
鼠标命令
LeftClick——左键单击
LeftUP——左键弹起
RightClick——右键单击
ReDim——重新定义变量
And——并且
Or——或者
Else——否则
Exit——退出
Step——步长
False——假
Lib——命令库
SetSimMode 0//普通模拟
SetSimMode 1//硬件模拟
SetSimMode 2//超级模拟
在命令的最后以为加H代表硬件模拟,加S代表超级模拟。
RightDown——右键按下
MiddleClick——中建单击
MoveR——鼠标相对移动
SaveMousePos——保存当前坐标
LockMouse——锁定鼠标位置
WaitClick——等待任意鼠标动作
GetCursorPos得到鼠标位子坐标
控制命令
IfColor…End If——颜色判断
RightDown——右键按下
MiddleClick——中建单击
MoveR——鼠标相对移动
SaveMousePos——保存当前坐标
LockMouse——锁定鼠标位置
WaitClick——等待任意鼠标动作
GetCursorPos得到鼠标位子坐标
控制命令
IfColor…End If——颜色判断
RihtUP——右键弹起
MoveTo——鼠标移动
MouseWheel——鼠标滚轮

CW简单操作内容

CW简单操作内容
一、用户登录
1. 触摸基本屏幕(主屏幕)中的菜单
按钮。
2. 通过菜单动作 — 选择登陆菜单选项。 将显示以下屏幕:
4. 触摸紧靠姓名的输入栏。 将显示已注册用户的窗口:
4. 选择用户名,并触摸
按钮。姓名窗口将关闭。
5. 触摸紧靠密码的输入栏。将显示虚拟键盘。
6. 输入密码,并触摸
按钮。
程序返回至登录屏幕。显示用户名:某某及密码:****(而不会显示密码)。
2. 通过触摸 或 方向箭头按钮选择所期望的语言种类,然后触摸
按钮。
用户界面将立即切换至所选择的语言。
注释:
该语言切换是临时性的,任何用户在任何时间都可以执行该操作。当某任务结束之后,将自动 恢复到在用户登录对话框中所预设的语言种类。
二、用户
用户清单:列出了允许在该称重显示器上执行工作的所有用户。各用户都分配有一个密码、一 个帐户以及一种语言。
释内容:
注释 当统计程序关闭时,统计程序的剔选功能也将暂停,即:仅在范围设置屏幕中输入的标准统计 范围才会被应用在所称重物件的重量分类及筛选/剔除功能中。
(2)、其它产品设置
其它产品设置窗口包括有以下输入栏: 输入栏描述 描述: 与产品有关的注释(可选项) 分区数量: 输入重量分区(重量等级)数量(最多为7个重量分区) 容许公差系统: 容许公差系统选项,EC-,任意系统或者US系统。 EC-:遵守欧洲委员会的生产指令的要求。超出许可百分比“TU1%”的任何物件,以及重量低于 “TU2”范围值的物件将予以剔除。 注释 当选择“EC-”做为生产设置时,剔除器将强制性地赋值在TU1和TU2范围之内(剔除器数量不得 选择任意选项)。
级)中。当某物件的重量比某特定的范围极限小一点时,该物件将分配到比该范围极限低一级 的重量分区(等级)中。

vue virtual keyboard用法

vue virtual keyboard用法

vue virtual keyboard用法Vue Virtual Keyboard是一个基于Vue.js的虚拟键盘组件,用于在移动设备上提供自定义的虚拟键盘输入。

使用Vue Virtual Keyboard非常简单,以下是使用的基本步骤:1. 首先,你需要安装Vue Virtual Keyboard。

可以通过npm安装:```shellnpm install vue-virtual-keyboard --save```2. 在你的Vue应用中导入Vue Virtual Keyboard组件:```javascriptimport Vue from 'vue';import VueVirtualKeyboard from 'vue-virtual-keyboard';// 导入样式文件(可选)import 'vue-virtual-keyboard/dist/vue-virtual-keyboard.css';// 注册组件e(VueVirtualKeyboard);```3. 在你的模板中使用`<vue-virtual-keyboard>`标签来渲染虚拟键盘:```html<template><div><input v-model="text" @focus="showKeyboard = true" /><vue-virtual-keyboardv-model="text"@input="handleInput":showWelcomeScreen="showKeyboard" /></div></template>```在上面的例子中,我们创建了一个输入框,并在输入框获得焦点时显示虚拟键盘。

希沃虚拟键盘操作方法

希沃虚拟键盘操作方法

希沃虚拟键盘操作方法
希沃虚拟键盘是一款通过手势和触摸操作的虚拟键盘,以下是其操作方法:
1. 打开虚拟键盘应用程序,并确保手机或平板电脑的触摸屏幕处于激活状态。

2. 点击屏幕以激活虚拟键盘。

3. 使用手指在触摸屏上轻触或滑动来模拟按键的操作。

可以通过在屏幕上滑动手指来移动光标,通过轻触屏幕来输入文本。

4. 如果虚拟键盘支持手势操作,可以使用特定的手势来执行一些特定的功能,比如放大缩小键盘、切换输入法等操作。

5. 可能还可以通过设置来自定义虚拟键盘的外观和功能,包括键盘的布局、颜色、字体大小等。

6. 关闭虚拟键盘时,可以点击系统的返回键或者屏幕上的关闭按钮来退出虚拟键盘。

希沃虚拟键盘还可能具有更多的特殊功能和操作方法,具体操作方法可能因应用版本和设备类型而有所不同,可以查阅相关文档或在线帮助以获得更详细的操作
指南。

virtualkey 用法

virtualkey 用法

virtualkey 用法标题:虚拟键(Virtual Key)的用法详解在计算机编程中,虚拟键(Virtual Key)是一个非常重要的概念。

它是一种用于表示键盘上特定键的数值,这些键可以是字母、数字、符号或者功能键。

虚拟键的主要目的是提供一种平台无关的方式来描述键盘输入,使得开发者能够在不同的操作系统和硬件环境中编写出一致的代码。

以下是一步一步详细解答虚拟键的用法。

1. 了解虚拟键的基本概念:虚拟键是在操作系统级别定义的,每个虚拟键都对应一个唯一的数值。

例如,在Windows系统中,'A'键的虚拟键码是0x41,'B'键的虚拟键码是0x42,以此类推。

这些数值是系统预定义的,程序员可以直接在代码中使用。

2. 使用虚拟键的好处:使用虚拟键有以下几个主要好处:- 平台无关性:由于虚拟键是操作系统级别的定义,因此它们在不同的操作系统和硬件环境中具有相同的意义,这使得开发者可以编写出跨平台的代码。

- 易于处理特殊键:对于一些特殊的键,如功能键、箭头键、控制键等,直接使用其虚拟键码比使用字符表示更为方便。

- 支持多语言输入:虚拟键不受当前输入法或语言环境的影响,可以正确处理各种语言的键盘输入。

3. 如何在代码中使用虚拟键:在大多数编程语言中,使用虚拟键通常涉及到以下步骤:- 获取键盘输入:首先,你需要获取用户的键盘输入。

这通常通过监听某种类型的事件来实现,如Windows系统的"WM_KEYDOWN"消息,或者是Java的KeyEvent等。

- 获取虚拟键码:当键盘事件发生时,你可以从事件对象中获取到触发该事件的键的虚拟键码。

例如,在Windows API编程中,可以使用"wm_keydown"消息的"wParam"参数获取虚拟键码。

- 处理虚拟键码:一旦获取到虚拟键码,你就可以根据你的应用程序的需求来处理它。

qtvirtualkeyboard源码解析

qtvirtualkeyboard源码解析

qtvirtualkeyboard源码解析QtVirtualKeyboard是一个基于Qt的虚拟键盘库,它可以在没有物理键盘的情况下,通过触摸屏或其他输入设备实现键盘输入。

下面是对QtVirtualKeyboard源码的解析:1. 总体结构QtVirtualKeyboard的源码主要包含以下几个部分:* 键盘布局:定义了键盘的布局,包括按键的排列、分组等。

* 键盘显示:负责将键盘布局渲染到屏幕上,并处理用户的触摸事件。

* 输入处理:将用户的输入事件(如按键按下、抬起)转换为文本或命令。

2. 键盘布局键盘布局定义在QtVirtualKeyboard的布局文件(qvk_layout.cpp)中。

布局文件使用XML格式描述键盘的布局,包括按键的名称、位置、大小等信息。

布局文件还可以定义按键的分组和特殊功能键。

3. 键盘显示键盘显示负责将键盘布局渲染到屏幕上,并处理用户的触摸事件。

键盘显示主要包含以下几个部分:* 绘制区域:用于绘制键盘的绘制区域,可以是QWidget或QGraphicsView。

* 绘制函数:用于将键盘布局绘制到绘制区域上。

* 触摸事件处理:处理用户的触摸事件,如按下、抬起、移动等。

4. 输入处理输入处理负责将用户的输入事件(如按键按下、抬起)转换为文本或命令。

输入处理主要包含以下几个部分:* 按键事件处理:处理按键按下和抬起事件,记录按键的状态和时间。

* 文本转换:将按键事件转换为文本或命令,例如将字母键转换为字母文本,将数字键转换为数字文本。

* 特殊功能键处理:处理特殊功能键,如回车键、空格键等。

5. 总结QtVirtualKeyboard是一个功能强大的虚拟键盘库,它提供了灵活的键盘布局和高效的输入处理机制。

通过对QtVirtualKeyboard源码的解析,我们可以深入了解虚拟键盘的实现原理和实现细节,为我们的开发提供参考和借鉴。

虚拟键盘的操作方法

虚拟键盘的操作方法

虚拟键盘的操作方法
虚拟键盘是在计算机或移动设备的屏幕上模拟物理键盘的软件工具,常用于触摸屏设备、平板电脑、智能手机等。

以下是虚拟键盘的一些常见操作方法:
1. 点击键盘上的按键:使用鼠标、触摸屏或触摸笔点击键盘上的按键即可输入字符或执行相应的功能。

2. 切换键盘布局:如果虚拟键盘支持多种键盘布局,可以通过点击键盘上的“切换布局”按钮或者在设备的设置中进行切换。

3. 使用功能键:虚拟键盘上通常还包含功能键,如Shift键、Ctrl键、Alt键等。

按住这些键的同时点击其他按键,可以执行特殊操作,比如大写字母、复制粘贴等。

4. 使用删除键:虚拟键盘通常也提供了删除键,用于删除已输入的字符。

点击删除键可以删除光标前面的字符,长按删除键可以连续删除字符。

5. 使用方向键:虚拟键盘上有方向键可以在文本中移动光标,使用方向键可以向上、向下、向左、向右移动光标。

6. 使用特殊符号键:虚拟键盘通常还包含一些特殊符号,比如逗号、句号、问号等。

点击这些键可以输入对应的符号。

7. 使用数字键盘:虚拟键盘上通常也会包含一个数字键盘,用于输入数字。

点击数字键盘上的数字按键即可输入对应的数字字符。

需要注意的是,具体的虚拟键盘操作方法可能会在不同的设备和操作系统中有所不同,可以根据具体的设备和系统进行操作。

虚拟键盘操作方法

虚拟键盘操作方法

虚拟键盘操作方法
虚拟键盘操作方法如下:
1. 打开虚拟键盘。

在Windows 系统中,可以在“开始菜单”中搜索“屏幕键盘”并打开;在Mac 系统中,可以在“菜单栏-系统偏好设置-键盘-输入源”中启用“键盘与触控板-显示输入法、表情和符号菜单栏”。

2. 点击键盘上的按键。

使用鼠标、触摸板或触摸屏幕点击虚拟键盘上的按键,就能输入相应的字符。

3. 拖动键盘窗口。

在Windows 系统中,可以在虚拟键盘的标题栏上点击鼠标左键,然后拖动窗口到想要的位置;在Mac 系统中,在虚拟键盘的标题栏上点击鼠标左键,按住不放可以显示快捷操作菜单,选择“移动窗口”。

4. 使用大写锁定、Shift 键等。

通过虚拟键盘上的相应按键,可以启用大写锁定来输入大写字母,也可以使用Shift 键来切换大小写字母输入。

5. 切换输入法和语言。

在Mac 系统中,可以在虚拟键盘上点击“世界地球”图标来切换输入法和语言;在Windows 系统中,可以在“开始菜单-设置-时间和语言-区域和语言”中添加需要的语言,并在虚拟键盘上点击语言切换键来切换输入法和语言。

6. 关闭虚拟键盘。

在Windows 系统中,可以在虚拟键盘的右上角点击关闭按钮;在Mac 系统中,可以在虚拟键盘的标题栏上点击关闭按钮。

vb模拟键盘详解汇总

vb模拟键盘详解汇总

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 这两个参数是随消息附加的数据,具体内容要由消息决定。

再来看看wMsg 这个参数,要模拟按键就靠这个了。

键盘消息常用的有如下几个:WM_KEYDOWN 表示一个普通键被按下WM_KEYUP 表示一个普通键被释放WM_SYSKEYDOWN 表示一个系统键被按下,比如Alt键WM_SYSKEYUP 表示一个系统键被释放,比如Alt键如果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wParam 和lParam 这两个参数。

在一个键盘消息中,wParam 参数的含义较简单,它表示你要发送的键盘事件的按键虚拟码,比如你要对目标程序模拟按下A键,那么wParam 参数的值就设为VK_A ,至于lParam 这个参数就比较复杂了,因为它包含了多个信息,一般可以把它设为0,但是如果你想要你的模拟更真实一些,那么建议你还是设置一下这个参数。

修改键盘布局映射方法

修改键盘布局映射方法

修改键盘布局映射方法,让音量+键也能像电源键那样关屏及点亮屏幕键盘布局映射文件通常放在/system/usr/keylayout下文件格式:键映射文件通常以UTF8文本文件格式存储于设备,通常有如下特性:注释:用#表示,以#开头的内容都将被忽略。

空白:所有的空行被忽略键定义:键定义遵循如下格式key SCANCODE KEYCODE [FLAGS...],当扫描码是一个数字,键码定义在你描述的布局文件android.keylayout.xxx。

另外可以设置相关的FLAGS:SHIFT: 当按下,自动加上SHIFT键值ALT:当按下,自动加上ALTCAPS:当按下,自动带上CAPS大写WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。

WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。

原键盘布局映射文件spade-keypad-v0.k如下:key 102 HOME WAKE_DROPPEDkey 139 MENU WAKE_DROPPEDkey 158 BACK WAKE_DROPPEDkey 217 SEARCH WAKE_DROPPEDkey 116 POWER WAKE_DROPPEDkey 114 VOLUME_DOWN WAKEkey 115 VOLUME_UP WAKE现在我们就来修改一下,让音量+键也能像电源键那样唤醒屏幕,修改后的内容如下:key 102 HOME WAKE_DROPPEDkey 139 MENU WAKE_DROPPEDkey 158 BACK WAKE_DROPPEDkey 217 SEARCH WAKE_DROPPEDkey 116 POWER WAKE_DROPPEDkey 114 VOLUME_DOWN WAKEkey 115 POWER WAKE_DROPPED注意,请使用EditPlus或者Notepad++这类软件来修改。

C#实现的三种方式实现模拟键盘按键

C#实现的三种方式实现模拟键盘按键

C#实现的三种⽅式实现模拟键盘按键模拟按键在.Net中有三种⽅式实现。

第⼀种⽅式:System.Windows.Forms.SendKeys组合键:Ctrl = ^ 、Shift = + 、Alt = %模拟按键:Aprivate void button1_Click(object sender, EventArgs e){textBox1.Focus();SendKeys.Send("{A}");}模拟组合键:CTRL + Aprivate void button1_Click(object sender, EventArgs e){webBrowser1.Focus();SendKeys.Send("^{A}");}SendKeys.Send // 异步模拟按键(不阻塞UI)SendKeys.SendWait // 同步模拟按键(会阻塞UI直到对⽅处理完消息后返回)第⼆种⽅式:keybd_event模拟按键:A[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);private void button1_Click(object sender, EventArgs e){textBox1.Focus();keybd_event(Keys.A, 0, 0, 0);}模拟组合键:CTRL + Apublic const int KEYEVENTF_KEYUP = 2;private void button1_Click(object sender, EventArgs e){webBrowser1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.A, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);} 模拟组合键:CTRL + X ,CTRL + C ,CTRL + V ,CTRL + Z[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);public const int KEYEVENTF_KEYUP = 2;private void InitSheet(FarPoint.Win.Spread.SheetView sheet){// 列の設定sheet.ColumnCount = 3;// ⾏の設定sheet.RowCount = 9;}private void BtnCtrlX_Click(object sender, EventArgs e){textBox1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.X, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);SendKeys.Send("^{X}");}private void BtnCtrlC_Click(object sender, EventArgs e){textBox1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.C, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);SendKeys.Send("^{C}");}private void BtnCtrlV_Click(object sender, EventArgs e){spreadEx1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.V, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);SendKeys.Send("^{V}");}private void BtnCtrlZ_Click(object sender, EventArgs e){textBox1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.Z, 0, 0, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);SendKeys.Send("^{Z}");}上⾯两种⽅式都是全局范围呢,现在介绍如何对单个窗⼝进⾏模拟按键模拟按键:A / 两次[DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]public static extern int PostMessage(IntPtr hWnd, int Msg, Keys wParam, int lParam);public const int WM_CHAR = 256;private void button1_Click(object sender, EventArgs e){textBox1.Focus();PostMessage(textBox1.Handle, 256, Keys.A, 2);}模拟组合键:CTRL + A如下⽅式可能会失效,所以最好采⽤上述两种⽅式public const int WM_KEYDOWN = 256;public const int WM_KEYUP = 257;private void button1_Click(object sender, EventArgs e){webBrowser1.Focus();keybd_event(Keys.ControlKey, 0, 0, 0);keybd_event(Keys.A, 0, 0, 0);PostMessage(webBrowser1.Handle, WM_KEYDOWN, Keys.A, 0);keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);//直接给你贴⼀个我⾃⼰写的类,模拟键盘输⼊字符using System.Runtime.InteropServices;namespace lisonFunc{static class MyKey{[DllImport("user32.dll", EntryPoint = "keybd_event")]private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); /// <summary>/// 按⼀个键后等待⼀段时间/// </summary>/// <param name="keyCode">要按的键,如Keys.Enter</param>/// <param name="wait">等待的时间(毫秒)</param>public static void KeyPress(Keys keyCode, int wait){keybd_event((byte)keyCode, 0, 0, 0);keybd_event((byte)keyCode, 0, 2, 0);Thread.Sleep(wait);}/// <summary>/// Ctrl+...组合键/// </summary>/// <param name="keyCode">要同时按下的键,如Keys.C</param> public static void ControlKey(Keys keyCode){keybd_event((byte)Keys.ControlKey, 0, 0, 0);keybd_event((byte)keyCode, 0, 0, 0);keybd_event((byte)keyCode, 0, 2, 0);keybd_event((byte)Keys.ControlKey, 0, 2, 0);}/// <summary>/// 重复n次按某个键/// </summary>/// <param name="keyCode">要按的键,如Keys.Enter</param> /// <param name="Times">按键次数</param>/// <param name="wait">间隔时间(毫秒)</param>public static void KeyPressRep(Keys keyCode, int Times, int wait) {for (int i = 0; i < Times; i++){KeyPress(keyCode,wait);}}/// <summary>/// 输⼊⼀串数字/// </summary>/// <param name="NumWords"></param>public static void TypeNums(string NumWords){foreach (char c in NumWords.ToCharArray()){KeyPress(48 + c, 50);}}}}。

触摸式虚拟键盘参考

触摸式虚拟键盘参考

《触摸式虚拟键盘》一、触摸屏工作原理触摸屏接线图触摸屏能够看成是一个二维周密电阻网络,能够进一步等效成沿x方向的电阻r x和沿y方向的电阻r y。

r x是指x e-x0这段电阻,r y是指y e-y0这段电阻。

如图6-4所示。

当笔尖压在K点时,r x方向的电阻可等效成两段:r xk-x0和r xe-xk。

r y方向上的电阻分成r yk-y0和r ye-yk。

触摸屏操纵接口有6根线引向S3C2410的引脚。

当nX PON、X MON有效,T二、T4导通,r x电阻被加电,xk点处的模拟电压通过r ye-yk电阻、Y POS引线进入ADC的通道AIN[0](在HHARM2410开发板的实际连线)。

该通道以10bit的精度完成模数转化,该电压的数字量Dxk存入S3C2410内部ADCDAT0寄放器的Xpdata域。

一样,当nY PON、Y MON有效,T一、T3导通,K点沿y方向的座标点yk处形成r y电阻的分割,该点的模拟电压经r xe-xk电阻、X POS引线进入AIN[2]通道,模数转化后的数字电压Dyk信号存入ADCDAT1寄放器的Ypdata域。

从x0到xk之间的电阻值r xk-x0和从yp到yk之间的电阻值r yk-yp能够很容易的被求出:r xk-x0=r xe-x0*V xk-x0 /V E r yk-y0=r ye-yp*V yk-y0 /V E假设ADC的参考电压V ref=V E,转化精度为10bit,那么x k点和y k点的数字量Dx k、Dy k 可近似用下面的表达式描述:Dx k=1024*V xk-x0 / V E Dy k=1024*V yk-yp / V EnXpon Xmon nYpon Ymon Ypos Xpos测量X座标√√××√×测量Y座标××√√×√二、主程序说明#include <> /* Standard input/output definitions */#include <> /* String function definitions */#include <> /* UNIX standard function definitions */#include <> /* File control definitions */#include <> /* Error number definitions */#include <> /* POSIX terminal control definitions */#include<sys/>#include<sys/>#include <>#include "../gui/"#include "../handpad/"#define STARTX 0#define STARTY 0#define MAX 270000#define KB ""#define XMAX 240 /*X方向的最大值(像素)*/#define X_STEP 8 /*X方向字符显示时的步长(像素)*/#define Y_STEP 15 /*Y方向字符显示时的步长(像素)*/struct _keyboard{ char ch; /*键对应的字符*/short startx, starty, endx, endy; } /*键的左上角和右下角的坐标*/ kbindex[]={ /*虚拟键盘的第一排*/{ '~', 1+STARTX, 1+STARTY, 15+STARTX, 15+STARTY},{ '1', 17+STARTX, 1+STARTY, 32+STARTX, 15+STARTY},{ '2', 34+STARTX, 1+STARTY, 49+STARTX, 15+STARTY},{ '3', 51+STARTX, 1+STARTY, 66+STARTX, 15+STARTY},{ '4', 68+STARTX, 1+STARTY, 83+STARTX, 15+STARTY},{ '5', 85+STARTX, 1+STARTY, 99+STARTX, 15+STARTY},{ '6', 101+STARTX, 1+STARTY, 115+STARTX, 15+STARTY},{ '7', 117+STARTX, 1+STARTY, 132+STARTX, 15+STARTY},{ '8', 134+STARTX, 1+STARTY, 148+STARTX, 15+STARTY},{ '9', 150+STARTX, 1+STARTY, 165+STARTX, 15+STARTY},{ '0', 167+STARTX, 1+STARTY, 181+STARTX, 15+STARTY},{ '-', 183+STARTX, 1+STARTY, 198+STARTX, 15+STARTY},{ '=', 200+STARTX, 1+STARTY, 214+STARTX, 15+STARTY},{ '\b', 216+STARTX, 1+STARTY, 236+STARTX, 15+STARTY},/*虚拟键盘的第二排*/{'\t',1+STARTX,17+STARTY,20+STARTX,32+STARTY},{'q',22+STARTX,17+STARTY,37+STARTX,32+STARTY},{'w',39+STARTX,17+STARTY,54+STARTX,32+STARTY},{'e',56+STARTX,17+STARTY,70+STARTX,32+STARTY},{'r',72+STARTX,17+STARTY,87+STARTX,32+STARTY},{'t',89+STARTX,17+STARTY,103+STARTX,32+STARTY},{'y',105+STARTX,17+STARTY,120+STARTX,32+STARTY},{'u',122+STARTX,17+STARTY,136+STARTX,32+STARTY},{'i',138+STARTX,17+STARTY,153+STARTX,32+STARTY},{'o',155+STARTX,17+STARTY,169+STARTX,32+STARTY},{'p',171+STARTX,17+STARTY,186+STARTX,32+STARTY},{'[',188+STARTX,17+STARTY,202+STARTX,32+STARTY},{']',204+STARTX,17+STARTY,219+STARTX,32+STARTY},{'\\',221+STARTX,17+STARTY,236+STARTX,32+STARTY},/*虚拟键盘的第三排*/{'C',1+STARTX,34+STARTY,24+STARTX,49+STARTY},,168+STARTX,51+STARTY,183+STARTX,66+STARTY},{'/',185+STARTX,51+STARTY,200+STARTX,66+STARTY},/*虚拟键盘的第五排*/{'E', 1+STARTX,68+STARTY,20+STARTX,83+STARTY}, tartx && x<kbindex[index].endx && y>kbindex[index].starty && y<kbindex[index].endy){ ch=kbindex[index].ch;if(ch>'Z' || ch<'A') /*若是是操纵字符,不进行显示*/printf("%c x= %d y=%d \n",kbindex[index].ch,x,y);break;}if(index>=kb_length) continue; /*若是完成所有迭代,仍是没有成功,那么触摸的位置超出了有效范围*//*保留旧的位置信息,用于后一次的比较,若是位置很接近,那么属于抖动现象*/ ox=x; oy=y;if(ch<='Z' && ch>='A') /*特殊操纵部份,'E'代表ESC,程序终止*/{switch(ch){ case 'E': printf("bye!\n");textout(1,300,"bye!",0xffff,0x0000);exit(0);default: continue; };}/*字符赋值给字符串,进行textout*/charbuf[0]=kbindex[index].ch;textout(STARTX+(++X_index)*X_STEP,STARTY+Y_index*Y_STEP+90,charbuf,0xffff,0x 0000) ;/*若是显示区的一行显示不下,那么自动换行*/if(STARTX+(1+X_index)*X_STEP>=XMAX){++Y_index;X_index=-1;}delay(800); } }}三、挪用的函数char * device = "/dev/touchscreen/0raw";int screen_tp_fd;typedef struct {unsigned short pressure; //触摸到那么非0unsigned short x;unsigned short y;} TS_RET_HANDPAD;int max(int x,int y){return x>y?x:y; }int min(int x,int y){return x>y?y:x; }int get_average_num(int x,int y,int z){return (x+y+z)/3; }int middle(int x,int y,int z){return x+y+z-min(min(x,y),z)-max(max(x,y),z); }1)void init_handpad(){ screen_tp_fd = open(device, O_RDONL Y);if (screen_tp_fd == -1) {printf("Unable to open touch screen");exit(0); } }2)int get_handpad(unsigned short *x,unsigned short *y){int i=0,x_sum=0,y_sum=0;int xa[3],ya[3];for(i=0;i<3;){TS_RET_HANDPAD cBuffer;read(screen_tp_fd,&cBuffer,sizeof(TS_RET_HANDPAD));if{xa[i] = ;ya[i] = ;// printf("x=%d,y=%d,i=%d\n",,,i);i++;}}*x = (get_average_num(xa[0],xa[1],xa[2]));*y=(get_average_num(ya[0],ya[1],ya[2]));return 1;}四、试探题:1.避免抖动的方法2.printf( ); textout( ) ;put();有什么区别?3.如何校正触摸屏和LCD显示屏的坐标?五、实验实现一个简单导游助理的嵌入式应用程序1.第一幅是友好的欢迎画面,按“进入”按键,就进入第二幅画面;2.第二幅是4个风光区小画面,相当触摸键盘;3.按了任何1个方框或小画面就显示一段中文风光区说明;4.只要触摸中文说明的任何区域就退回第二幅画面;5.按了第二幅画面中,4个方框或小画面之外的任何区域,就退回第一幅画面;按“退出”按键,那么程序退出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

到System——apps——WF_VirtualKey——skin找到下面的文件KeyCodeDef.ini//=======基本功能键========[WF_LeftSoftKey] //左软键KeyScanCode = 0xA4 //键值KeyCode = 0xF842[WF_RightSoftKey] //右软键KeyScanCode = 0xA5 //键值KeyCode = 0xF843[WF_ArrowUpKey] //上方向键KeyScanCode = 0x10 //键值KeyCode = 0xF809[WF_ArrowDownKey] //下方向键KeyScanCode = 0x11 //键值KeyCode = 0xF80A[WF_ArrowLeftKey] //左方向键KeyScanCode = 0x0E //键值KeyCode = 0xF807[WF_ArrowRightKey] //右方向键KeyScanCode = 0x0F //键值KeyCode = 0xF808[WF_OkKey] //确定键KeyScanCode = 0xA7 //键值KeyCode = 0xF845[WF_BackSpaceKey] //删除键,又叫C键KeyScanCode = 0x01 //键值KeyCode = 0x08[WF_GreenKey] //拨号键KeyScanCode = 0xC4 //键值KeyCode = 0xF862[WF_RedKey] //挂机键KeyScanCode = 0xC5 //键值KeyCode = 0xF863//=====特别功能键===========================//[WF_MoveWindow]//窗口移动句柄,双击可激活移动模式。

(目前不支持) //[WF_SwitchSkin]//皮肤切换句柄,双击可开关窗口。

(目前不支持)//[WF_ScrollUpAndDown]//上下滚动条(目前不支持)//[WF_ScrollLeftAndRight]//左右滚动条.(目前不支持)//用来定义所有配置文件中的形状//这个文件的编码格式规范为:Uncode带签名,换行方式CR+LF,大小写敏感。

//颜色中0xAABBCCDD,0x为16进制//AA为透明度,00为透明,FF为不透明(00~FF)//BB红色分量(00~FF)//CC绿色分量(00~FF)//DD蓝色分量(00~FF)[WF_RECT_BackNormal] //外框窗格大小,图中红色区范围Size = SIZE(130,85)BackColor = 0x8099D9EA //外框窗格透明度和颜色,图中为淡蓝色99D9EA,透明度80 //--------------------//外框窗格上下左右边框粗细,单位像素,图中红色框粗细BorderTop = 3BorderBottom = 3BorderLeft = 3BorderRight = 3BorderColor = 0xFFFF0000 //边框透明度和颜色,图中边框为红色FF0000,透明度FF //--------------------[WF_RECT_BackOnMove] //移动时外框窗格大小Size = SIZE(130,85)BackColor = 0x80FF0000 //外框窗格透明度和颜色//--------------------//移动时外框窗格上下左右边框粗细,单位像素BorderTop = 1BorderBottom = 1BorderLeft = 1BorderRight = 1BorderColor = 0xFFFFFFFF //边框透明度和颜色//--------------------[WF_Rect_KeyNormal] //虚拟键大小,图中蓝色区范围Size = SIZE(40,25)BackColor = 0x80DCDCDC //虚拟键透明度和颜色,图中为灰色DCDCDC,透明度80 //--------------------//虚拟键边框大小BorderTop = 0BorderBottom = 0BorderLeft = 0BorderRight = 0BorderColor = 0xFF0000FF //虚拟键边框透明度和颜色,图中为蓝色,透明度FF//--------------------[WF_Rect_KeyDown] //虚拟键按下时窗格大小Size = SIZE(40,25)BackColor = 0xDD0000FF //虚拟键按下时窗格透明度和颜色//--------------------//虚拟键按下时窗格边框大小BorderTop = 1BorderBottom = 1BorderLeft = 1BorderRight = 1BorderColor = 0xFFFFFFFF //虚拟键按下时窗格边框透明度和颜色[SkinConfig]//RECT_STARTWindowSize = SIZE(130,85) //窗体大小FontHeight = 18 //文字大小Link_WindowBackNormal = WF_RECT_BackNormalLink_WindowBackOnMove = WF_RECT_BackOnMoveLink_WindowBackSkinNormal = NULL//目前不支持Link_WindowBackSkinOnMove = NULL//目前不支持//RECT_END[Skin_Key]//左软键Link_KeyCode = WF_LeftSoftKey//RECT_STARTKeyRectPostion = POINT(3,3) //(0,0)键左上角坐标,图中箭头处KeyText = 左键//(0,0)键键名KeyTextAlign = ALIGN(50,60) //文字对齐KeyTextColorNormal = 0xFF000000 //文字透明度和颜色KeyTextColorDown = 0xBB000000 //软件按下时文字透明度和颜色Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//上方向键Link_KeyCode = WF_ArrowUpKey//RECT_STARTKeyRectPostion = POINT(45,3) //(0,1)键左上角坐标KeyText = 上//(0,1)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//右软键Link_KeyCode = WF_RightSoftKey//RECT_STARTKeyRectPostion = POINT(87,3) //(0,2)键左上角坐标KeyText = 右键//(0,2)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//左方向键Link_KeyCode = WF_ArrowLeftKey//RECT_STARTKeyRectPostion = POINT(3,30) //(1,0)键左上角坐标KeyText = 左//(1,01)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//导航中键,又叫确定键Link_KeyCode = WF_OkKey//RECT_STARTKeyRectPostion = POINT(45,30) //(1,1)键左上角坐标KeyText = OK //(1,1)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//右方向键Link_KeyCode = WF_ArrowRightKey//RECT_STARTKeyRectPostion = POINT(87,30) //(1,2)键左上角坐标KeyText = 右//(1,2)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//拨号键Link_KeyCode = WF_GreenKey//RECT_STARTKeyRectPostion = POINT(3,57) //(2,0)键左上角坐标KeyText = 拨号//(2,0)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//下方向键Link_KeyCode = WF_ArrowDownKey//RECT_STARTKeyRectPostion = POINT(45,57) //(2,1)键左上角坐标KeyText = 下//(0,1)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END[Skin_Key]//退格键,又叫C键,删除键Link_KeyCode = WF_BackSpaceKey//RECT_STARTKeyRectPostion = POINT(87,57) //(2,2)键左上角坐标KeyText = 删除//(2,2)键键键名KeyTextAlign = ALIGN(50,60)KeyTextColorNormal = 0xFF000000KeyTextColorDown = 0xBB000000Link_KeyRectNormal = WF_Rect_KeyNormalLink_KeyRectDown = WF_Rect_KeyDownLink_KeySkinNormal = NULL//目前不支持Link_KeySkinDown = NULL//目前不支持//RECT_END键值01=删除键A2=音量加A3=音量减A4=左软键A5=右软键A7=OK AB=照相B4=功能表C5=挂机C4=拨号0E=左0F=右10=上11=下2A=*7F=# B6=播放B7=停止B8=前进B9=后退E6=多媒体12=LShift13=RShift16=LCtrl17=RCtrl18=LFunc19=RFunc30=031=132=233=334=435=536=637=738=839=941=A42=B......。

相关文档
最新文档