gpt4 book ai didi

c - Keyboard.print() 等同于 C on Teensy?

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:33 25 4
gpt4 key购买 nike

我正在尝试为 Teensy 编写一个程序,将其用作键盘。我希望它根据输入打印出某些字符串,但有些字符串相当长。我知道对于 Arduino IDE,有一个简单的 Keyboard.print() 函数可以发送字符串。 C 是否也存在此功能?

最佳答案

你的问题比较不清楚,所以我已经回答了我从中得到的两种解释。

如果您指的是使用 Teensy 作为输入设备。

是的,如果您使用 teensyduino,这应该适用于所有 Teensy 单元在您选择的操作系统下。只需输入您的代码并设置 Teensy as a HID device使用它。
重申一下好的建议,请仔细测试,因为流氓键盘会很快给您带来很多麻烦。

如果您指的是让 C 程序模拟键盘。

是的,这也是可能的。

Linux 指令

Example Code - Found on SO
该示例使用 #define KEYCODE XK_Down ,这是“安全的”,但很难证明。尝试添加 #define KEYCODE XK_A , #include <unistd.h> , 和 usleep(2000000); // 2 seconds在适当的地方控制行为。
此外,如果您需要 C 而不是 C++,请更改 Window &winWindow wincreateKeyEvent

修改以下代码 XFakeKey.c

// Send a fake keystroke event to an X window.
// by Adam Pierce - http://www.doctort.org/adam/
// This is public domain software. It is free to use by anyone for any purpose.

// debug message, delay, and conversion to C by ti7
// original code found at http://www.doctort.org/adam/nerd-notes/x11-fake-keypress-event.html

#include <X11/Xlib.h>
#include <X11/keysym.h>

// The key code to be sent.
// A full list of available codes can be found in /usr/include/X11/keysymdef.h
//#define KEYCODE XK_Down
#define KEYCODE XK_A

// Function to create a keyboard event
XKeyEvent createKeyEvent(Display *display, Window win,
Window winRoot, int press,
int keycode, int modifiers)
{
XKeyEvent event;

event.display = display;
event.window = win;
event.root = winRoot;
event.subwindow = None;
event.time = CurrentTime;
event.x = 1;
event.y = 1;
event.x_root = 1;
event.y_root = 1;
event.same_screen = True;
event.keycode = XKeysymToKeycode(display, keycode);
event.state = modifiers;

if(press)
event.type = KeyPress;
else
event.type = KeyRelease;

return event;
}

#define true 1
#define false 0

#include <stdio.h> // for printf
#include <unistd.h> // for time
main()
{
// Obtain the X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;
printf("it's working\n");
// Get the root window for the current display.
Window winRoot = XDefaultRootWindow(display);

usleep(1000000);
// Find the window which has the current keyboard focus.
Window winFocus;
int revert;
XGetInputFocus(display, &winFocus, &revert);

// Send a fake key press event to the window.
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, true, KEYCODE, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);

// Send a fake key release event to the window.
event = createKeyEvent(display, winFocus, winRoot, false, KEYCODE, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);

// Done.
XCloseDisplay(display);
return 0;
}

gcc -o XFakeKey XFakeKey.c -L/usr/X11R6/lib -lX11 编译

Windows 示例

Example Code
我很勇敢,还没有测试过这个,所以抓紧你的裤子。

关于c - Keyboard.print() 等同于 C on Teensy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33247615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com