小编tin*_*ino的帖子

使用python xlib全局捕获,忽略和发送keyevent,识别虚假输入

我想在普通键盘上实现关键的和弦,我想我使用的是python xlib.为了使这个工作,程序必须全局吞下所有的关键事件,然后才允许它们通过.

我目前的测试只是抓住了"1"键.如果按下该键,它将调用一个处理程序,该处理程序通过xtest.fake_input将"x"发送到聚焦窗口.因为我只抓住"1"键,不应该有问题吧?但不知何故,处理程序再次被调用,因为"x"被按下了.事实上,当我输入"1"时,程序正在听所有键.这可能与调用有关

display.allow_events(X.ReplayKeyboard, X.CurrentTime)
Run Code Online (Sandbox Code Playgroud)

处理完一个事件后,如果我不这样做,一切都会冻结.

对于最终的程序,监听行为的变化并不真正相关,但我必须能够区分假事件和用户事件.为了做到这一点,我只是快速转发display.next_event(),但这并不理想,因为用户可能会在那个确切的时刻打字而且这些击键会丢失.

我尝试在发送和清空事件队列期间释放keygrab

display.flush()
display.sync()
Run Code Online (Sandbox Code Playgroud)

但那没有做任何事情.

所以,任何想法如何识别或忽略虚假输入事件以及为什么我突然听到所有按键(和发布)?

xlib非常令人沮丧.

from Xlib.display import Display
import Xlib
from Xlib import X
import Xlib.XK
import sys
import signal 

display = None
root = None

def handle_event(aEvent):
    print "handle!"
    send_key("x")

def send_key(emulated_key):

    global display,root
    print "send key"
    # ungrabbing doesnt help
    root.ungrab_key(10,X.AnyModifier) 
    window = display.get_input_focus()._data["focus"]
    # Generate the correct keycode
    keysym = Xlib.XK.string_to_keysym(emulated_key)
    keycode = display.keysym_to_keycode(keysym)
    # Send a fake keypress via xtestaaa
    Xlib.ext.xtest.fake_input(window, Xlib.X.KeyPress, keycode)
    Xlib.ext.xtest.fake_input(window, Xlib.X.KeyRelease, …
Run Code Online (Sandbox Code Playgroud)

python keyboard input xlib keylogger

5
推荐指数
1
解决办法
4104
查看次数

python xlib xgrabkey keyrelease 事件未触发

我想用 python xlib 捕获 keydown 和 keyup 事件,但是当同时按下某些键时,keyup 事件会消失。

如果同时释放 2 个或更多键,则将有 2 个或更多按键事件,但只有 1 个按键释放事件。

为此,甚至不必同时释放键,例如,如果您快速输入此序列:

  1. 按A
  2. 按 B
  3. 释放A
  4. 版本B

将只为 A 产生 1 个密钥释放

  1. 按A
  2. 按 B
  3. 版本B
  4. 释放A

将产生 2 个 keyreleases

from Xlib import X,XK
from Xlib.display import Display
import signal,sys

root = None
display = None

def grab_keyname(n):
    global root
    keysym = XK.string_to_keysym(n)
    keycode = display.keysym_to_keycode(keysym)
    root.grab_key(keycode, X.AnyModifier, False,X.GrabModeSync, X.GrabModeAsync)

def main():
    # current display
    global display,root
    display = Display()
    root = display.screen().root


    root.change_attributes(event_mask …
Run Code Online (Sandbox Code Playgroud)

python input xlib

5
推荐指数
1
解决办法
865
查看次数

javascript 模板字符串中的默认值

有没有办法访问 javascript 模板字符串引擎来为未定义的变量提供默认值?

console.log(`this variable is undefined: ${x}`) 
// throws ReferenceError

// but i want to generate something like this:
"this variable is undefined: <warning! undefined variable>"
Run Code Online (Sandbox Code Playgroud)

这也可以:

function tag(strings,...values){
   // values[i] should be "undefined" if this variable is undefined
}
tag`${x}`
Run Code Online (Sandbox Code Playgroud)

如果那是不可能的,是否有一个模板字符串引擎可以完全满足 javascript 的功能并具有此功能?

javascript template-strings

5
推荐指数
1
解决办法
3393
查看次数