どのwindowがフォーカスを取得し、どのように変更できますかしてください。

StackOverflow https://stackoverflow.com/questions/1014822

  •  06-07-2019
  •  | 
  •  

質問

知りたいと思いたいのですがお願いX11るwindowsています。ばらかの理由で、自分の申請がなくても、更新することができないんだいにいきましょう旧windowsにはフォーカスを取得する。

例えば、私のアプリケーションは多くその他(例:firefox gvim nautilus,...)

その最初のfirefoxフォーカスを持つことになるのユーザーをクリックした私るアプリケーションしています。いることに自分に注目されるところfirefox。

は誰でも知ってどのように実現する。書籍の提言が非常に素敵です。

よろしくおねがいします!

役に立ちましたか?

解決

この XQueryTree の現在の活動、または上ウインドウです。

こちらではの機能が指定されたときに、表示で、現在のウィンドウにフォーカス:

static Window
GetCurrWindow(d)
Display *d;
{
Window foo;
Window win;
int bar;

    do{
    (void) XQueryPointer(d, DefaultRootWindow(d), &foo, &win,
        &bar, &bar, &bar, &bar, &bar);
    } while(win <= 0);


#ifdef VROOT
    {
    int n;
    Window *wins;
    XWindowAttributes xwa;

    (void) fputs("=xwa=", stdout);

    /* do{  */
        XQueryTree(d, win, &foo, &foo, &wins, &n);
    /* } while(wins <= 0); */
    bar=0;
    while(--n >= 0) {
        XGetWindowAttributes(d, wins[n], &xwa);
        if( (xwa.width * xwa.height) > bar) {
        win = wins[n];
        bar = xwa.width * xwa.height;
        }
        n--;
    }
    XFree(wins);
    }
#endif
    return(win);
}

http://tronche.com/gui/x/xlib/window-information/XQueryTree.html

このソース:

http://examples.oreilly.com/networksa/tools/xsnoop.c

幸運

他のヒント

_NET_ACTIVE_WINDOW 値のルートウィンドウがセットによる最近のウィンドウマネージャでは:

xprop -root _NET_ACTIVE_WINDOW

この値はもちろん、を用いて得ることができるヘ図書館。

まうる XGetInputFocus ます。

Window focused;
int revert_to;

XGetInputFocus(dpy, &focused, &revert_to);

このスニペット, focused きるウィンドウは現在の入力フォーカス、キーボードイベントおよびマウスボタンを致します。

この場合においてもウィンドウマネージャが設定されていない _NET_ACTIVE_WINDOW いの物件でルートウィンドウで規定されているように、EWMH.数のウィンドウマネージャなどのdwmっ9wmなセットです。

お薦めでと呼ばれるアプリケXDoTool.でに多くのクエリートでもありません

> xdotool getwindowfocus               # 29360135
> xdotool getwindowfocus getwindowpid  # 12988
> xdotool getwindowfocus getwindowname # tilda
> xdotool getwindowfocus behave '%@' blur getmouselocation
#      or focus, mouse-enter, etc.
x:514 y:317 screen:0 window:56623121
x:271 y:26 screen:0 window:56623121
...

コマンドのように behave 受け入れるコールバックできる内蔵のような getmouselocation または外部のように exec notify-send 'focused window', exec zsh myscript.zsh, 等 しかし使いたいです。

編集でき、使いやすい使用 xdotool windowfocus [options] [window], して、 xdotool search --class firefox windowfocus.私の場合は、このエラーがFirefoxに表示されて数十の家の窓がすべて同じPID;この作品は、そのIDです。うことになる。

編集2つのウィンドウID"は、小数点表現ウィンドウのポインタなどから xprop:

> xprop -root _NET_ACTIVE_WINDOW
_NET_ACTIVE_WINDOW(WINDOW): window id # 0x1c00007, 0x0
> xdotool getwindowfocus
29360135
> printf '%d\n' '0x1c00007'
29360135
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top