精华内容
下载资源
问答
  • 键盘布局最多18列7行 仅使用标准KiCad库 当前不支持: 具有辅助宽度/高度的键(因此,暂时没有ISO / big-ass ENTER键,对不起!) 旋转键 垂直键(例如,数字键盘ENTER和“ +”) 阿尔卑斯开关 安装 klepcbgen...
  • 特性支持标准矩阵式键盘:此设计展示的实施采用了 15x8 的矩阵,但也可以使用不同的键盘布局 独立于通信接口:包含 USB 和 I2C 示例 支持多媒体键 几乎可以实施到任意 MSP430 平台中:包含 MSP430F5529 和 MSP430G2744 ...
  • js软件软键盘输入!

    2012-06-04 15:01:12
    荷兰,德伏扎克,法文,德文,希腊文,希伯来文,意大利文,立陶宛文,挪威文,有多少瓦,波兰语程序员,葡萄牙语,俄语,西班牙语(西班牙) ,土耳其-女,土耳其-键盘,英国,美国的标准和美国国际键盘布局,可...
  • Unison /什么是Unison? Unison是一种窄音高键盘,适合GH60兼容60%的外壳。 我们准备了配备旋转编码器并...确保布局中填充了标准键帽。 多键,多旋转编码器。 特征 三明治间距 它使用了长度为16.4毫米,宽度为16.8毫米
  • 上一篇文章中用JNA实现的键盘监听,在...我看失败的错误描述,貌似问题都出在了图形界面X11上面还有什么键盘布局上,我的Ubuntu系统,不是标准的那种布局,就运行失败了。想了想,虽然失败了,还是记录一下吧,万...

    上一篇文章中用JNA实现的键盘监听,在Windows上完美运行,能在后台拿到扫描枪扫描输入的内容,可在Linux下还是没办法,于是在网上各种找,又找到两种办法,还是一样,在Windows上运行都没问题,最后都失败在Linux,最后,我看失败的错误描述,貌似问题都出在了图形界面X11上面还有什么键盘布局上,我的Ubuntu系统,不是标准的那种布局,就运行失败了。想了想,虽然失败了,还是记录一下吧,万一有使用redhat等系统的运行没问题呢?

    一、使用jnativehook监听键盘输入

        jnativehook也是个开源项目,项目地址:kwhat/jnativehook,这个项目也是全平台支持的,Windows,Linux、Mac全都支持,但是Linux下貌似是需要装X11,然后键盘布局也得是相关,不然报错了。我运行的报错如下:

    报错里面的symbols/pc105我也不懂什么东西,网上一查,感觉就是个键盘类型,就像除了我们用的qwer标准键盘外,还有IBM的有F13的键盘,日文输入键盘等,总之就是我装的Ubuntu系统中没有这个文件,导致报错。但是其他系统说不定就没问题。

    这个项目使用也挺简单的,从他的仓库下载JAR包,下载下来,用命令运行java -jar jnativehook.jar,就能出现一个用Swing绘制的图形小程序demo,简单演示监听到的鼠标键盘等输入,具体怎么调用的,将jar包放入eclispe,查看包内的src/java/org/jnativehook/example/NativeHookDemo.java文件就可以看到了。项目要引用,也只需要这一个jar包导入就可以,实现方法也很简单,跟Swing程序中鼠标键盘监听一模一样。下面贴上我简单实现的鼠标监听的代码,其他鼠标监听之类的可以自己研究下官方Demo源码,很明了。

    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import org.jnativehook.GlobalScreen;
    import org.jnativehook.NativeHookException;
    import org.jnativehook.dispatcher.DefaultDispatchService;
    import org.jnativehook.keyboard.NativeKeyEvent;
    import org.jnativehook.keyboard.NativeKeyListener;
    
    public class Test implements NativeKeyListener{
        private static final Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
        
        public static void main(String[] args) {
            //关闭日志
            logger.setLevel(Level.OFF);
            new Test();
        }
        
        public Test() {
            //添加监听调度员,如果是Swing程序,就用SwingDispatchService,不是就用默认的
            GlobalScreen.setEventDispatcher(new DefaultDispatchService());
            try {
                //注册监听
                GlobalScreen.registerNativeHook();
                //加入键盘监听,
                GlobalScreen.addNativeKeyListener(this);
            } catch (NativeHookException e) {
                e.printStackTrace();
            }
        }
    
        //实现键盘监听的三个方法,根据自己情况实现
        @Override
        public void nativeKeyTyped(NativeKeyEvent nativeEvent) {
            System.out.println("typed"+nativeEvent.paramString());
        }
    
        @Override
        public void nativeKeyPressed(NativeKeyEvent nativeEvent) {
            System.out.println("pressed"+nativeEvent.paramString());
        }
    
        @Override
        public void nativeKeyReleased(NativeKeyEvent nativeEvent) {
            System.out.println("released"+nativeEvent.paramString());
        }
    }

    二、使用JXGrabKey来监听

           JXGrabKey原本是用来注册热键的,上一篇文章中介绍过,用来实现监听键盘有点怪,但如果没有更好的解决办法时,这也是一种办法,

    github项目地址为:https://github.com/friedmag/jxgrabkey  不过这个里面没有相关的jar包和so文件,需要去http://sourceforge.net/projects/jxgrabkey/ 这里面下载,需要引入jar包,还需要加载so文件,还用刀了SWT的相关东西,所以你还得加入SWT的jar包,从eclipse目录下找到\plugins\org.eclipse.swt.win32.win32.x86_64_3.106.0.v20170608-0516.jar,这个包,添加到项目中才可以。

        具体我的思路是将每一个按键当作一个热键,都去实现自己要实现的操作。虽然很麻烦,但确实管用!而且在我的Ubuntu下运行成功!都没报任何错。可以试试,下面贴上我的代码,只简单实现了将0-9的数字捕获,按下回车即输出。

    import java.awt.event.KeyEvent;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.swing.JOptionPane;
    
    import jxgrabkey.HotkeyConflictException;
    import jxgrabkey.HotkeyListener;
    import jxgrabkey.JXGrabKey;
    
    public class JXGrabKeyTest {
    
        private static final int MY_HOTKEY_INDEX_0 = 0;
        private static final int MY_HOTKEY_INDEX_1 = 1;
        private static final int MY_HOTKEY_INDEX_2 = 2;
        private static final int MY_HOTKEY_INDEX_3 = 3;
        private static final int MY_HOTKEY_INDEX_4 = 4;
        private static final int MY_HOTKEY_INDEX_5 = 5;
        private static final int MY_HOTKEY_INDEX_6 = 6;
        private static final int MY_HOTKEY_INDEX_7 = 7;
        private static final int MY_HOTKEY_INDEX_8 = 8;
        private static final int MY_HOTKEY_INDEX_9 = 9;
        private static final int MY_HOTKEY_INDEX_100 = 100;
        private static boolean hotkeyEventReceived = false;
        
        static List<Character> singleInput = new ArrayList<Character>();
    
        private static String caseCode() {
            StringBuffer buffer = new StringBuffer();
            for (Character i : singleInput) {
                buffer.append(i);
            }
            return buffer.toString();
        }
        
        public static void main(String[] args) throws Exception {
            //Load JXGrabKey lib
            System.load(new File("lib/libJXGrabKey.so").getCanonicalPath());
            
            //Enable Debug Output
            JXGrabKey.setDebugOutput(true);
            
            //Register some Hotkey
            try{
                //int key = KeyEvent.VK_K, mask = KeyEvent.CTRL_MASK | KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK;
                //int key = KeyEvent.VK_F2, mask = KeyEvent.ALT_MASK; //Conflicts on GNOME
                
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_0, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_0);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_1, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_1);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_2, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_2);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_3, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_3);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_4, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_4);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_5, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_5);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_6, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_6);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_7, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_7);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_8, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_8);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_9, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_9);
                JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX_100, KeyEvent.KEY_LOCATION_UNKNOWN, KeyEvent.VK_ENTER);
            }catch(HotkeyConflictException e){
                JOptionPane.showMessageDialog(null, e.getMessage(), e.getClass().getName(), JOptionPane.ERROR_MESSAGE);
                
                JXGrabKey.getInstance().cleanUp(); //Automatically unregisters Hotkeys and Listeners
                //Alternatively, just unregister the key causing this or leave it as it is 
                //the key may not be grabbed at all or may not respond when numlock, capslock or scrollock is on
                return;
            }
                    
            //Implement HotkeyListener
            HotkeyListener hotkeyListener = new jxgrabkey.HotkeyListener(){
                public void onHotkey(int hotkey_idx) {
                    switch(hotkey_idx) {
                        case MY_HOTKEY_INDEX_0:
                            singleInput.add((char) 0);
                        case MY_HOTKEY_INDEX_1:
                            singleInput.add((char) 1);
                        case MY_HOTKEY_INDEX_2:
                            singleInput.add((char) 2);
                        case MY_HOTKEY_INDEX_3:
                            singleInput.add((char) 3);
                        case MY_HOTKEY_INDEX_4:
                            singleInput.add((char) 4);
                        case MY_HOTKEY_INDEX_5:
                            singleInput.add((char) 5);
                        case MY_HOTKEY_INDEX_6:
                            singleInput.add((char) 6);
                        case MY_HOTKEY_INDEX_7:
                            singleInput.add((char) 7);
                        case MY_HOTKEY_INDEX_8:
                            singleInput.add((char) 8);
                        case MY_HOTKEY_INDEX_9:
                            singleInput.add((char) 9);
                        case MY_HOTKEY_INDEX_100:
                            System.out.println(caseCode());
                            singleInput.clear();
                    }
                    //hotkeyEventReceived = true;
                }
            };
            
            //Add HotkeyListener
            JXGrabKey.getInstance().addHotkeyListener(hotkeyListener);
            
    //        //Wait for Hotkey Event
    //        while(!hotkeyEventReceived){
    //            Thread.sleep(1000);
    //        }
    //        
    //        // Shutdown JXGrabKey
    //        JXGrabKey.getInstance().unregisterHotKey(MY_HOTKEY_INDEX); //Optional
    //        JXGrabKey.getInstance().removeHotkeyListener(hotkeyListener); //Optional
    //        JXGrabKey.getInstance().cleanUp();
        }
    }

     

    转载于:https://www.cnblogs.com/plumsq/p/10709122.html

    展开全文
  • 收集一些Java 图形用户界面编程实验源码集锦:1....14.键盘事件。  15.菜单(下拉菜单)。16.菜单(多级菜单)。17.菜单(弹出式菜单)。18.对话框。  相信这些Jaa实验代码对学习Java编程有帮助。
  • 第0层包含“标准”键映射布局,其中大部分每个键都执行键帽图例指示的内容。 唯一的例外是ESC键,如果点击该键,将用作ESC,如果按住该键,则将其用作CTRL键。 不需要修改器即可进入该层,因为这是默认层。 第1层:...
  • 如下1,就是标准手机键盘上用来打出26个字母(a~z)的按键布局。由于每个键上有多个字母,我们打字时常会遇到的情况是,某些常用字母可能需要按几下键才能打出来。比如字母“s”,需要按四次键才能选中。如果我们...
  • Windows的可用键盘布局通过更好地支持死键和图形字符来改进和扩展了标准Windows键盘布局
  • 14.1.3 提供键盘访问的方法 263 14.1.4 提供可选方案 264 14.1.5 挑选一种标准,然后坚持下去 264 14.2 有关访问性的书籍 265 14.3 普遍的质疑 267 14.3.1 “盲人亿万富翁” 267 14.3.2 可访问性不只是视力...
  • MacOS乌克兰语PC键盘布局 乌克兰语的内置MacOS布局对于同时使用MacOS和Windows的用户来说非常不便,这是因为字符“和”,“和”以及句号,逗号,冒号,问号和其他字符的位置不同。 在这种布局中,字母数字块的字符...
  • KeyInputDemo 处理键盘事件示例。 LatBox 依赖属性示例。 LogicalTree 逻辑树示例。 MouseClickEventArgsDemo 鼠标单击事件示例。 MouseInputInfo 获取鼠标输入信息。 ProgramLoopTree 编程...
  • 高效键盘布局分析计划 计划使用matlab对计算机按键布局进行优化分析,以求最合理,最优化的按键方案。 1.先整体输入一段标准文字,用于记录按键位置所需要的时间 2.计算机自动模拟按键对某部英文著作或程序代码,...
  • UltimateKEYS-测试 UltimateKEYS的测试存储库 正式发布: 测试版本: 精简版(CE): ... 请参阅azerty-test文件夹,以获取具有AZERTY版键盘布局的实验版。 比利时AZERTY(变体): AHK中的比利时AZER
  • nut.js(本地UI工具包) GitHub动作 主 开发 使用node.js进行本机UI测试/自动化 关于 nut.js是一个跨平台的本机UI自动化/测试工具... 支持标准的美国键盘布局 支持德语特殊字符 老鼠 支持鼠标移动 支持鼠标滚动
  • 按两下引号才会出来如符号,反复设置后发现调成中文后输入源也被翻译过来,标准美式键盘布局应当是英语(美国)而不是猜测的English(Mali,US international)。 调整方法: 系统设置-》文本输入-》调整成英语...

    ubuntu调成中文后编辑出现如下问题:

    按两下引号才会出来如图符号,反复设置后发现调成中文后输入源也被翻译过来,标准美式键盘的布局应当是英语(美国)而不是猜测的English(Mali,US international)。

    调整方法:

    系统设置-》文本输入-》调整成英语(美国)

    调整后:

    展开全文
  • 库尔德2019年 ...只需单击或触摸即可输入Kurdish,而无需在设备上安装任何键盘布局。 发展 准备开发环境npm install 运行npm start 图书馆 如何建造: 运行npm run build 测试方法: 运行npm run test
  • 它提供VGA输出和PS / 2键盘输入。 它还提供了FTDI Basic串行仿真。 它被设计为可作为MC68B50 ACIA器件(标准RC2014串行模块)运行,因此可以在不修改流通的标准ROM的情况下使用它。 图片 RC2014的用户体验模块-...
  • dicom浏览器

    2014-06-08 22:41:06
    ◎可以自由布局浏览图像 同时支持病人的多次检查 多序列比较 ◎ 被选择的检查可以通过缩略显示 这些缩略包含序列 影像或者一个序列的子集 ◎ 具有基本影像处理功能:zoom pan inverse fit rotate reverse ...
  • WonderGUI与其他GUI工具包的不同之处在于它没有标准的外观和感觉,而是通过您设计的小部件和布局使您自己的独特用户界面栩栩如生。 还构建了WonderGUI,可轻松集成到现有代码库中。 它不会运行您的主循环,初始化...
  • visio教程PDF

    热门讨论 2010-05-17 23:56:22
    1.5 标准的SmartShape模板 1.5.1 Block Diagrams 1.5.2 Flowcharts 1.5.3 Forms and Charts 1.5.4 Maps 1.5.5 Network Diagrams 1.5.6 Office Lavout 1.5.7 Organization Charts 1.5.8 ...
  • Visio 2000 技术大全

    2010-05-01 13:38:29
    1.5 标准的SmartShape模板 1.5.1 Block Diagrams 1.5.2 Flowcharts 1.5.3 Forms and Charts 1.5.4 Maps 1.5.5 Network Diagrams 1.5.6 Office Lavout 1.5.7 Organization Charts ...
  • 无论简要要求如何,您都可以依靠 Affinity Publisher 来处理您期望的所有标准文件类型,让您可以自由地创建最雄心勃勃,内容丰富的组合设计,从多个来源中提取栅格或矢量资源。 微调您的图像 确保您的图像与布局的...
  • PACS浏览器

    2014-06-07 15:46:42
    ◎可以自由布局浏览图像、同时支持病人的多次检查、多序列比较。 ◎ 被选择的检查可以通过缩略显示,这些缩略包含序列、影像或者一个序列的子集。 ◎ 具有基本影像处理功能:Zoom、Pan、Inverse、Fit、Rotate...
  • 本文档介绍了如何获取键盘输入转化为Android actions,以及如何可以自定义键的布局和重点字符映射到自己的设备相匹配的需要。 Android使用Linux操作系统的标准输入设备事件(/ dev/event0)和驱动在linuxlinux/...

    •功能

    •关键位置图

    •关键字符映射

    •实现您自己的驱动程序(驱动程序模板)

    •示例实现

    本文档介绍了如何获取键盘输入转化为Android actions,以及如何可以自定义键的布局和重点字符映射到自己的设备相匹配的需要。

    Android使用Linux操作系统的标准输入设备事件(/ dev/event0)和驱动在linuxlinux/input.h内核头文件描述。欲了解更多有关标准的Linux驱动程序的信息输入,请http://kernel.org seeLinux输入驱动。

    功能

    Android的输入设备是围绕事件中断或轮询例程捕获特定于设备的scancode,并将其转换为标准的形式可以接受的Linux操作系统(如input.h定义),然后input_event()将其传递给内核。

    该键盘映射驱动的其他主要功能是建立一个probe功能,设置了中断或轮询功能,处理硬件的初始化,并用input_register_devic()关联输入子系统。

    下表描述了所需的步骤,从键盘输入转换为application action

    Step

    Action

    Explanation

    1.

    Window manager reads key event from Linux keyboard driver.

    Events are typically positional. For example, the top-left position on a keypad returns 16 regardless of whether that key is printed with a Q (as on a QWERTY keypad) or an A (as on an AZERTY keypads). This first conversion by the Linux Keyboard Driver yields a scancode (for example, 16).

    2.

    Window manager maps scancode to keycode.

    When the window manager reads a key event out of the driver, it maps the scancode to a keycode using a key layout map file. Typically, the keycode is the primary symbol screen-printed on a key. For example,KEYCODE_DPAD_CENTERis the center button on the five-way navigation control. Even though ALT + G generates a "?" character,KEYCODE_Gis the keycode.

    3.

    Window manager sends both the scancode and the keycode to the application.

    Both the scancode and keycode are handled by the view with focus. How the application interprets both depend on the application.

    Key Layout Map

    选择一个Key Layout Map

    Key Layout是安装在/system/usr/keylayout/data/usr/keylayout.

    对于每一个键盘设备xxx,设置android.keylayout.xxx系统属性(参见帮助设置系统属性的建立新的Device)。如果你不指定一个keylayout文件,机器人将默认为/system/usr/keylayout/qwerty.kl

    文件格式

    Key layout maps都存储在设备的UTF - 8文本文件,并具有以下特点:

    Comments:英镑符号(#)表示注释,一行英镑的符号后字符被忽略。

    Whitespace:所有的空行被忽略。

    Key definitionsKey definitions遵循语法key SCANCODE KEYCODE [FLAGS...], SCANCODE是一个数字,KEYCODE是在特定keylayout文件定义。(android.keylayout.xxx),和潜在的FLAGS 定义如下:

    ØSHIFT:在按下时,shift键修饰符设置

    Ø ALT:当按下时,Alt键修饰符设置

    ØCAPS:在按下时,大写锁定键修饰符设置

    ØWAKE:当这个键被按下,而该设备是睡着了,器件将唤醒和key事件被发送到应用程序。

    ØWAKE_DROPPED:当这个键被按下,而该设备是睡着了,器件将唤醒和key事件不会得到发送到应用程序。

    Key Layout Map的一个范例文件

    下面的代码来自android/src/device/product/generic/tuttle2.kl,是一个完整的Key Layout Map示例文件:

    # Copyright 2007 Google Inc.
    key 2 1
    key 3 2
    key 4 3
    key 5 4
    key 6 5
    key 7 6
    key 8 7
    key 9 8
    key 10 9
    key 11 0
    key 158 BACK WAKE_DROPPED
    key 230 SOFT_RIGHT WAKE
    key 60 SOFT_RIGHT WAKE
    key 107 ENDCALL WAKE_DROPPED
    key 62 ENDCALL WAKE_DROPPED
    key 229 MENU WAKE_DROPPED
    key 59 MENU WAKE_DROPPED
    key 228 POUND
    key 227 STAR
    key 231 CALL WAKE_DROPPED
    key 61 CALL WAKE_DROPPED
    key 232 DPAD_CENTER WAKE_DROPPED
    key 108 DPAD_DOWN WAKE_DROPPED
    key 103 DPAD_UP WAKE_DROPPED
    key 102 HOME WAKE
    key 105 DPAD_LEFT WAKE_DROPPED
    key 106 DPAD_RIGHT WAKE_DROPPED
    key 115 VOLUME_UP
    key 114 VOLUME_DOWN
    key 116 POWER WAKE
    key 212 SLASH
    key 16 Q
    key 17 W
    key 18 E
    key 19 R
    key 20 T
    key 21 Y
    key 22 U
    key 23 I
    key 24 O
    key 25 P
    key 30 A
    key 31 S
    key 32 D
    key 33 F
    key 34 G
    key 35 H
    key 36 J
    key 37 K
    key 38 L
    key 14 DEL
     
    key 44 Z
    key 45 X
    key 46 C
    key 47 V
    key 48 B
    key 49 N
    key 50 M
    key 51 COMMA
    key 52 PERIOD
    key 28 NEWLINE
     
    key 56 ALT_LEFT
    key 42 SHIFT_LEFT
    key 215 AT
    key 57 SPACE
    key 53 SLASH
    key 127 SYM
    key 100 ALT_LEFT
    key 399 GRAVE

    Key Character Map

    选择一个Key Character Map

    关键字符映射安装在system/usr/keychars and /data/usr/keychars.

    对于每一个键盘设备xxx,设置android.keychar.xxx系统属性所希望的keychar文件的完整路径。如果你不指定一个keychar文件,Android 将默认为/system/usr/keychar/qwerty.kl.

    文件格式

    Key character map都存储在作为二进制资源设备,以减少加载时间。Key character map有以下特点:

    Comments:英镑符号(#)表示注释,一行英镑的符号后字符被忽略。

    Whitespace:所有的空行被忽略。

    Column definitions:列定义,是遵照语法列MODIFIERS [...], MODIFIERS定义如下:

    Character in MODIFIERS

    Corresponding bit in the modifiers

    O

    no modifiers

    S

    MODIFIER_SHIFT

    C

    MODIFIER_CONTROL

    L

    MODIFIER_CAPS_LOCK

    A

    MODIFIER_ALT

    · Key character file: Key definitions有语法 key SCANCODE CHARACTER [...] 其中SCANCODE是一个数字和字符值或者使用UTF - 8的引号字符(for example, "a")或一个数字值,strtol可以解析。

    ·一个Key Character Map示例文件

    ·下面的代码来自android/src/device/product/generic/tuttle2.kcm,代表一个完整的key character file

    ·该行表示什么类型的键盘类设备实现。可能的类型包括:

    · NUMERIC:一个数字(12键)键盘。

    · Q14:键盘,其中包括所有的字母,但一键多个字母除外。

    · QWERTY键盘:与所有字母和可能的数字键盘。此选项适用于所有完整的键盘配置,如AZERTY.

    # Copyright 2007 Google Inc.
    [type=QWERTY]
    # keycode base caps fn caps_fn number display_label
    A 'a' 'A' '%' 0x00 '%' 'A'
    B 'b' 'B' '=' 0x00 '=' 'B'
    C 'c' 'C' '8' 0x00E7 '8' 'C'
    D 'd' 'D' '5' 0x00 '5' 'D'
    E 'e' 'E' '2' 0x0301 '2' 'E'
    F 'f' 'F' '6' 0x00A5 '6' 'F'
    G 'g' 'G' '-' '_' '-' 'G'
    H 'h' 'H' '[' '{' '[' 'H'
    I 'i' 'I' '$' 0x0302 '$' 'I'
    J 'j' 'J' ']' '}' ']' 'J'
    K 'k' 'K' '"' '~' '"' 'K'
    L 'l' 'L' ''' '`' ''' 'L'
    M 'm' 'M' '>' 0x00 '>' 'M'
    N 'n' 'N' '<' 0x0303 '<' 'N'
    O 'o' 'O' '(' 0x00 '(' 'O'
    P 'p' 'P' ')' 0x00 ')' 'P'
    Q 'q' 'Q' '*' 0x0300 '*' 'Q'
    R 'r' 'R' '3' 0x20AC '3' 'R'
    S 's' 'S' '4' 0x00DF '4' 'S'
    T 't' 'T' '+' 0x00A3 '+' 'T'
    U 'u' 'U' '&' 0x0308 '&' 'U'
    V 'v' 'V' '9' '^' '9' 'V'
    W 'w' 'W' '1' 0x00 '1' 'W'
    X 'x' 'X' '7' 0xEF00 '7' 'X'
    Y 'y' 'Y' '!' 0x00A1 '!' 'Y'
    Z 'z' 'Z' '#' 0x00 '#' 'Z'
    COMMA ',' ';' ';' '|' ',' ','
    PERIOD '.' ':' ':' 0x2026 '.' '.'
    AT '@' '0' '0' 0x2022 '0' '@'
    SLASH '/' '?' '?' '/' '/' '/'
    SPACE 0x20 0x20 0x9 0x9 0x20 0x20
    NEWLINE 0xa 0xa 0xa 0xa 0xa 0xa
    # on pc keyboards
    TAB 0x9 0x9 0x9 0x9 0x9 0x9
    0 '0' ')' ')' ')' '0' '0'
    1 '1' '!' '!' '!' '1' '1'
    2 '2' '@' '@' '@' '2' '2'
    3 '3' '#' '#' '#' '3' '3'
    4 '4' '$' '$' '$' '4' '4'
    5 '5' '%' '%' '%' '5' '5'
    6 '6' '^' '^' '^' '6' '6'
    7 '7' '&' '&' '&' '7' '7'
    8 '8' '*' '*' '*' '8' '8'
    9 '9' '(' '(' '(' '9' '9'
    GRAVE '`' '~' '`' '~' '`' '`'
    MINUS '-' '_' '-' '_' '-' '-'
    EQUALS '=' '+' '=' '+' '=' '='
    LEFT_BRACKET '[' '{' '[' '{' '[' '['
    RIGHT_BRACKET ']' '}' ']' '}' ']' ']'
    BACKSLASH '/' '|' '/' '|' '/' '/'
    SEMICOLON ';' ':' ';' ':' ';' ';'
    APOSTROPHE ''' '"' ''' '"' ''' '''
    STAR '*' '*' '*' '*' '*' '*'
    POUND '#' '#' '#' '#' '#' '#'
    PLUS '+' '+' '+' '+' '+' '+'

    资源二进制文件格式

    以上文件片断通过makekcharmap工具得到转化并作为build过程的一部分。您可以mmap这个文件,共享约4kB memory,在进程间使用,以尽量减少加载时间.

    Offset

    Size (bytes)

    Description

    0x00-0x0b

    The ascii value "keycharmap1" including the null character

    0x0c-0x0f

    padding

    0x10-0x13

    The number of entries in the modifiers table (COLS)

    0x14-0x17

    The number of entries in the characters table (ROWS)

    0x18-0x1f

    padding

    4*COLS

    Modifiers table. The modifier mask values that each of the columns in the characters table correspond to.

    padding to the next 16 byte boundary

    4*COLS*ROWS

    Characters table. The modifier mask values that each of the columns correspond to.

    实现自己的驱动程序(驱动程序模板)

    以下文件,pguide_events.c,说明如何实现一个Android键盘映射的驱动程序。

    /*
     * pguide_events.c
     *
     * ANDROID PORTING GUIDE: INPUT EVENTS DRIVER TEMPLATE
     *
     * This template is designed to an example of the functionality
     * necessary for Android to recieve input events. The PGUIDE_EVENT
     * macros are meant as pointers indicating where to implement the
     * hardware specific code necessary for the new device. The existence
     * of the macros is not meant to trivialize the work required, just as
     * an indication of where the work needs to be done.
     * 
    * Copyright 2007, Google Inc.
     * Based on goldfish-events.c
     *
     */
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #define PGUIDE_EVENTS_INTERRUPT do{} while(0)
    #define PGUIDE_EVENTS_PROBE do{} while(0)
    struct event_dev {
     struct input_dev *input;
     int irq;
    };
    static irqreturn_t pguide_events_interrupt(int irq, void *dev_id)
    {
     struct event_dev *edev = dev_id;
     unsigned type=0, code=0, value=0;
     /* Set up type, code, and value per input.h
     */
     PGUIDE_EVENTS_INTERRUPT;
     input_event(edev->input, type, code, value);
     return IRQ_HANDLED;
    }
    static int pguide_events_probe(struct platform_device *pdev)
    {
     struct input_dev *input_dev;
     struct event_dev *edev;
     
    printk("*** pguide events probe ***/n");
     edev = kzalloc(sizeof(struct event_dev), GFP_KERNEL);
     input_dev = input_allocate_device();
     /* Setup edev->irq and do any hardware init */
     PGUIDE_EVENTS_PROBE;
     if(request_irq(edev->irq, pguide_events_interrupt, 0,
     "pguide_events", edev) < 0) {
     goto fail;
     }
     
    /* indicate that we generate key events */
     set_bit(EV_KEY, input_dev->evbit);
     set_bit(EV_REL, input_dev->evbit);
     set_bit(EV_ABS, input_dev->evbit);
     /* indicate that we generate *any* key event */
     bitmap_fill(input_dev->keybit, KEY_MAX);
     bitmap_fill(input_dev->relbit, REL_MAX);
     bitmap_fill(input_dev->absbit, ABS_MAX);
     
    platform_set_drvdata(pdev, edev);
     input_dev->name = "pguide_events";
     input_dev->private = edev;
     input_dev->cdev.dev = &pdev->dev;
     
    input_register_device(input_dev);
     return 0;
    fail:
     kfree(edev);
     input_free_device(input_dev);
     
    return -EINVAL;
    }
    static struct platform_driver pguide_events_driver = {
     .probe = pguide_events_probe,
     .driver = {
     .name = "pguide_events",
     },
    };
    static int __devinit pguide_events_init(void)
    {
     return platform_driver_register(&pguide_events_driver);
    }
    static void __exit pguide_events_exit(void)
    {
    }
    module_init(pguide_events_init);
    module_exit(pguide_events_exit);
    MODULE_DESCRIPTION("Pguide Event Device");
    MODULE_LICENSE("GPL");

    示例实现

    以下假设为一个新的键盘设备安装:

    android.keylayout.partnerxx_keypad = /system/usr/keylayout/partnerxx_keypad.kl
    android.keychar.partnerxx_keypad = /system/usr/keychars/partnerxx.kcm

    下面的示例日志文件表明您已正确注册了新的键盘:

    I/EventHub( 1548): New device: path=/dev/input/event0 name=partnerxx_keypad id=0x10000 (of 0x1) index=1 fd=30
    I/EventHub( 1548): new keyboard input device added, name = partnerxx_keypad
    D/WindowManager( 1548): Starting input thread.
    D/WindowManager( 1548): Startup complete!
    I/EventHub( 1548): New keyboard: name=partnerxx_keypad 
    keymap=partnerxx_keypad.kl 
    keymapPath=/system/usr/keychars/partnerxx_keypad.kcm.bin
    I/ServiceManager( 1535): ServiceManager: addService(window, 0x13610)
    I/EventHub( 1548): Reporting device opened: id=0x10000, name=/dev/input/event0
    I/KeyInputQueue( 1548): Device added: id=0x10000, name=partnerxx_keypad, classes=1
    I/KeyInputQueue( 1548): Keymap: partnerxx_keypad.kl
    展开全文
  • 实例55 使用键盘控制移动276 实例56 事件过滤器实现动态图片按钮281 第11章 其他284 实例57 利用QSettings保存程序窗口状态285 实例58 利用QDataStream对文件进行存取290 实例59 改变鼠标指针形状293 实例60 改变...
  • 该软件的主要特点是能够为您提供真实的考试环境,其电脑小键盘布局与真实考试键盘完全对应,使您平时就能在考试环境中练习,因而能够轻松进入考试状态,在最短的时间内获得最佳的成绩。 具体功能如下:5 G+ L3 |4 L'...
  • 42. ________对象可以使用read方法从标准的输入设备(通常键盘)读取数据;__________对象可以使用print方法向标准输出设备(屏幕)输出显示。 答案:System.in ;System.out [考点范围] JAVA输入输出系统 43. 框架...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 164
精华内容 65
关键字:

标准键盘布局图