指定したディレクトリ内の.lnkを集める

GnomeDo的なランチャを作るとすれば、所謂スタートメニュー的なところからショートカットを集めてきて、そいつを

http://d.hatena.ne.jp/QtCoder/20110902/1315010586
を参考にして

// ExplorerやFinderでローカルパスを開く
QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation )
QUrl url = QUrl::fromLocalFile( path );
QDesktopServices::openUrl( url );

みたいな形でopenUrlに渡してやればショートカットのアプリケーションを起動できます。

ウィンドウズの場合は、
C:/ProgramData/Microsoft/Windows/Start Menu/Programs
の中に.lnkがあるようなので、とりあえずこのフォルダから.lnkをあつめて表示するだけの
サンプルをつくってみました。

以下ソースです

#include "widget.h"
#include "ui_widget.h"

#include <QDesktopServices>
#include <QUrl>
#include <QDir>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    const QString path = "C:/ProgramData/Microsoft/Windows/Start Menu/Programs";
    QStringList lnks = lnkCollect(path);
    ui->listWidget->addItems(lnks);
}


QStringList Widget::lnkCollect(const QString &dirPath) const{
    QDir dir(dirPath);
    QStringList ans;

    QStringList filter;
    filter += "*.lnk";

    foreach(QString file, dir.entryList(filter, QDir::Files))
        ans += dirPath + QDir::separator() + file;

    foreach(QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
        ans += lnkCollect(dirPath + QDir::separator() + subDir);

    return ans;
}