标签: keyboard-events

在不捕获键盘事件的情况下聆听键盘事件?

我正在编写一个命令行应用程序,它在X Windows中侦听Control key release事件,并在检测到它时向另一个进程发出警报.

作为GNU/Linux的新手,我宁愿避免与GCC混淆,因此我正在寻找基于脚本的解决方案.因为我知道一点Python,看起来很自然地去寻找基于Python的解决方案,在清理了互联网以获取示例并阅读Python Xlib文档后,我将这些程序放在一起工作,但需要注意的是:陷阱事件而不仅仅是听取它们(我的意思是这些事件不再传递给它们首先被引导到的应用程序).

我通过运行"xev"来跟踪控制键代码.由于我已经重新映射了我的修改键,因此在您的系统上它们可能会有所不同.

为了简单起见,我省略了处理外部流程的代码.

谢谢您的帮助.

软件:

  • Python 2.7.2

  • Python Xlib 0.15 RC1

  • Perl v5.10.1

  • Debian GNU/Linux版本:6.0.3

  • 内核版本:Linux debian 2.6.32-5-686

编辑:我无法弄清楚的是键盘事件不会被捕获,除非它们被处理(在我的程序中,这意味着行'打印'KeyRelease"'被执行).因为在我的代码中我没有在Xlib或事件对象上调用任何方法,所以我不明白处理的区别在哪里.

EDIT2:除了使用Xlib之外,还欢迎提供有关替代解决方案的建议.

EDIT3:我也知道Perl,并且对Perl库的建议也很受欢迎,只要它们不需要最新版本的系统库,因为Debian在其存储库中可用的软件包方面臭名昭着,并且编译并且如果它们有很多依赖项,那么安装最新版本的库可能很困难(我已经尝试安装PyGTK,但在未能引用我安装的最新GLib后放弃了).

    #!/usr/bin/env python

    from Xlib.display import Display
    from Xlib import X

    Control_R  = 64 # Keycode for right Control.
    Control_L  = 108 # Keycode for left Control.
    keycodes = [Control_R, Control_L] # Keycodes we are listening for.

    # Handle X events.
    def handle_event(event):
        # Let us know whether this event is about a Key Release …
Run Code Online (Sandbox Code Playgroud)

python perl xlib keyboard-events keyrelease

14
推荐指数
2
解决办法
5607
查看次数

如何防止keydown上的数字输入?

我想阻止文本字段上的keydown事件的数字输入并运行自定义处理函数.以下是问题

  • e.target.value 由于键值尚未投射到目标值,因此无用
  • e.keyCode 数量取决于键盘类型,语言布局,Fn或Shift键
  • String.fromCharCode(e.keyCode) 是不可靠的,至少在我的键盘上(捷克qwerty)
  • w3规范e.keyCode是遗留属性e.char,而是暗示,但它尚未在浏览器中实现

那么如何在文本字段出现之前捕获数字输入?

javascript cross-browser keyboard-events

14
推荐指数
2
解决办法
5万
查看次数

键盘打开 React Native 时出现双击按钮问题

我知道已经有很多关于这个主题的疑问,我已经尝试了每一步,但仍然无法解决问题。

这是代码:

    render() {
    const {sContainer, sSearchBar} = styles;

    if (this.props.InviteState.objectForDeleteList){
      this.updateList(this.props.InviteState.objectForDeleteList);
    }
    return (
      <View style={styles.mainContainer}>
        <CustomNavBar
          onBackPress={() => this.props.navigation.goBack()}
        />
        <View
          style={sContainer}
        >
          <ScrollView keyboardShouldPersistTaps="always">
            <TextInput
              underlineColorAndroid={'transparent'}
              placeholder={'Search'}
              placeholderTextColor={'white'}
              selectionColor={Color.colorPrimaryDark}
              style={sSearchBar}
              onChangeText={(searchTerm) => this.setState({searchTerm})}
            />
          </ScrollView>
          {this.renderInviteUserList()}
        </View>
      </View>
    );
  }

renderInviteUserList() {
    if (this.props.InviteState.inviteUsers.length > 0) {
      return (
        <SearchableFlatlist
          searchProperty={'fullName'}
          searchTerm={this.state.searchTerm}
          data={this.props.InviteState.inviteUsers}
          containerStyle={styles.listStyle}
          renderItem={({item}) => this.renderItem(item)}
          keyExtractor={(item) => item.id}
        />
      );
    }
    return (
      <View style={styles.emptyListContainer}>
        <Text style={styles.noUserFoundText}>
          {this.props.InviteState.noInviteUserFound}
        </Text>
      </View>
    );
  }


renderItem(item) {
    return …
Run Code Online (Sandbox Code Playgroud)

keyboard-events react-native

14
推荐指数
2
解决办法
8725
查看次数

如何在Swing中停止重复的keyPressed()/ keyReleased()事件

所以我遇到的问题似乎只是在Linux上发生的错误.当按下按键时,我正试图获取我的swing应用记录,然后检测该按键何时被释放.现在这不应该是有问题的,因为KeyListener应该为我处理这个问题.

问题是,当我按住键时,我得到了许多重复的keyPressed()/ keyReleased()事件,而不仅仅是单个keypressed().有没有人有一个解决方案或解决方法来知道什么时候在Linux上真正发布了一个密钥?

谢谢.

java linux swing event-handling keyboard-events

13
推荐指数
1
解决办法
1万
查看次数

按键事件发生后如何获取文本光标位置?

我正在写一个语法荧光笔.突出显示器应在输入文本并使用箭头键导航时立即更新突出显示.

我面临的问题是,当'keypress'事件被触发时,你仍然可以获得文本光标的旧位置window.getSelection().

例:

function handleKeyEvent(evt) {
  console.log(evt.type, window.getSelection().getRangeAt(0).startOffset);
}

var div = document.querySelector("div");
div.addEventListener("keydown", handleKeyEvent);
div.addEventListener("keypress", handleKeyEvent);
div.addEventListener("input", handleKeyEvent);
div.addEventListener("keyup", handleKeyEvent);
Run Code Online (Sandbox Code Playgroud)
<div contenteditable="true">f<span class="highlight">oo</span></div>
Run Code Online (Sandbox Code Playgroud)

在示例中,将插入符号放在单词"foo"之前,然后按(向右箭头键).

在您最喜欢的DevTool的控制台中,您将看到以下内容:

keydown 0
keypress 0
keyup 1
Run Code Online (Sandbox Code Playgroud)

0除了keypress显然是旧插入位置.如果你再坚持一下,你会得到这样的东西:

keydown 0
keypress 0
keydown 1
keypress 1
keydown 1
keypress 1
keydown 2
keypress 2
keyup 2
Run Code Online (Sandbox Code Playgroud)

我想得到的是新的插入位置,就像我将其用于'keyup'或'input'.虽然'keyup'被触发得太晚了(我想在按下键时突出显示语法)并且'input'仅在实际有一些输入时触发(但不产生任何输入).

插入符号位置发生变化后是否会触发事件而不仅仅是输入?或者我是否必须计算文本光标的位置,如果是,如何计算?(我认为当文本换行并按下(向下箭头键)时,这会变得非常复杂.)

javascript dom keyboard-events dom-events

13
推荐指数
1
解决办法
9944
查看次数

Javascript,按键值总是最新的一个字符?

如果键入"圣",由时间我按下吨,如果我输出的输入textfield.valueonkeypress/ onkeydown功能,我只得到"S".

为什么是这样?我如何摆脱这种滞后?

javascript keypress keydown keyboard-events

12
推荐指数
2
解决办法
6749
查看次数

12
推荐指数
2
解决办法
9414
查看次数

getGraphicsEvent用于读取非交互式会话的键盘

无论如何,在旧版本的R版本2.9中,我能够使用rterm.exe从批处理运行R程序并创建一个图形窗口,用户可以来回滚动查看图形.我能够通过使用一些R代码来做到这一点:

 kbd <- function(key) { 
 if (key == "q") { "Quit" } else NULL } 
 getGraphicsEvent(" ",  onKeybd = kbd) 
Run Code Online (Sandbox Code Playgroud)

这使得图形查看器保持打开状态,直到用户按下"q"键.在较新版本的R中,似乎由于这是从批处理开始的(使用Rterm.exe进行非交互),键值始终为NULL,图形窗口只是闪烁和关闭.我的问题是,如果有任何方法我可以以某种方式说服R系统我正在运行一个准交互式会话并让getGraphicsEvent的行为不立即返回NULL?

windows r keyboard-events rterm

12
推荐指数
1
解决办法
418
查看次数

将键盘事件发送到C#中另一个不处理Windows事件的应用程序

这是我的情况:我们正在编写一个必须将Microsoft Kinect坐标转换为键盘和鼠标事件的应用程序.

当我们需要控制鼠标时,一切都按照我们在任何应用程序中的预期进行.当我们需要将键盘事件(如按键或键盘)发送到不处理Windows事件的应用程序(例如游戏)时,就会出现问题.

我们尝试了.net框架的SendKeys类,它只适用于Windows应用程序.当应用程序是像Half-Life或Doom这样的游戏时,我们无法获得相同的效果.所以,这是我的问题:我们如何有效地将键盘事件发送到这些其他应用程序?

c# mouse events keyboard-events kinect

12
推荐指数
1
解决办法
5194
查看次数

如何使用AutoHotkey创建独立的exe?

我创建了一个脚本来重新映射Windows按钮以右键单击.

如何创建可以下载的可执行AutoHotkey文件,该文件只能自动运行该脚本?

executable autohotkey keyboard-events

12
推荐指数
1
解决办法
3万
查看次数