- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于自动化测试应用程序,我必须模拟大量 unicode 键盘输入到旧的 X11 应用程序(我没有任何源代码访问权限)。我的程序通过标准输入从 UCS-2 LE 编码的输入流中获取输入,基本操作如下:
XDisplayKeycodes
、XGetKeyboardMapping
、XkbGetState
)XkbLockModifiers
)n
个唯一符号,其中 n
是 XDisplayKeycodes
返回的可能键码的数量.XChangeKeyboardMapping
在 n
可用的 KeyCodes 上映射这些 n
个唯一的 X11 KeySymsXTestFakeKeyEvent
为所有排队的 KeySyms 键入正确的 KeyCodes基本上,这个系统比我目前看到的任何虚拟 X11 键输入工具都运行得更好,性能也更高。
但是,有一个问题我目前只能使用丑陋的延迟来解决:
与任何其他 X11 应用程序一样,在我的应用程序成功更改键盘映射表后,目标应用程序从 X 服务器接收到一个 MappingNotify
(request==Keyboard) 事件。X11 客户端的通常响应是调用 XRefreshKeyboardMapping
来更新 Xlib 对新键盘布局的了解。
现在,如果客户端在处理其 X11 事件队列时有一些滞后,则 XRefreshKeyboardMapping
调用可能会返回一个太新的映射,该映射已经是 future 几代之后的映射了。例如。当目标应用程序刚到达处理其 XEvent 队列处理程序中的第二个 MappingNotify
事件时,我的输入生成器已经完成了第四个 XChangeKeyboardMapping
。实际上它应该得到第二代 map ,那时 X 服务器上已经不可用了。
不幸的是,在键盘 MappingNotify
事件中没有 map ID 或任何类型的版本,因此 XRefreshKeyboardMapping
可以引用特定的 map ......而 X 服务器确实如此似乎也没有保留历史。
结果是 X11 应用程序的 KeyCode
到 KeySym
的转换在无效布局下运行并生成错误的 KeySyms。
所以基本上我必须等到所有客户端(或者至少是具有输入焦点的客户端)都请求并收到我的最后一个 XChangeKeyboardMapping
映射,然后我才能执行下一个 XChangeKeyboardMapping
。
我可以使用 XChangeKeyboardMapping
之前的延迟修复 99.9% 的错误,并且该延迟是由一些丑陋的巫术(击键数量等)计算得出的,如果 100% 的准确度达到实现。
所以我的问题是,是否有任何方法可以通过编程方式获得通知或检查 X11 客户端是否已完成 XRefreshKeyboardMapping
或其映射是否与服务器映射同步?
如果不是,是否有办法通过 xlib 获取另一个 X11 客户端的当前映射(以检查映射是否是当前的)?
感谢任何提示!
最佳答案
我过去在 Windows 上做过类似的事情。我有幸能够使用 SendInput
函数,该函数接受带有 KEYEVENTF_UNICODE 标志的 KEYBDINPUT 结构。不幸的是,X11 不支持直接击键合成 Unicode 字符。
因为我还不能发表评论,所以我不得不给出一个建议作为答案:
您是否考虑过使用剪贴板来将您的“unicode 输入”传输到此 X11 应用程序的输入字段中?
如果该应用程序使用支持此功能的工具包,您还可以考虑使用直接 Unicode 输入:
例如基于 GTK+ 的程序(包括所有 GNOME 应用程序)支持 Unicode 输入。
按住 Ctrl
+ Shift
并键入 u
后跟 Unicode 十六进制数字,然后松开 Ctrl
和 Shift
再次。
我想使用 Xtest 扩展来合成这些序列应该很容易。
关于c - X11/Xlib : virtual keyboard input and keyboard mapping synchronization issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55226590/
当我的 android sdk 更新到最新版本时,我遇到的问题是:我无法使用计算机键盘在 Android Emulator 中输入文本,并且我无法使用 Android Emulator 键盘(屏幕旁边
我一直在尝试 APL。我正在运行 Windows 10 并且我已经安装了 Dyalog 18.0,以及 VS Code 的 APL 语言和 APL 反引号符号扩展。 但是即使我没有运行任何这些程序,有
我正在构建我的键盘扩展应用程序,当用户点击它时,我在按钮上添加了按键弹出动画。它适用于内部图像,但对于顶行图像弹出区域在剪辑 subview 时变得隐藏。我尝试使用 ClipToBound 属性并将其
我使用 MSKLC 制作了自定义键盘布局。 我以为我仔细按照说明操作了chose appropriate values对于LOCALENAME和 LOCALID参数。 但是,在通过按 Win+Spac
我一直在尝试弄清楚如何使用 Scanner 类一次输入多个标记。我找到了一些可以完美运行的代码。我知道 Scanner.hasNext 方法可以无限期地阻塞。为什么此代码中的行 keyboard =
我应该为 90% 仅使用键盘的网络应用程序使用什么技术? 我想要一个大部分时间只使用键盘的网络应用程序。哪种技术可以为我提供这种便利? 我不在乎是 java 框架还是基于 .net 或其他的东西。:)
对于文字游戏,我想在 Swift 中以编程方式创建一个 UITextField,它只允许用户输入和删除大写字母(没有空格键、回车键、大写字母等)。像这样: Desired Keyboard Layou
我在合成器上工作,我希望显示一个键盘/钢琴,用户可以在合成器的任何 Activity 中打开或关闭以弹奏琴键。最好的解决方案是它的行为是否像普通的软键盘一样,这意味着,我希望“虚拟钢琴”将当前 Act
作为haskell 的绝对初学者,我一直在阅读有关haskell 的各种文章、pdf 和教程。大多数示例/示例代码都包含数学字符。即使是打字的常见任务 -> 我必须输入: - & > 事实是我不知道如
对于自动化测试应用程序,我必须模拟大量 unicode 键盘输入到旧的 X11 应用程序(我没有任何源代码访问权限)。我的程序通过标准输入从 UCS-2 LE 编码的输入流中获取输入,基本操作如下:
问题 点击 uitextfield 时会显示键盘。一旦键盘出现,它就可以正常工作。我可以将键盘更改为除表情符号键盘之外的任何键盘。每次尝试切换到表情符号键盘时,它都会崩溃。 这是崩溃日志 2019-0
I want to record mouse and keyboard simultaneously and replay them later. When MIDDLE MOUSE is pr
第 1 步:向用户发送消息 ReplyKeyboardMarkup带有几个按钮(例如 ["Yes", "No"] ) 第 2 步:如果用户单击其中一个按钮(例如“Yes" ),我想用内嵌键盘显示一条消
在我们现在正在编写的应用程序中,我们遇到了一个问题,即如果将焦点放在底部工作表中的文本字段,键盘会在短暂的闪烁后消失。 在尝试修复它数小时后,我试图隔离这种奇怪的行为并提出了以下错误: 如果我在不是主
我正在开发一个带有EXPO管理工作流的反应原生应用程序。。我在应用程序中有一个TextInput域,我希望它通过蓝牙接受来自物理条形码扫描器的输入。。问题:当通过蓝牙连接条形码扫描仪时,移动设备将其标
我正在寻找一种将我的 Raspberry Pi Zero 用作 HID 鼠标的方法。 目标:我将 Pi 放入我的电脑,它会自动开始从上到下和从下到上快速移动鼠标。 所以原则上像 USB Rubber
我有一台华硕笔记本电脑 (F50SF),我在 C++ 中尝试拦截多媒体键(下一首轨道、上一首轨道、播放/暂停等),但我无法弄清楚如何做到这一点。我试过 GetAsyncKeyState(VK_MEDI
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Improve this qu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
在我的代码中,我似乎无法让键盘默认为黑色。我已经尝试了其他帖子中的解决方案,但没有成功。不确定我是否遗漏了什么。我希望它适用于所有 View Controller ,所以我想把它放在我的应用程序委托(
我是一名优秀的程序员,十分优秀!