在 Windows 中使用非英语输入键盘语言时,我无法模拟字符按键。
我尝试使用 KEYEVENTF_UNICODE 调用 SendInput():
KEYBDINPUT ki;
INPUT input;
int character = 0;
ki.wVk = 0;
ki.wScan = character;
ki.dwFlags = KEYEVENTF_UNICODE;
ki.time = 0;
ki.dwExtraInfo = 0;
input.type = INPUT_KEYBOARD;
input.ki = ki;
SendInput(1, &input, sizeof(INPUT));
Run Code Online (Sandbox Code Playgroud)
这实际上有效(当然,在我的代码中,我也在按下键后执行 KEYUP)...除了在 GTK+ 应用程序中(可能还有其他情况下它也不起作用)。
根据MSDN,如果指定了 KEYEVENTF_UNICODE,SendInput 将 WM_KEYDOWN 或 WM_KEYUP 消息发送到前台线程的消息队列,wParam 等于 VK_PACKET。一旦 GetMessage 或 PeekMessage 获得此消息,将消息传递给 TranslateMessage 会发布一条 WM_CHAR 消息,其中包含最初由 wScan 指定的 Unicode 字符。如果将这个 Unicode 字符发送到 ANSI 窗口,它将自动转换为适当的 ANSI 值。
所以我相信当 KEYEVENTF_UNICODE 被传递时,SendInput() 的功能是不同的......不像通常那样低级。
在我的一生中,我想不出任何其他方法让 SendInput() 为用户的键盘语言正确打印字符。例如,如果键盘输入语言是“瑞典语”,我不能让它输出'@'(而是打印出一个引号),我不能让它正确输出非ASCII字符,要么(重音字母等)。 …
我有一个脚本,它在我的搜索输入框中的 keyup 事件上执行 ajax 请求。我在 Firefox 中注意到(我正在查看控制台),发送的每个请求都完成了。所以有大量的ajax请求发生。
无论如何要在keyup事件中杀死正在进行的ajax请求?
jQuery:
jQuery(function() {
var request;
request = function(url, keyword) {
return $.post('/backpack/' + url + '/search?keyword=' + keyword, function(data) {
var el;
el = "#result_" + url;
return $(el).html(data);
});
};
$("#search_text").bind("keyup", function() {
var query, url, _i, _len, _ref;
query = $(this).val();
if (query.length > 2) {
_ref = ['tracks', 'albums', 'artists'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
url = _ref[_i];
request(url, query);
}
return …Run Code Online (Sandbox Code Playgroud) 我有一个带有事件的文本框,当输入一些文本时,它应该做一些事情。很容易检查它是否是字母数字,如此处所述我可以确定 KeyEventArg 是字母还是数字吗?:
if ( ( ( e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z ) ||
( e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 ) ||
( e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9 ) )
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,我也应该手动检查-?!¿[]()用Key.OemMinus,Key.OemQuestion等等。
有什么方法可以检查它是文本按键还是我应该手动检查(在我看来这不是很优雅)?
由于 'changeCursor' 事件(我正在使用 ACE 编辑器),我的一个脚本在某个时候调用了一个函数。当我多次按下它时,这会减慢光标的移动速度。
我真的很想调用这个函数,但是如果只在我的光标停止移动时才调用它就可以了(即我不需要查看中间状态)。
有没有一种标准方法可以忽略最后一个事件之外的所有事件?
我有一台运行 Node 的无头 Debian ARM 机器。该设备具有硬按钮,这些按钮使用 映射到普通键盘事件gpio-keys。
我的目标是从硬按钮以及 Node.js 中的任何附加键盘捕获全局事件。我需要一个解决方案,它可以独立于运行它的终端捕获 keydown/keyup 事件(它将通过 SSH 会话运行)。它不必是跨平台的,只要它适用于 ARM Debian,我就会接受它。
我正在想象直接从任何sysfs必要的属性中读取的东西,但这不是必需的。
谁可以帮我这个事?我被困了一段时间。
我正在编写应该指示键盘布局的控制台应用程序.我正在使用GetForegroundWindow()函数获取当前活动窗口,函数GetWindowThreadProcessId()获取线程ID,最后,使用函数GetKeyboardLayout()我得到键盘布局.除了某些情况之外,我尝试的任何应用都可以正常工作:
请解释一下发生了什么.下面是我的测试代码
#include <Windows.h>
#include <iostream>
int main()
{
while(8)
{
HWND _curr_window = GetForegroundWindow();
DWORD _curr_window_procces_id;
DWORD _curr_window_thread_id = GetWindowThreadProcessId(_curr_window, &_curr_window_procces_id);
std::cout << "Process ID is " << _curr_window_procces_id << " and Thread ID is " << _curr_window_thread_id << std::endl;
HKL _key_locale = GetKeyboardLayout(_curr_window_thread_id);
std::cout << "Keyboard layout is " << _key_locale << std::endl;
Sleep(1000);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是 PC 游戏的速通玩家(喜欢以尽可能快的方式完成游戏的人),我想在玩游戏时记录我的输入,以便稍后自动重播。所以我创建了一个小 C# 程序来做到这一点:基本上,它会启动一个计时器,每次我按下/松开一个键时,它都会保存操作(keyup/keydown)、键以及我这样做的毫秒数。然后,当我想再次播放它时,它会启动一个计时器,当它达到发生击键的毫秒时,它会重现它。
它有效!嗯...事实上,它几乎可以工作:键复制得很好,但有时,它们有点不同,导致我之前成功的意外死亡。
这是显示问题的视频:https : //www.youtube.com/watch?v=4RPkcx68hpw&feature=youtu.be
上面的视频是重制键,下面的视频是原版播放。一切似乎都相似,直到第 3 个房间,原始戏剧击中“蜘蛛”并使其返回,而复制的键不接触它,因此它干扰了其余的进程。当然,这部分游戏是 100% 确定的,因此相同的输入会导致相同的结果。通过在我的视频编辑器中逐帧推进视频,当角色爬上第一个板条箱时,我清楚地看到了 2 帧的差距,并且这个差距继续扩大。
这是我的(大量评论)代码:
KeysSaver.cs,保存我输入的类
class KeysSaver
{
public static IntPtr KEYUP = (IntPtr)0x0101; // Code of the "key up" signal
public static IntPtr KEYDOWN = (IntPtr)0x0100; // Code of the "key down" signal
private Stopwatch watch; // Timer used to trace at which millisecond each key have been pressed
private Dictionary<long, Dictionary<Keys, IntPtr>> savedKeys; // Recorded keys activity, indexed by the millisecond the …Run Code Online (Sandbox Code Playgroud) 我在检测 JavaFX 中的单个按键时遇到问题。我必须检测箭头键,但每次我按下这些键中的任何一个时,我的代码的一部分都会被多次调用。我意识到这是因为AnimationTimer()是一个循环,因此这就是原因,但我不知道如何检测单键点击。无论如何,这是代码:
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import java.util.HashSet;
public class Main extends Application {
Stage window;
static Scene scene;
private static char[][] mapa = {
{'X','X','X','X','X'},
{'X','.','.','.','X'},
{'X','.','M','.','X'},
{'X','.','.','.','X'},
{'X','X','X','X','X'}
};
private final int sizeX = 16;
private final int sizeY = 16;
static HashSet<String> currentlyActiveKeys;
@Override
public void start(Stage primaryStage) throws Exception {
window = primaryStage;
window.setTitle("Hello World");
Group root …Run Code Online (Sandbox Code Playgroud) 所以我试图用 Python 构建一个简短的脚本。我想要做的是,如果单击鼠标,鼠标将重置到某个任意位置(现在是屏幕中间)。我希望它在后台运行,因此它可以在操作系统(很可能是 Chrome 或某些网络浏览器)中运行。我也希望用户可以按住某个按钮(比如 ctrl),然后他们可以点击离开而不重置位置。这样他们就可以毫无挫折地关闭脚本。
我很确定我知道如何做到这一点,但我不确定要使用哪个库。我更喜欢它是跨平台的,或者至少是 Windows + Mac。到目前为止,这是我的代码:
#! python3
# resetMouse.py - resets mouse on click - usuful for students with
# cognitive disabilities.
import pymouse
width, height = m.screen_size()
midWidth = (width + 1) / 2
midHeight = (height + 1) / 2
m = PyMouse()
k = PyKeyboard()
def onClick():
m.move(midWidth, midHeight)
try:
while True:
# if button is held down:
# continue
# onClick()
except KeyboardInterrupt:
print('\nDone.')
Run Code Online (Sandbox Code Playgroud) 我是 React Native 的新手,我一直在研究一个搜索栏,它可以在用户输入字段时过滤列表。这是它的样子......
<TextInput style={{width: '100%', textAlign: 'center'}}
ref={(ref) => this.searchInput = ref}
placeholder="Search"
onChangeText={ (text) => this.onChangeText(text)}
value={this.state.search} />
Run Code Online (Sandbox Code Playgroud)
这是我用于此行为的 onChangeText 方法
onChangeText(text) {
var filtered;
this.setState({search: text});
filtered = this.props.data.filter((item) => {
if(item.section) {
return true;
}
return (item.label.toLowerCase().includes(text.toLowerCase()));
});
this.setState({filteredList: filtered});
}
Run Code Online (Sandbox Code Playgroud)
我已将状态设置为保留用户在搜索栏中输入的任何内容,因为它会在渲染时清除。这工作正常,除了每次组件重新渲染时键盘一直关闭(在用户输入/删除的每个字符上)。
为了解决这个问题,我尝试使用像这样的 refs 专注于输入
componentDidUpdate() {
if(this.searchInput) {
this.searchInput.focus();
}
}
Run Code Online (Sandbox Code Playgroud)
但即便如此,键盘还是会时不时地播放打开/关闭动画,并且无法顺利处理输入/删除操作。
为了解决这个问题,我想将 TextInput 移动到一个单独的组件中(只有那个输入字段),然后将该组件添加到我的列表中。但是,我必须不断地将文本数据传回以过滤我的列表,从而增加了更多的复杂性。可能有更简单的解决方案吗?
keyboard-events ×10
c# ×2
javascript ×2
events ×1
java ×1
javafx ×1
jquery ×1
keystroke ×1
linux ×1
mouseevent ×1
node.js ×1
python ×1
react-native ×1
reactjs ×1
recorder ×1
sysfs ×1
textinput ×1
unicode ×1
visual-c++ ×1
winapi ×1
windows ×1
wpf ×1