我试图覆盖WndProc,但粘贴事件上没有显示任何消息.
然后我尝试创建自定义过滤器并使用方法PreFilterMessage我能够捕获值为257(KEYUP事件)的消息,但这还不够......
我有一个C#winform,我有1个按钮.
现在,当我运行我的应用程序时,该按钮会自动获得焦点.
问题是KeyPress
我的表单事件不起作用,因为按钮是聚焦的.
我曾尝试this.Focus();
对FormLoad()
事件,但仍然KeyPress事件不工作.
我无法弄清楚如何使用Android发送元键(例如CTRL)和键码(例如用于RETURN)的组合(我使用API级别11 =版本3.0).
KeyEvent类的文档提到了诸如META_CTRL_ON之类的常量,并且还支持元键的键码常量(例如KEYCODE_CTRL_LEFT).
我正在使用Javascript Key Event Tester测试输入法编辑器(IME)生成的输出.顺便说一句,我的目标是开发一个软件键盘.
如果我理解正确的文件,这将足以执行以下代码发送CTRL键唯一:
this.sendDownUpKeyEvents(KeyEvent.KEYCODE_CTRL_RIGHT);
Run Code Online (Sandbox Code Playgroud)
但是当针对Javascript Key Event Tester(见上文)执行此操作时,没有任何反应.
因此,我需要了解如何仅发送元密钥以及将元密钥与另一个密钥组合发送.我也尝试了以下发送SHIFT + ENTER(一个具体的例子):
private void _sendShiftEnter() {
this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT);
final long eventTime = SystemClock.uptimeMillis();
this.getCurrentInputConnection().sendKeyEvent(
new KeyEvent(
eventTime, // The time (in uptimeMillis()) at which this key code originally went down.
eventTime, // The time (in uptimeMillis()) at which this event happened.
KeyEvent.ACTION_DOWN, // Action code: either ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE.
KeyEvent.KEYCODE_ENTER, // The key code.
0, …
Run Code Online (Sandbox Code Playgroud) 我正在使用Arduino Uno通过USB或蓝牙将(真正的)SNES控制器连接到计算机.
Arduino使用snespad库捕获控制器的按钮按下和释放.它将按钮按下和释放作为字符进行通信(例如,用于按A的'a',用于释放'A'的'A').接下来,Java程序使用rxtx库监听串行输出.最后,Java机器人使用keyPress和keyRelease模拟按键.
不幸的是,这种方法有一些缺点.主要问题是关键映射.我有点随意决定哪些键盘是键盘键.
Java似乎没有任何游戏手柄KeyEvents.当我说"游戏键盘KeyEvent"时,我指的是类似于Android SDK的东西:http://developer.android.com/reference/android/view/KeyEvent.html(ctrl + f"游戏手柄"或"按钮" .)
我的问题是,有没有办法模拟游戏手柄按钮按下而不是使用Java的机器人类按键?
我想将keyevent键码值转换为字符串或char值.任何人都会这样做.
例如,当我按下'SPACE'时,'让我们说'有一个键码20,我想将该值转换为char或字符串.有没有标准的方法,或者我必须为键盘上的每个键写一堆'if'语句?
如何发送自定义SWT键事件,以便在不进行任何转换的情况下输入该确切的文字字符?
我们正在制作一个自定义的屏幕图形键盘,允许多种可能的布局 - QWERTY是主要的布局,但其他几个计划,包括可视化模拟iPhone键盘布局或其他相对于PC非标准的布局.
我希望能够将我选择的任意字符作为事件发送,这样就会导致输入该确切的字符.但是,每当我发送一个具有给定字符的事件时,SWT似乎会根据系统的键盘设置和状态自动解释和转换它,将其更改为大写/小写或使用移位的符号,具体取决于移位键(按下实际键盘上的真实键盘.例如,将字符'T'传递给键事件将导致't'或'T',具体取决于shift键.它的表现类似于'4'字符,根据班次做'4'或'$'.
这是有问题的,因为我希望手动执行字符移位,并且实际上可能不希望在任何给定情况下使用与标准QWERTY键盘相同的移位字符(例如,我可能希望'$'被移位(或'功能'键)版本的'R'在较小的手机式键盘上).我怎样才能使用这些事件,以免它假设使用QWERTY键?
SWT事件中"字符"字段的文档说明如下:
键入的键所代表的字符.这是应用所有修改器后生成的最终字符.例如,当用户键入Ctrl + A时,字符值为0x01.重要的是,应用程序不会尝试基于stateMask(例如SWT.CTRL)修改字符值,否则生成的字符将不正确.
这让我相信它不应该像我一样转换我的角色,因为我命令它使用我的"最终"结果.
我已经创建了一个简单的独立示例来演示我的问题(请注意,这不是我在做实际键盘的方式,而只是为了突出显示关键事件问题):
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Button;
public class KeyboardIssueExample extends Shell {
private Text txtTextArea;
private Composite cmpButtons;
private Button btnBigA;
private Button btnBigS;
private Button btnLittleD;
private Button btnSix;
private Button btnSeven;
private Button btnDollah;
private Button btnStar;
private SelectionListener mainListener = new SelectionAdapter() {
@Override
public …
Run Code Online (Sandbox Code Playgroud) 我想将" CTRL + W "发送到Chrome for Android以关闭活动标签.我尝试了很多东西,但从终端实现它并没有成功.(如果我用USB键连接USB键盘,我可以用CTRL + W关闭标签)
首先,我不想为此编写应用程序,我只想要一个shell命令来从Tasker中使用它.
我读到了要实现这个目标的地方(CTRL + W按键),我必须模拟这样的按键:
向下CTRL
向下W
向上W
向上CTRL
而要从终端实现这一点,似乎我必须使用" sendevent ".
我可以使用"sendevent"模拟所有硬件按键,但不能用它来模拟普通键.
例如,向下和向上键到POWER键:
sendevent /dev/input/event1 1 116 1
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 116 0
sendevent /dev/input/event1 0 0 0
Run Code Online (Sandbox Code Playgroud)
我使用此命令,但我不能使用此命令发送普通键.(例如a,b,c等)
event1是gpio-keys,所以我正在使用它.所有其他输入事件都是传感器,其中一个是充电驱动器.(max77693-MUIC)
"getevent -p"的输出表示:
add device 1: /dev/input/event9
name: "compass_sensor"
events:
REL (0002): 0000 0001 0002 0003 0004 0005 0006 0007
0008 0009
input props:
<none>
add device 2: /dev/input/event6
name: "barometer_sensor"
events:
REL (0002): 0000 0001 0002 …
Run Code Online (Sandbox Code Playgroud) 我想用我的Android自定义键盘用enter键搜索,但它不起作用.
我已经映射了密钥,我只需要在搜索文本字段上触发"搜索操作",就像在Google上搜索一样.
我尝试使用此代码来触发搜索操作,但它不起作用:
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
Run Code Online (Sandbox Code Playgroud)
这是我覆盖enter键事件的方法:
public class Keyboard extends InputMethodService
implements KeyboardView.OnKeyboardActionListener {
@Override
public void onStartInputView(EditorInfo info, boolean restarting) {
super.onStartInputView(info, restarting);
setInputView(onCreateInputView());
switch (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION) {
case EditorInfo.IME_ACTION_SEARCH:
Toast.makeText(this, "test", Toast.LENGTH_SHORT).show();
//Action Search
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我的xml布局是:
<?xml version="1.0" encoding="UTF-8"?>
<android.inputmethodservice.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:keyPreviewHeight="60dp"
android:keyPreviewOffset="12dp"
android:keyPreviewLayout="@layout/preview"
android:visibility="visible"/>
Run Code Online (Sandbox Code Playgroud)
我的布局中没有任何EditText可供设置android:imeOptions="actionSearch"
.
keyboard android keyevent android-softkeyboard android-input-method
我创建了EditText,如下所示.
<EditText
android:id="@+id/et_regis_num"
android:maxLines="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:hint="@string/txt_reg_num"
android:inputType="textCapCharacters"
android:maxLength="10" />
Run Code Online (Sandbox Code Playgroud)
在这个edittext中,我不想按SPACE键,但是当我按下SPACE键时,它正在作为BACKSPACE键.意味着它每次按两次按下一个字符.
根据 API 29 中的文档,KeyEvent.getCharacters()
已弃用,但我无法找到相同的替代方案。
根据文档,它"@deprecated no longer used by the input system."
来自 API 29。这实际上意味着什么?