1 /* 2 xraise 0.2 - A small tool to send a X application 3 to the foreground 4 Copyright 2010 - socol 5 Copyright 2007 - Hd Luc 6 */ 7 /** 8 * gcc -g -o xraise xraise.c `pkg-config gtk+-2.0 --cflags --libs gthread-2.0 x11` 9 */ 10 11 12 13 #include <X11/Xos.h> 14 #include <X11/Xlib.h> 15 #include <X11/Xutil.h> 16 #include <stdio.h> 17 #include <unistd.h> 18 #include <stdlib.h> 19 20 /* "borrowed" from xwininfo/dsimple.c */ 21 22 Window Window_With_Name(dpy, top, name) 23 Display *dpy; 24 Window top; 25 char *name; 26 { 27 Window *children, dummy; 28 unsigned int nchildren; 29 int i; 30 Window w=0; 31 char *window_name; 32 XClassHint *class_hint; 33 class_hint = XAllocClassHint(); 34 int ret = 0; 35 #if 0 36 // find by WM_NAME(STRING) = "window - tilte" 37 if (XFetchName(dpy, top, &window_name) && (strstr(window_name, name) == window_name)) 38 return(top); 39 #else 40 // find by WM_CLASS(STRING) = "mywindow", "MyWindow" 41 if (XGetClassHint(dpy, top, class_hint)) { 42 if (strstr(class_hint->res_name, name) == class_hint->res_name) { 43 ret = 1; 44 } 45 if (!class_hint->res_class) { 46 XFree(class_hint->res_class); 47 XFree(class_hint->res_name); 48 } 49 if (ret) 50 return(top); 51 } 52 #endif 53 54 if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren)) 55 return(0); 56 57 for (i=0; i<nchildren; i++) 58 { 59 w = Window_With_Name(dpy, children[i], name); 60 if (w) 61 break; 62 } 63 if (children) XFree ((char *)children); 64 return(w); 65 } 66 67 int main(int argc, char **argv) 68 { 69 Window window; 70 Display *dpy; 71 72 if (argc < 2) 73 { 74 fprintf(stderr, "Usage: %s window-name\n", argv[0]); 75 exit(1); 76 } 77 78 dpy = XOpenDisplay(":0"); 79 if (!dpy) 80 { 81 fprintf(stderr, "Cannot open display.\n"); 82 exit(1); 83 } 84 85 window = Window_With_Name(dpy, DefaultRootWindow(dpy), argv[1]); 86 if (!window) 87 { 88 fprintf(stderr, "Cannot find a window by that name.\n"); 89 exit(1); 90 } 91 92 XSetInputFocus(dpy, window, RevertToPointerRoot, CurrentTime); 93 94 if(!XRaiseWindow(dpy, window)) 95 { 96 fprintf(stderr, "XRaiseWindow error?\n"); 97 exit(1); 98 } 99 XCloseDisplay(dpy); 100 return 0; 101 }
转载fromhttp://socol.iteye.com/blog/788653
时间: 2024-10-23 23:49:39