2013-04-26 24 views
0

我有一個在後臺啓動相同的過程X倍bash腳本。這些進程中的每一個主要是使用OpenGL的GUI。發送擊鍵多的OpenGL圖形用戶界面

我想向每個正在運行的後臺進程發送一個按鍵(例如Ctrl + Shift + A),以便後臺進程中的代碼捕獲該組合鍵並執行它(就像它被按用戶在GUI中)。

我還沒有找到一種方法來做到這一點。唯一能接近它的是使用一些進程間通信,比如管道,但它需要修改我的後臺進程。它只允許我將管道連接到按鍵執行的任何地方。

大多數解決方案涉及注射到焦點的窗口,但這裏X GUI應用得到推出,我有自己的PID,但我必須發送相同的擊鍵他們。無論如何模擬擊鍵,儘管多個GUI同時從我的shell腳本運行嗎?

+0

我沒有爲你解決了,我有點懷疑有一個,但是這無關任何bash或TTY中,所以我編輯它來刪除這些標籤。這是一個複雜的問題需要解決。有一些用於測試的GUI自動化工具,但我懷疑它們中的任何一個都可以處理多播。 – 2013-04-26 22:31:13

+0

謝謝吉姆,之後我也在想。我想我會採用管道方式。非常感謝! – user1777907 2013-04-26 22:57:02

回答

1

可以使用的Xlib功能XSendEvent發其他窗口合成輸入事件。您也可以將Xcb庫的xcb_send_event用於相同的目的。

然而,因爲我希望你想輕鬆的腳本,你可能會使用Python的Xlib綁定使用的Xlib,例如。

有了這些,你可以

  • 枚舉所有窗口
  • 選擇你的OpenGL窗口
  • 合成的按鍵事件發送給他們

需要注意的是X11允許您註冊自定義事件,所以你可以如此。

+0

非常感謝!這似乎是迄今爲止最好的方法,謝謝! – user1777907 2013-04-30 22:12:38