最近写了一个程序,通过ctrl+f12按键,设置某个窗口置顶
#include
#include
#include
#include
#include
#include
static char *window_id_format = "0x%lx";
Display *display;
unsigned int screen;
Window root_win;
Window r, p, *kids;
unsigned int i, mapped, numkids;
XWindowAttributes attr;
char *win_name;
#define shortkey XK_F12
void changefocus()
{
XQueryTree (display, root_win,
&r, &p, &kids,
&numkids);
mapped=0;
for (i = 0; i < numkids;
++i)
{
XGetWindowAttributes (display,
kids[i], &attr);
if (attr.map_state ==
IsViewable)
{
++mapped;
if
(XFetchName(display, kids[i], &win_name))
{
if(strcmp(win_name,"firefox")==0) {
XUnmapWindow(display,kids[i]);
XMapRaised(display,kids[i]);
XFlush(display);
}
XFree
(win_name);
}
}
}
}
int checkkeys(XKeyEvent * keyev)
{
if (keyev->type == KeyPress)
{
if
(keyev->keycode == XKeysymToKeycode(display,
shortkey))
{
if
((keyev->state & (ControlMask))
== (ControlMask))
fprintf(stderr,
"you pressed F12\n");
changefocus();
}
}
return 0;
}
int getevent()
{
XEvent event_buffer;
XNextEvent(display,
&event_buffer);
switch (event_buffer.type)
{
case KeyPress:
case KeyRelease:
checkkeys((XKeyEvent *)
& event_buffer);
break;
}
return 1;
}
int main()
{
display=XOpenDisplay(NULL);
screen=DefaultScreen(display);
root_win=RootWindow(display,screen);
XGrabKey(display ,
XKeysymToKeycode(display,shortkey), AnyModifier , root_win , TRUE ,
GrabModeAsync,GrabModeAsync );
for (;;) {
if(XPending(display))
{
getevent();
}
}
return 0;
}