julia - 测试是否在 Julia 中按下了一个键

标签 julia shortcut keyevent

我想使用键盘快捷键 Ctrl+Shift+H 启动 julia 脚本。

当脚本启动时,CtrlShift 键可能仍处于按下状态(取决于我移开手指的速度)。

我想确保在执行脚本的其余部分之前释放这两个键。为此,我需要测试按键是否被按下。

请注意,在释放键时触发事件是不够的,因为在脚本启动时可能不会按下键。

我找到了几个引用来检测何时在 Julia 中按下了一个键,但我没有找到一个来测试当前是否按下了一个键。

你知道我该怎么做吗?

这是我为什么要这样做的一个最小示例。 你可以找到here一个 cnee 格式的文件,可以在具有焦点的窗口中写入“azerty”。如果您在终端中键入以下命令,则会按预期在其中键入“azerty”:

cnee --replay  -sp 0 -f ./recorded_macro.xnl

为了在任何窗口(不仅仅是终端)中写入“azerty”,我创建了一个键盘快捷键 Ctrl+Shift+H 来执行此命令。如果我使用快捷方式,则在执行命令时可能会按下 CtrlShift 键(除非我非常快速地使用快捷方式)而不是键入“azerty", 获得焦点的窗口将得到 Ctrl+Shift+a, Ctrl+Shift+z, Ctrl+Shift+e, Ctrl+Shift+rCtrl+Shift+tCtrl+Shift+y 将在窗口中触发操作但不会写入“azerty” ".

因此,我想改为使用此快捷方式启动 python 脚本,该快捷方式等待 CtrlShift 在执行 cnee< 之前未按下命令。再次注意,等待键与监听器一起释放不是解决方案,因为键 CtrlShift 可能不会在 python 脚本开始时按下,如果我快速使用快捷方式(因此在执行我不想要的 cnee 命令之前,我必须再次按下 CtrlShift)。

最佳答案

下面的 Gtk 程序会检测在程序启动或获得焦点之前已经按下的 shift、control 和 alt 的释放。请注意,至少我的键盘似乎并不总能检测到多次击键,因此根据您的键盘,您可能只需要检测其中一个释放。

using Gtk

function keypresswindow()
    txt = "Press and Release a Key"
    state = ""
    win = GtkWindow("Key Release Test", 500, 30) |> (GtkFrame() |> ((vbox = GtkBox(:v)) |> (lab = GtkLabel(txt))))
    function keyreleasecall(w, event)
        event.keyval == 65505 && (state *= "SHIFT ")
        event.keyval == 65507 && (state *= "CONTROL ")
        event.keyval == 65513 && (state *= "ALT ")
        set_gtk_property!(lab, :label, "You have released: $state")
    end
    signal_connect(keyreleasecall, win, "key-release-event")

    cond = Condition()
    endit(w) = notify(cond)
    signal_connect(endit, win, :destroy)
    showall(win)
    wait(cond)
end

keypresswindow()

关于julia - 测试是否在 Julia 中按下了一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64651260/

相关文章:

function - 如何在 julia 中的其他函数中使用函数中的表达式

autocomplete - Sublime Text 2 自动完成快捷方式不起作用

java - 如何使 ActionEvent 和 KeyEvent 触发相同的操作?

Java:在没有 KeyListener 或使用任何其他自定义类的情况下捕获按键事件

julia - 将 python 类移植到 Julialang

io - 使用相同的 key 写入现有的 Julia 数据文件

windows-7 - 所有用户的任务栏图标

c# - 触发表单按键事件

dataframe - 如何将缺失值插入到 Julia 的数据框中

Bash 引用同一行中的先前参数