C++
獲取已安裝應用程序的列表(不是包)
如何在不編寫自己的解析器的情況下獲取已安裝應用程序的列表(基於 /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