perl 如何以程序设计方式检查系统匣的可用性?

ehxuflar  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(159)

启动QSyncthingTray时,如果没有运行任何方案组/托盘,则会显示错误对话框:

I couldn't detect any system tray on this system.
                                         [ OK ]

并且在按下[ OK ]时退出。

  • 奇怪的是,如果QSyncthingTray已经作为任务栏图标运行并关闭面板,QSyncthingTray不会退出,重新启动面板后,QSyncthingTray仍然存在... *

对于我的~/.xsession & ~/.xinitrc启动,我想添加一个循环检查是否存在托盘,伪代码:

loop:
  if system-tray.is-available:
    run QSyncthingTray
    done
  else sleep 1

如何执行if system-tray.is-available
首选语言是Perl,也对Raku和POSIX sh感兴趣。其他语言也受欢迎。

r7knjye2

r7knjye21#

QSyncthingTray使用了Qt c++库中的isSystemTrayAvailable()函数。
你也可以这样做。
is_tray_available.cpp:

// program that exits with zero code when tray is available
// when not available (or program crashes) it should return non-zero

#include <QApplication>
#include <QSystemTrayIcon>

int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  if(QSystemTrayIcon::isSystemTrayAvailable()) return 0;
  else return 1;
}

QT是迟钝的,你需要使用完整的构建系统来构建使用它的程序
is_tray_available.pro

QT += widgets
TARGET = is_tray_available
SOURCES += is_tray_available.cpp

将这两个文件保存在同一目录中,执行qmakemake,瞧,您就得到了可以在shellscript中使用的可执行文件

相关问题