如何偵測一個程式是否存在,如果存在,給予他 focus! [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



如何偵測一個程式是否存在,如果存在,給予他 focus!
會員三級
註冊日期:
2008/12/10 7:19
所屬群組:
已註冊使用者
等級: 15
HP : 0 / 369
MP : 94 / 11355
EXP: 76
離線
我正在調整 lxde 的熱鍵設定,想要一鍵把(已經啟動的) firefox 視窗抓到我面前。

X 桌面能夠做到這種功能嗎?

2013/4/18 7:22
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!
管理員
註冊日期:
2011/3/11 6:32
所屬群組:
討論區管理群
等級: 44
HP : 216 / 1084
MP : 1088 / 26240
EXP: 38
離線
查一下 wmctrl(1) 也許有用

wmctrl -a "Mozilla Firefox"

2013/4/18 8:47
本篇發表文章以「創用CC BY 3.0 或更新之台灣地區版本」授權條款釋出,如何使用敬請參考
 Creative Commons — 姓名標示 3.0 台灣 — CC BY 3.0 TW
 http://creativecommons.org/licenses/by/3.0/tw/

「你不懂的東西就不要亂講,被懂得人看破手腳就算了,騙不懂的人誤導別人,還要別人把你當成大師,這就真的是說不過去了。」
 by Allen Own
 出處 http://www.plurk.com/p/i4uogm

自由知識創作平台介紹
 https://docs.google.com/document/d/1MGG6lW_0qCgH4U785R-IwSc_INdoBGej1l-JxiA4gPE
如何建立新的自由知識創作平台文件
 https://docs.google.com/document/d/11NdzOW2lGYksfyQIcPMPye5tlmj1J0QTkgPTmQvIvKA
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!
會員三級
註冊日期:
2008/12/10 7:19
所屬群組:
已註冊使用者
等級: 15
HP : 0 / 369
MP : 94 / 11355
EXP: 76
離線
V字龍 寫到:
查一下 wmctrl(1) 也許有用

wmctrl -a "Mozilla Firefox"


非常有用的訊息!感謝!
然後是回饋……

在終端機中輸入下面這行指令可以打開 Firefox,如果 Firefox 已經啟動過了,則會把她抓到面前來:

if ! wmctrl -l | grep -iq 'Mozilla Firefox'; then firefox ; else wmctrl -a 'Mozilla Firefox'; fi


其中 "Mozilla Firefox" 是出現在視窗標題列中的字串。所以在某些特殊狀況下會抓不準,但大部份時候都沒問題啦。
-a 參數會讓您跳轉到目標視窗所在的虛擬桌面。如果要直接把它抓到當前桌面上,則用 -R 取代 -a。

用在快速鍵上時,還需要一個 shell 前導:

bash -c "if ! wmctrl -l | grep -iq 'Mozilla Firefox'; then firefox ; else wmctrl -a 'Mozilla Firefox'; fi || exit"


LXDE 環境下,將以下的碼寫入 ~/.config/openbox/lxde-rc.xml 中,就能用 Win + C 和 Win + F 隨意呼叫 firefox 與 google-chrome(事實上幾乎所有程式都可以這樣設定):

  <keybind key="W-f">
    <action name="Execute">
      <startupnotify>
        <enabled>false</enabled>
        <name>Firefox</name>
      </startupnotify>
      <command>bash -c "if ! wmctrl -l | grep -iq 'Mozilla Firefox'; then firefox ; else wmctrl -a 'Mozilla Firefox'; fi || exit"</command>
    </action>
  </keybind>

  <keybind key="W-c">
    <action name="Execute">
      <startupnotify>
        <enabled>false</enabled>
        <name>Google Chrome</name>
      </startupnotify>
      <command>bash -c "if ! wmctrl -l | grep -iq 'Google Chrome'; then google-chrome ; else wmctrl -a 'Google Chrome'; fi || exit"</command>
    </action>
  </keybind>


用以下指令或重登入,來重新載入修改過的設定檔:
openbox --reconfigure


再次感謝幫助啦。也歡迎修改與進一步增強。

2013/4/18 12:08
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 798
MP : 496 / 25515
EXP: 94
離線
移到程式設計專區,並加精華

2013/4/18 12:42
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 798
MP : 496 / 25515
EXP: 94
離線
你是快速鍵的應用,那如果是滑鼠的點擊要怎麼應用呢?

比如說,我常用的Madedit,已指定.txt檔由它來開啟,開啟第一個.txt檔時問題,它會自動帶到前景來,但是當開第二個檔案時,它也能開啟,但它經常會停留在其它的視窗後面,這個問題不知你可有辦法解決?

好像是可以指定 .txt 檔由另一個 script 來開啟,然後開啟指令這樣寫
madedit.sh %f
那個 %f 就會帶入滑鼠點擊的檔案

具體做法:
對著.txt檔 點右鍵=>屬性=>以此開啟=>加入=>使用自打指令=>輸入 '/home/user/backup/madedit.sh' %f =>加入,即可。

然後那個 madedit.sh 的內容如下
#/bin/bash
/usr/bin/madedit $1

但是剛剛試了一下,好像這樣子做,它就能自動的把第2個開啟的.txt檔的視窗帶到前景來了,我還沒動用到 wmctrl 這個指令,我這個問題就莫名其妙的解決了。

2013/4/18 13:05
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!
會員三級
註冊日期:
2008/12/10 7:19
所屬群組:
已註冊使用者
等級: 15
HP : 0 / 369
MP : 94 / 11355
EXP: 76
離線
懷疑這是個別程式的設計不同。有些程式在重複呼叫的時候,自己就會把主視窗 focus 起來。

剛剛在自己的電腦上試了一下,什麼都不用設定 madedit 就會跳到最前面來,gedit 也一樣。作為反例 geeqie 就跳不起來,依然躲在下面。

2013/4/18 14:01
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 798
MP : 496 / 25515
EXP: 94
離線
madedit 按我上面的設法,有時可以,有時不行。依然躲在其它視窗的下面。

2013/4/18 14:22
應用擴展 工具箱
回覆: 如何偵測一個程式是否存在,如果存在,給予他 focus!

註冊日期:
2009/12/6 10:32
所屬群組:
已註冊使用者
等級: 71
HP : 1404 / 1756
MP : 4456 / 48948
EXP: 24
離線
Focus stealing
你們 描述的 情況 跟這個 好像有點類似
看看 有沒有 啓示 的地方

2013/4/18 14:33
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.