gpt4 book ai didi

c++ - xlib XNextEvent 检查一个键是否被按下

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:49 26 4
gpt4 key购买 nike

我正在使用 xlib 获取键盘输入我想模拟窗口的 getAsynckeystate() 以检查是否按下了按钮我尝试使用计时器来修复结果但它仍然坏了。即使同时按下或释放其他键(现在不工作),如果按住“z”,该函数也应始终返回 true

代码如下

bool KeyboardState::keyPressed(Display* d, Window curFocus,int revert, Window root) {
XEvent ev;
XNextEvent(d, &ev);
clock_t startTime;
switch (ev.type) {
case FocusOut:
if (curFocus != root)
XSelectInput(d, curFocus, 0);

XGetInputFocus(d, &curFocus, &revert);
printf("New focus is %d\n", (int) curFocus);

if (curFocus == PointerRoot)
curFocus = root;

XSelectInput(d, curFocus, KeyReleaseMask | FocusChangeMask | KeyPressMask);
break;

case KeyPress:
ks = XLookupKeysym(&(ev.xkey), 0);

if (ks == XK_z) {

keyState = true;
startTime = clock();
}
break;
case KeyRelease:
if(ks == XK_z && startTime - clock() > 0){

ks = XLookupKeysym(&(ev.xkey), 0);
keyState = false;
}
}
return keyState;
}

最佳答案

n.m 链接了以下被接受为答案的函数:

tronche.com/gui/x/xlib/input/XQueryKeymap.html

关于c++ - xlib XNextEvent 检查一个键是否被按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38683047/

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