gpt4 book ai didi

java - JNA 联合结构映射

转载 作者:行者123 更新时间:2023-12-04 06:51:11 24 4
gpt4 key购买 nike

在 JNA 中,如何从 Xlib 映射联合结构,如以下 XEvent

typedef union _XEvent {
int type; /* must not be changed */
XAnyEvent xany;
XKeyEvent xkey;
XButtonEvent xbutton;
XMotionEvent xmotion;
XCrossingEvent xcrossing;
XFocusChangeEvent xfocus;
XExposeEvent xexpose;
XGraphicsExposeEvent xgraphicsexpose;
XNoExposeEvent xnoexpose;
XVisibilityEvent xvisibility;
XCreateWindowEvent xcreatewindow;
XDestroyWindowEvent xdestroywindow;
XUnmapEvent xunmap;
XMapEvent xmap;
XMapRequestEvent xmaprequest;
XReparentEvent xreparent;
XConfigureEvent xconfigure;
XGravityEvent xgravity;
XResizeRequestEvent xresizerequest;
XConfigureRequestEvent xconfigurerequest;
XCirculateEvent xcirculate;
XCirculateRequestEvent xcirculaterequest;
XPropertyEvent xproperty;
XSelectionClearEvent xselectionclear;
XSelectionRequestEvent xselectionrequest;
XSelectionEvent xselection;
XColormapEvent xcolormap;
XClientMessageEvent xclient;
XMappingEvent xmapping;
XErrorEvent xerror;
XKeymapEvent xkeymap;
long pad[24];
} XEvent;

我希望稍后能够根据接收到的事件类型将 JNA 中的 XEvent 转换为其他事件(如 XKeyEvent、XButtonEvent、XMotionEvent ...等)。

我并不是要求对上述所有结构进行完整映射。一个清晰的解释和一个关于如何做的小例子就足够了。

谢谢

最佳答案

使用 JNA contrib (com.sun.jna.platform.X11) 中定义的映射,然后执行以下操作:

  1. 使用您喜欢的任何方法(例如 XNextEvent)获取 XEvent。
  2. 使用类型字段确定事件的类型。
  3. 根据类型调用字段名(字符串形式)的readFiled方法,并将返回值强制转换为字段名的事件类型。

例子:

XEvent event = new XEvent();
X11.INSTANCE.XNextEvent(display, event);
if(event.type == X11.KeyPress) {
XKeyEvent xKey = (XKeyEvent)event.readField("xkey");
// you can now use xKey.keycode and other fields
}

关于java - JNA 联合结构映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3103332/

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