介绍 我工作的公司有很多产品都是用户需要的 密码或其他类型的安全代码。的 最近涉及键盘记录器的$ 4.2亿诈骗 吓坏了每个人,所以我们开始寻找替代技术来确保安全 访问敏感数据。尽管其中一些技术相当昂贵, 我想到了一种便宜的替代键盘输入的方法 这将很容易实现:一个屏幕键盘,其中用户 通过点击虚拟键盘上显示的键输入密码。 最简单的解释方式就是告诉你我的意思: Windows XP: Windows 2000: XKeyboard特性 XKeyboard提供以下功能: 所有键盘字符-两个Shift按钮是切换按钮 使用我的CXButtonXP类实现。 这允许访问所有字符 可在一个真正的键盘,包括特殊字符。 为了方便使用,在真正的键盘上的Shift键也导致 XKeyboard键被移动。 显示纯文本-用户可以显示纯文本的密码: 最小/最大密码长度-您可以指定密码的长度。 最近使用的(MRU)密码-你可以指定一个密码列表 最近使用的。与列表中的任何密码相似的密码 将被拒绝。虚拟函数checkmru口令()允许您这样做 自定义算法用于确定相似度。 对话框超时——您可以为对话框指定一个超时,这将迫使它关闭 后超时过期。这将防止对话框保持打开状态 编辑控件中的密码。如果超时,对话框返回代码 IDABORT。 只读编辑控件——您可以指定编辑控件应该是只读的。 如果不是只读的,用户可以通过在真实的键盘上输入密码 有点违背了目的。 大写/小写-您可以指定将密码转换为大写或小写, 或者让它保持不变。 特殊字符-你可以指定密码应该包括特殊字符 字符、数字或仅仅是字母数字字符。虚拟函数 CheckSpecial()允许您 自定义算法用于确定密码是否包含特殊字符。 字符串资源-所有由XKeyboard显示的消息是 包含在字符串资源中。 你可以指定显示空格键。不显示空格键 意味着不允许在密码中使用空格(即使在编辑控件中也是如此) 不是只读)。当空格不显示时,对话框的大小将会调整: CXKeyboard实现注意事项 从代码中可以看到,XKeyboard没有什么特殊之处。它 实现为一个带有常见键盘按键按钮的对话框。紧迫的要么 Shift键切换大写/小写(在这种情况下,也切换 特殊字符到“移位”字符)。 我做的一个决定是不使用复选框按钮(在“推”模式下)。 我不喜欢XP上按钮的主题化方式——当你按下按钮时 它会立即弹出显示非推入状态,直到您移动 光标离开按钮时,显示按下状态。所以我用了 新的XButtonXP控件代替。 XKeyboard使用两个定时器;如果设置了超时,则使用一个计时器 另一个定时器是用来检查如果shift键在真正的键盘上 按下。按下任何一个真正的shift键工作就像你所期望的- as 只要按住真正的shift键,XKeyboard就会显示移位 当真正的shift键被释放时,XKeyboard显示未移位 字符集。 CXKeyboard API CXKeyboard API包括: GetPassword()返回passwordSetPassword()设置编辑控制passwordGetShowText()返回的状态显示文本checkboxSetShowText()设置的状态显示文本checkboxGetShowSpacebar()返回TRUE,如果空格键visibleSetShowSpacebar()设置的可视性空格键(真实=可见)GetSpecial()返回枚举值的特殊字符settingSetSpecial()设置特殊字符enum valueGetMinLength()返回的最小长度passwordSetMinLength()设定了最低passwordGetMaxLength长度()返回的最小长度passwordSetMaxLength()设定了最低passwordGetCase长度()返回枚举值情况下settingSetCase()设置情况enum valueSetMRUPasswords()设置系统密码listClearMRUPasswords()清除系统密码listGetTimeout()返回超时secondsSetTimeout价值()在几秒钟内设置超时值;controlSetReadOnly()设置编辑控件(TRUE =只读)的只读状态如果密码在MRU列表中,则返回TRUE 如何使用 要将cx键盘集成到您的应用程序中,您首先需要添加以下文件到您的项目: XKeyboard.cpp XKeyboard.h XKeyboardRes.h XKeyboard.rc XButtonXP.cpp XButtonXP.h XThemeHelper.cpp XThemeHelper.h OddButton.cpp OddButton.h MemDC.h 您还需要添加XKeyboard。rc到你的项目的rc文件-去 查看|资源包括…在底部列表框中,向下滚动到结束。 插入#包括“XKeyboard。rc”之前# endif: 接下来,在适当的项目文件中包含头文件XKeyboard.h。 现在可以开始使用CXKeyboard了。 编译器的先决条件 XKeyboard要求 平台SDK编译。如果您得到一个关于DFCS_HOT存在的编译错误 如果未定义,则应该在stdafx中包含以下行。h,在任何头文件包括: 隐藏,复制Code
#define WINVER 0x0500 // needed by XButtonXP
调用XKeyboard 演示程序展示了如何调用XKeyboard: 隐藏,收缩,复制Code
// array of "most recently used" passwords CStringArray sa; sa.Add(_T("qwer")); sa.Add(_T("asdf")); sa.Add(_T("zxcv")); CPoint point; GetCursorPos(&point); CXKeyboard dlg(point.x, point.y-247); dlg.SetShowText(m_bShowText); dlg.SetMRUPasswords(sa); int n = _ttoi(m_strMinLength); if (n <= 0) n = 1; dlg.SetMinLength(n); dlg.SetMaxLength(_ttoi(m_strMaxLength)); dlg.SetTimeout(_ttoi(m_strTimeout)); dlg.SetSpecial((CXKeyboard::SPECIAL_CHARACTERS)m_nSpecial); dlg.SetShowSpacebar(m_bShowSpacebar); dlg.SetCase((CXKeyboard::XKEYBOARD_CASE)m_nCase); dlg.SetPassword(m_strPassword); //dlg.SetReadOnly(TRUE); int rc = dlg.DoModal(); if (rc == IDOK) { m_strPassword = dlg.GetPassword(); m_bShowText = dlg.GetShowText(); GetDlgItem(IDC_STATUS)->SetWindowText(m_strPassword); } else if (rc == IDABORT) { GetDlgItem(IDC_STATUS)->SetWindowText(_T("Dialog timed out")); } else { GetDlgItem(IDC_STATUS)->SetWindowText(_T("Dialog cancelled by user")); }
其他屏幕键盘实现 有一个微软的屏幕键盘(程序|配件|可访问性),已装运 使用Win2k和XP。微软授权该产品从 Madentec有限。 Click-N-Type是一种非常流行的免费屏幕键盘。 但是,这两种产品只能作为独立的可执行文件使用 Madentec站点提到有一个可用的SDK。 修订历史 版本1.0 - 2005年4月4日 首次公开发行 使用 这个软件是释放到公共领域。你可以以任何方式使用它 您喜欢,除了您不能出售此源代码。如果你对它进行修改或扩展, 请考虑在这里发布新的代码供大家分享。本软件提供 “现状”,没有明示或默示保证。我不承担任何责任的损害或 该软件可能造成的业务损失。 本文转载于:http://www.diyabc.com/frontweb/news5423.html