热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将字符转换为键盘码的代码

以下这段代码可以将字符串转换为键盘码,以备需要时用到。-(int)keyCodeForCharacter:(NSString*)character{if(![characterlength

以下这段代码可以将字符串转换为键盘码,以备需要时用到。


- (int)keyCodeForCharacter: (NSString*)character {
if(![character length]) return -1;

char code;
BOOL shift, alt;
if(Ascii2Virtual( (char)[character characterAtIndex: 0], &shift, &alt, &code)) {
return code;
}
return -1;
}


BOOL Ascii2Virtual(char pcar, BOOL *pshift, BOOL *palt, char *pkeycode)
{
KeyboardLayoutRef keyboard;
const void *keyboardData; // keyboard layout data
UInt16 nbblocs;
char *modblocs, *blocs, *deadkeys;
int ix, ifin, numbloc, keycode;

BOOL shift, alt;
// get the current keyboard
if(KLGetCurrentKeyboardLayout(&keyboard)) return NO;
// get the description of the current keyboard layout
if(KLGetKeyboardLayoutProperty(keyboard, kKLKCHRData, &keyboardData)) return NO;
// get pointer early numbers of blocks for each combination of modifiers
modblocs = ((char *)keyboardData) + 2;
// get number of blocks keycode->ascii
nbblocs = *((UInt16 *)(keyboardData + 258));
// get pointer early blocks keycode-> ascii
blocs = ((char *)keyboardData) + 260;
// determining the size of all tables keycode-> ascii a scanner
ifin = nbblocs*128;
// determining pointer early in the tables of dead keys
deadkeys = blocs+ifin;
// Now it runs blocks keycode-> ascii to find the car ascii
for (ix=0; ix {
if (blocs[ix]==pcar)
{

// found ascii value: now we must determine which block it is
keycode = ix & 0×7f; // 0111 1111 mask
numbloc = ix >> 7;
break;
}
}

// not found: bail out (error)
if (ix >= ifin) return NO;

// from block number, we must find the combination of modifiers using this block
for (ix=0; ix<15; ix++)
{
// it does not address whether the modifiers are not "capital" and "option"
if (ix&1 || ix&4) continue;
// Combining modifiers found for the block
if (modblocs[ix]==numbloc)
{
shift = (ix&2) ? YES : NO;
alt = (ix&8) ? YES : NO;
break;
}
}
// combination modifiers not found: bail
if (ix>=15) return NO;
// save our parameters
*pkeycode=keycode;
*pshift=shift;
*palt=alt;

return YES;
}



推荐阅读
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • Android应用盈利广告平台的嵌入方法详解
    一、如何学习Androidandroid开发(这里不提platform和底层驱动)你需要对Java有个良好的基础,一般我们用Eclipse作为开发工具。对于过多的具体知识详细介绍我这里不展开,我 ... [详细]
author-avatar
蚊子爱的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有