我如何通过脚本激活面板图标(或获取其屏幕坐标;单击它)?

我如何通过脚本激活面板图标(或获取其屏幕坐标;单击它)?

该问题出现在 Lucid 10.04 桌面(即没有 Unity)的背景下。

我大部分屏幕导航都是通过键盘(而不是鼠标)进行的,因此我正在寻找一个脚本解决方案来重新激活已“最小化”到面板通知区域的应用程序。

我会用Skype举个例子。

wmctrl允许我访问正常最小化的窗口,但当 Skype“最小化”到通知区域时,它就“消失”了,控制端被关注到。

考虑到通知区域中的图标位置可能会有所不同,是否有某种方法可以确定 Skype 面板图标的屏幕坐标,以便我可以使用xdotool(或类似的实用程序)“单击”它?

...或者也许有更直接的方法来激活“休眠”的 Skype?...(我不是指鼠标;)

到目前为止,这是脚本。希望它能清楚地说明我想做什么:

#!/bin/bash
procname="skype-wrapper"
windmask="Skype™"
if [[ $(pgrep -x -n -c "$procname") == 1 ]] ; then 
  wintitle="$(wmctrl -l |grep "$windmask" |head -n 1 |sed -n "s/^.\+${HOSTNAME} \(.*\)/\1/p")"
  if [ "$wintitle" = "" ] ; then
    echo "Click on Skype's Panel-icon to show the main window"  
    ###############################################################
    # How can I find the screen co-ordinates of Skype's Panel Icon
    ###############################################################
  else
    # Skype is running, and has (at least) one visible window which matches $windmask. Activate it.
   wmctrl -a "$wintitle"
  fi
else 
  # The process is not currently running. Start it.
  ("$procname" &)
fi

答案1

怎么样:

#!/usr/bin/env python

import dbus

# Get a D-Bus interface to Skype
bus = dbus.SessionBus()
skype_object = bus.get_object('com.Skype.API', '/com/Skype')
skype = dbus.Interface(skype_object, dbus_interface='com.Skype.API')

# Ask for permission to control Skype
response = skype.Invoke("NAME " + __file__)
response = skype.Invoke("PROTOCOL 8")

# Issue commands
response = skype.Invoke("SET WINDOWSTATE NORMAL")

它并不像你想要的那样通用,但它可能能完成工作。除了简单的个人用途之外,它还需要添加一些错误处理功能。

来源:Skype 公共 API 参考

答案2

http://d01.megashares.com/dl/161a012/Skype.zip

  • zskypewrapper.sh 是我用来显示 Skype 的自定义脚本(@fred.bear,无论对错,我只需“wmctrl -a Skype™”即可显示一个已经存在的窗口)。
  • showskype.py 是上述ændrük 的脚本,经过修改后还可以打印 Skype 的返回代码。
  • Skype.desktop 是我为 Docky 创建的一个 .desktop 文件,这也是我编写 zskypewrapper.sh 的全部原因(但 zskypewrapper 无需 .desktop 即可工作,我甚至还添加了一些仅在命令行中有用而 Docky 永远无法使用的逻辑)。这个 .desktop 本身并不是必需的;我所做的只是 nautilus->右键单击->创建启动器并放入 zskypewrapper.sh。

zskypewrapper.sh 和 showskype.py 需要可执行且位于 $PATH 的某个位置。

希望这对某人有帮助。:-D

答案3

我已经设法编写了一个可以完成这项工作的 Python 脚本(......学习曲线很大,但是一种很好的学习方法:)

它不会成为主流,但我会为任何可能感兴趣的人发布它。

因为我不知道如何直接确定特定通知托盘图标的坐标,所以我不得不“搜索”该图标。

为了识别图标,脚本有一个“每个图标一次”的 CAPTURE 过程,它可以识别(希望)唯一的一行像素...幸运的是图标的颜色非常丰富。
(捕获过程调用 2 个次要的 bash 脚本)

我不知道问库本图政策是关于大量代码发布,因此,在我确定是否可以之前,我已将其发布到pastebin.ubuntu.com

主脚本实际代码有 140 行,但运行到 240 行加上注释,并且由于某些未知原因,在粘贴箱,很多行(但不是全部)都是双倍行距,将其推至 339!(我的编辑器设置为 Unix LF)...

以下是主要 python 脚本和 2 个辅助 bash 脚本的链接;

相关内容