Delphi 2010 Enterprise
如何在显示虚拟键盘时自动打开CapsLock.
是否可以在网页的页面加载时检查Scroll Lock,Num Lock和Caps Lock的状态?我已经找到了使用JavaScript在按键后检查的方法,但这不是我要问的.
CapsLock似乎是重新映射的两个最棘手的键之一(另一个是电源按钮).
我可以全局拦截NSEvent-s:
_eventTap = CGEventTapCreate( kCGHIDEventTap,
kCGHeadInsertEventTap,
kCGEventTapOptionDefault,
CGEventMaskBit( kCGEventFlagsChanged ),
(CGEventTapCallBack)_tapCallback,
(__bridge void *)(self));
:
Run Code Online (Sandbox Code Playgroud)
但是,我没有为每个键上/下获得一个事件.实际发生的是:
(CapsLock的初始状态关闭)
按键:NSSystemDefined:40a00 NSSystemDefined:40b00(此时绿灯亮)
密钥:NSSystemDefined:40b00
按键:NSSystemDefined:40a00(此时绿灯熄灭)
关键:(没什么)
所以我无法在这个级别进行映射.
但我想我可以使用IOKit监视较低级别,IOKit检测每个键盘按键向下/向上事件,然后在此级别吃掉CAPSLOCK事件(通过返回NULL):
- (CGEventRef)processEvent:(CGEventRef)cgEvent
{
NSEvent* event = [NSEvent eventWithCGEvent:cgEvent];
NSUInteger modifiers = [event modifierFlags] &
( NSCommandKeyMask | NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask | NSAlphaShiftKeyMask );
NSUInteger flags_changed = _modifiers ^ modifiers;
if( flags_changed & NSAlphaShiftKeyMask )
{
NSLog( @"Eating CAPSLOCK" );
return NULL;
}
_modifiers = modifiers;
:
Run Code Online (Sandbox Code Playgroud)
但是,这并不能阻止CapsLock做它的事情(即大写字母).
我甚至尝试从处理程序中的每个键盘事件中删除CapsLock修饰符标志:
if( modifiers & …Run Code Online (Sandbox Code Playgroud) 因此,我一直在研究使用JavaScript / jQuery的表单大写锁定检测解决方案。stackoverflow上有一条巨大的线程可提供许多解决方案。但是唯一的问题是他们不检查是否直接按下了Caps Lock。它们检测是否输入了大写字母,并且没有按下Shift键。这样做的缺点是,在用户开始输入表单之前,我的Caps Lock警告消息不会打开/关闭,这几乎不是最佳选择。这是我的代码。
document.onkeypress = function(e){
e = e || window.event;
var s = String.fromCharCode(e.keyCode || e.which);
if (s.toUpperCase() === s && !e shiftKey) {
capsWarning.style.visibility = 'visible';
} else {
capsWarning.style.visibility = 'hidden';
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法,当我按下Caps Lock键时,可以使用JavaScript触发Caps Lock消息?就是说,在我开始输入文字之前,不要延迟切换消息吗?
最好是我更喜欢纯JavaScript解决方案而不是JQuery。尽管如果您认为jQuery在这里真的会非常好,请说为什么,我可以向我的同事施加压力,让我在这里包括它; o
我试图在按住两个 Shift 按钮一秒钟时打开/关闭大写锁定。我尝试过使用 virtkey 模块,但它不起作用。不过,该模块确实适用于其他键,所以我认为我没有错误地使用该模块。
有人有办法做到这一点吗?
需要明确的是,我想要实际打开/关闭大写锁定,而不仅仅是 LED。
谢谢!
我正在使用Quartz CGEventTap尝试全局拦截封锁按下并阻止它们(让它们做一些有用的事情).我成功地检测到了死锁,但到目前为止还无法阻止它们.我的代码(源自此 stackoverflow答案)是这样的:
eventTap = CGEventTapCreate(kCGHIDEventTap,
kCGTailAppendEventTap,
kCGEventTapOptionDefault,
eventMask,
myCGEventCallback,
&oldFlags);
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef theEvent, void *refcon)
{
CGEventFlags *oldFlags = (CGEventFlags *)refcon;
switch (type)
{
case kCGEventFlagsChanged:
{
CGEventFlags newFlags = CGEventGetFlags(theEvent);
CGEventFlags changedFlags = *oldFlags ^ newFlags;
*oldFlags = newFlags;
if (changedFlags == 65536)
{
NSLog(@"Capslock pressed. Let's not return the event");
return NULL;
}
break;
}
default:
break;
}
NSLog(@"Different modifier than capslock. …Run Code Online (Sandbox Code Playgroud) 对于这样一个基本问题,我很惊讶我找不到任何搜索...
无论如何,我用Python制作了一个curses应用程序,它有助于解决某个DSiWare游戏的难题.有了它,你可以拼图并单独检查它的组成部分.这些键qweasdzx用于绘制瓷砖(按键排列在某种调色板中).在按住Shift的同时按下其中一个按钮会突出显示该颜色的图块.我无法要求更自然的控制方案.
所以很遗憾,Shift再一次给了我一些问题(上次我遇到Shift问题时,我获得了Tumbleweed徽章).虽然这次,问题或多或少是Caps Lock,它通过反转功能完全搞砸了我的程序.
如何使用curses检测Python中Caps Lock的状态?
编辑:如果你打算建议使用一个单独的模块,我可能应该提醒你,curses - 因此我的程序 - 在UNIX领域.
铬 (52):
当打开大写锁定时 - 仅触发 keydown(keyUp 或 keyPress 中没有事件)
当关闭大写锁定时 - 仅触发 keyup(keyDown 或 keyPress 中没有事件)
火狐 (46):
对于大写锁定打开和关闭,仅触发 keyDown 事件(无 keyUp 或 keyPress)
我在这里阅读了有关 keyCodes 和事件的信息http://www.quirksmode.org/js/keys.html以及 MDN 中的内容https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent /keyCode, aaa 和这里http://unixpapa.com/js/key.html
但以上链接都没有讨论这种奇怪的行为。这是预期的吗?如果是这样,有什么更简单的方法可以处理吗?
我有这个代码用于将密钥添加到密码.如果capslock打开则会触发.我从如何判断是否使用JavaScript开启大写锁定?
$("input[type='password']").keypress(function(e) {
var $warn = $(this).next(".capsWarn"); // handle the warning mssg
var kc = e.which; //get keycode
var isUp = (kc >= 65 && kc <= 90) ? true : false; // uppercase
var isLow = (kc >= 97 && kc <= 122) ? true : false; // lowercase
// event.shiftKey does not seem to be normalized by jQuery(?) for IE8-
var isShift = ( e.shiftKey ) ? e.shiftKey : ( (kc == 16) ? true …Run Code Online (Sandbox Code Playgroud) I'm apparently not the only one who wants to know (How can I change modifier keys in "System Preferences > Keyboard > Modifier Keys..."). I've tried watching the System Preferences app with dtruss, but that doesn't seem to be possible on 10.10.3 (which is what I'm on right now), and I'm not even sure that that would be at all useful if System Preferences is just getting settings from cfprefsd. Watching cfprefsd with dtruss doesn't seem to catch …
我正在创建一个需要使用 USB 键盘的应用程序。(普通触摸屏键盘已被禁用,不会显示。)当用户第一次安装应用程序时,他们需要创建一个四位数的 Pin。Pin 的输入字段受密码保护(因为每次输入新数字时都会出现点)。Pin UITextField 设置为仅四位数字除外。任何其他字母/数字都不会添加到 UITextField。这是它的样子——
这里的问题是当用户单击 USB 键盘上的大写锁定按钮时,大写锁定图像将出现在 UITextField 中。但是,该字段只接受数字,所以我不想在文本字段中显示大写锁定图像。有没有办法删除大写锁定图像?
我尝试了 BIOS 中断 INT 16h, 02h,但 Emu8086 不支持它。有人可以教我如何直接获取内存位置 0:0417h 或其他支持 BIOS 中断 16h 02h 的汇编器上的 Capslock 状态吗?我已经尝试过 MASM,但进展不顺利。抱歉我的英语不好
capslock ×12
javascript ×4
keyboard ×2
macos ×2
python ×2
assembly ×1
cgeventtap ×1
curses ×1
delphi ×1
delphi-2010 ×1
dom-events ×1
emu8086 ×1
events ×1
forms ×1
html ×1
ios ×1
jquery ×1
linux ×1
num-lock ×1
pageload ×1
passwords ×1
preferences ×1
scroll-lock ×1
swift ×1
uitextfield ×1