我正在使用按下Caps Lock键时激活的python程序,我希望能够在程序处于活动状态时打开/关闭大写锁定状态.
我尝试使用virtkey发送密钥,但它显然不起作用,因为密钥只是激活应用程序而不更改大写锁定状态.那么用python实现这一目标的最佳方法是什么?
我正在使用Ubuntu
我想就如何打开大写锁定一个具体的例子,如果它是关闭的.
我知道如何切换密钥,我一直在使用这个:
toolkit.setLockingKeyState(KeyEvent.VK_CAPS_LOCK, Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)
这将改变键的状态,无论它是打开还是关闭.但我想确保它在应用程序开始时处于启用状态.
(最终目标是让键盘LED以某些顺序闪烁,如果我有一定的起始状态,效果会更好.)
我写了一个小fetchmail脚本来检查远程服务器并在我收到新邮件时播放音频文件.当邮件可用时我还想点亮我的一个键盘灯,但我遇到了问题.我可以点亮滚动锁定灯:
/usr/bin/xset led named "Scroll Lock"
Run Code Online (Sandbox Code Playgroud)
但我不能以同样的方式点亮Caps Lock:
/usr/bin/xset led named "Caps Lock"
Run Code Online (Sandbox Code Playgroud)
我尝试用数字(1-6)指定键,但尽管改变了神秘的'LED掩码'(用'xset q'可见),我看到灯没有变化.
这是否因为我将Caps Lock键映射为另一个Ctrl而被打破?
在〜/ .Xmodmap中我得到了:
keycode 66 = Control_L
clear Lock
add Control = Control_L
Run Code Online (Sandbox Code Playgroud)
我不想切换大写锁,只是光.有没有办法做到这一点?
这是在x86 kubuntu清晰机器上,但我稍后将迁移到debian.我在python守护程序中以非特权用户身份运行脚本.以root身份运行相同的脚本将不起作用,因为fetchmail是为我自己配置为用户的.最后,这都是在tmux会话中运行的.
当我开始这个过程时,我读到了关于setleds但它似乎仅限于非x会话中的终端.
以root身份登录并运行'setleds -D + caps </ dev/tty7'可以正常工作,但运行'sudo setleds -D + caps </ dev/tty7'会给我一个权限被拒绝错误.
xset命令似乎非常适合我的应用程序,它只是拒绝更改Caps Lock指示灯.
在Vim中编辑代码时,我会在ALL CAPS中编写内容时使用大写锁定.但是,当我完成大写部分时,我常常忘记关闭大写锁定.这导致没有痛苦的结束(因为,即j向下移动,但J将当前行与下面的行连接).
通常,我想在退出插入模式时关闭大写锁定.如何在我的.vimrc中添加一些内容,以便在退出插入模式时关闭大写锁定?或者,如果我在退出插入模式时有大写锁定,我怎么能在我的.vimrc中添加一些内容以便它会提醒我(状态行?嘟嘟声?任何警报都没问题)?
谢谢!
好吧,在此之前被标记为可能重复,我已经尝试了以下代码:
Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)
Run Code Online (Sandbox Code Playgroud)
它总是对我不利[见下文].有人可以确认这是否应该有效,我是在滥用它,或者它是否已被破坏?如果它实际上已经坏了,有没有人有更好的使用方法?
编辑:
好吧,刚刚发现了更多的东西.它似乎只是返回我的程序启动时的状态.如果我用它启动程序,它会打开,反之亦然.这是我的代码:
while (true) {
boolean isOn = Toolkit.getDefaultToolkit().getLockingKeyState(
KeyEvent.VK_CAPS_LOCK);
System.out.println("Caps lock is now: " + (isOn ? "ON" : "off"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
Run Code Online (Sandbox Code Playgroud)
而这总是打印出它开始的任何东西
(例如,如果我开始大写锁定,即使我立即将其关闭,它也会打印出来:
大写锁定现在是:开
大写锁定现在是:开
大写锁定现在是:开
大写锁定现在是:开
等等,如果我从它开始,它将打印出来,无论如何)
如何开启或关闭Caps Lock?我试图搜索它,但我发现的是如何切换或打开/关闭它与我正在寻找的完全相反.
我试图在C++和Delphi中都这样做.
请帮忙
我真的不喜欢用Caps Lock写的人.除了厌恶之外,它还污损了整个应用程序.我想知道如何防止用户使用大写锁定编写所有字符.由于特殊名称和缩写,我无法强制所有文本为小写.我应该使用什么逻辑?
这是我想要完成的:
我想要这样做的原因通常是我发现自己向下看按下正确的X/C/V键,因为它们彼此相邻(至少在QWERTY键盘上).
如何在标准键盘(使用Windows)上执行此操作,以便它适用于整个系统,并且对所有应用程序(包括Windows资源管理器)都是透明的?如果使用标准键盘无法实现,您认为可以使用任何"可编程数字键盘"吗?
在上面,"透明"我的意思是"应用程序永远不应该知道这个键击被翻译.它只获得常规的Ctrl+ X/ C/ V代码,因此它没有任何问题".
PS.不确定所有适合此问题的标记,因此可以随意添加更多标记.
解决了.更新:感谢@Jonno_FTW向我介绍AutoHotKey.我通过在My Documents文件夹中的默认AutoHotKey.ahk文件中添加以下AHK脚本来管理所有这三个要求:
Ctrl & CapsLock::
Send ^x
Return
CapsLock::
If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 1000)
Send ^v
Else
Send ^c
Return
Run Code Online (Sandbox Code Playgroud)
那很简单!
没有完全解决.更新: 上述工作在记事本中,但不在资源管理器(例如复制文件)或MS Office(甚至文本复制不起作用).因此,我需要更多地了解AutoHotKey或其他解决方案.当我找到解决方案时,会在这里发布解决方案 在此期间,如果有人可以让AutoHotKey为我需要的一切工作,请回复!
全部解决了.更新: 我所要做的就是将大写"C"/ X/Z改为小写"c"/ x/z.所以发送^ C成为发送^ c.它现在适用于包含Windows资源管理器的所有程序!修复上面的代码以反映此更改.
在我的研究中,我发现了如何在按下大写键时检测大写锁定。但是,即使在未触摸键的情况下,我也想知道大写状态。
示例:alert(ui.Keyboard.capslock) // 将返回 true 或 false;
谢谢!
许多帖子询问如何将 CAPS LOCK 键映射到 ESC。我知道该怎么做,但是当我这样做时,我会失去大写锁定功能,因为 ESC 仍然映射到转义。我想将转义键交换为大写锁定键(按大写锁定键转义并按转义键大写锁定)。
没有通过 设置重新映射转义键: