代码

1.关闭窗口
本质上就是发组合键:Alt+F4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void closeWindow()
{
#if defined Q_OS_WIN
keybd_event(VK_LMENU,0,0,0);
keybd_event(VK_F4,0,0,0);
keybd_event(VK_F4,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_LMENU,0,KEYEVENTF_KEYUP,0);
#elif defined Q_OS_LINUX
Display *disp = XOpenDisplay(nullptr);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Alt_L), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_F4), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_F4), false, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Alt_L), false, CurrentTime);
XCloseDisplay(disp);
#endif
}

2.显示桌面

本质上就是发组合键:Win+D

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void showDesktop()
{
#if defined Q_OS_WIN
keybd_event(VK_LWIN,0,0,0);
keybd_event(68,0,0,0);
keybd_event(68,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);
#elif defined Q_OS_LINUX
Display *disp = XOpenDisplay(nullptr);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Super_L), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_D), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_D), false, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Super_L), false, CurrentTime);
XCloseDisplay(disp);
#endif
}

3.Page Up/Page Down

本质上就是模拟按下对应的键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void pageUp()
{
#if defined Q_OS_WIN
keybd_event(VK_PRIOR,0,0,0);
keybd_event(VK_PRIOR,0,KEYEVENTF_KEYUP,0);
#elif defined Q_OS_LINUX
Display *disp = XOpenDisplay(nullptr);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Page_Up), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Page_Up), false, CurrentTime);
XCloseDisplay(disp);
#endif
}

void pageDown()
{
#if defined Q_OS_WIN
keybd_event(VK_NEXT,0,0,0);
keybd_event(VK_NEXT,0,KEYEVENTF_KEYUP,0);
#elif defined Q_OS_LINUX
Display *disp = XOpenDisplay(nullptr);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Next), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Next), false, CurrentTime);
XCloseDisplay(disp);
#endif
}

4.多任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void showDesktop()
{
#if defined Q_OS_WIN
keybd_event(VK_CONTROL,0,0,0);
keybd_event(VK_LMENU,0,0,0);
keybd_event(VK_TAB,0,0,0);
keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_LMENU,0,KEYEVENTF_KEYUP,0);
#elif defined Q_OS_LINUX
Display *disp = XOpenDisplay(nullptr);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Super_L), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_W), True, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_W), false, CurrentTime);
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp,XK_Super_L), false, CurrentTime);
XCloseDisplay(disp);
#endif
}