C++

獲取已安裝應用程序的列表(不是包)

  • December 19, 2014

如何在不編寫自己的解析器的情況下獲取已安裝應用程序的列表(基於 /usr/share/applications/ 中的文件)?我只需要應用程序名稱、應用程序圖示的路徑和啟動應用程序的路徑。

我將 C++ 與 Qt 庫一起使用。當然,你可以給我寫 shell 命令或其他類似的東西。

這是一個可能對您有所幫助的快速而骯髒的 shell 腳本。將輸出格式調整為易於解析的格式。找到正確的圖示可以使用一些改進來選擇最高解析度的圖像。也許有更好的方法來獲得最佳圖示gconftool,我不知道。

#!/bin/sh

icon_basedir1=/usr/share/icons/gnome
icon_basedir2=/usr/share/icons/hicolor
icon_basedir3=/usr/share/pixmaps
icon_basedir4=/usr/share/app-install/icons

error() {
   echo $*
   exit 1
}

is_icon() {
   test -f "$1" && icon_path="$1" && return 0
   icon_path=$(find $2 -name $1.png | sort -r | head -n 1)
   test -f "$icon_path" && return 0
}

find_icon() {
   test "$icon_filename" || return
   is_icon $icon_filename $icon_basedir1 && return
   is_icon $icon_filename $icon_basedir2 && return
   is_icon $icon_filename $icon_basedir3 && return
   is_icon $icon_filename $icon_basedir4 && return
}

find_name() {
   test "$fullname" && name=$fullname && return 0
   test "$genericname" && name=$genericname && return 0
}

find /usr/share/applications -type f -name \*.desktop | while read file; do
   icon_filename=$(cat $file | grep ^Icon= | sed -ne 's/^.*=//' -e '1 p')
   find_icon
   executable_name=$(cat $file | grep ^Exec= | sed -ne 's/^.*=//' -e 's/ .*//' -e '1 p')
   fullname=$(cat $file | grep FullName.en_ | sed -ne 's/^.*=//' -e '1 p')
   genericname=$(cat $file | grep GenericName.en_ | sed -ne 's/^.*=//' -e '1 p')
   name=$(cat $file | grep -i Name | sed -ne 's/^.*=//' -e '1 p')
   find_name
   echo app_file=$file
   echo name=$name
   echo executable=$(which $executable_name || echo $executable_name)
   echo icon=$icon_path
   echo
done

引用自:https://unix.stackexchange.com/questions/40878