QT开发有时候有这种需求:要求由程序模拟键盘按下。写习惯Java之类的语言了,用C++学习一下
一、Windows
keybd_event(VK_UP,0,0,0);
keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0);
二、Mac
CGEventRef key = CGEventCreateKeyboardEvent(NULL, kVK_UpArrow, true);
CGEventPost(kCGHIDEventTap, key);
CFRelease(key);
三、Linux
如果提示不存在X11/extensions/XTest.h
Ubuntu:
$ sudo apt-get install xorg-dev
CentOS:
$ sudo yum install xorg-x11*
在pro工程中添加如下的配置
PKGCONFIG += x11
LIBS += -lpthread -lXtst
CONFIG += link_pkgconfig
QMAKE_CXXFLAGS += -std=c++0x -pthread
调用时包含的头文件
#include <X11/keysym.h>
#include <X11/extensions/xtestconst.h>
#include <X11/extensions/XInput.h>
#include <X11/extensions/XTest.h>
#include <X11/Xlib.h>
调用的方法
Display *display = XOpenDisplay(NULL);
if(display ==NULL)
return ;
for(int index=0; index<65536; ++index)
{
XTestFakeKeyEvent(display, XKeysymToKeycode(display,index), 1, 10);
XFlush(display);
XTestFakeKeyEvent(display, index, 0, 10);
XFlush(display);
}
XCloseDisplay(display);
5.设置当前程序不抢占别的程序的输入焦点
setWindowFlags(Qt::Tool);
setAttribute(Qt::WA_X11DoNotAcceptFocus,true)