スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windowsのショートカットファイルのリンク先パスを取得する関数

QtのAPIにはどうもWindows形式のショートカットファイルを操作する機能が無いようなので自分で作ってみました。


・ヘッダ
#pragma once

#include <QString>
#include <string>


class WinShortcut
{
public:
    static std::wstring parse(const std::wstring& lnkPath);
    static QString parse(const QString& lnkPath);
};


・ソース
#include "stdafx.h"
#include "WinShortcut.h"

#include <objidl.h>
#include <shlobj.h>



std::wstring WinShortcut::parse(const std::wstring& lnkPath)
{
    IShellLink* psl;
    HRESULT hr = CoCreateInstance(
        CLSID_ShellLink,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IShellLink,
        (LPVOID*) &psl);

    if (!SUCCEEDED(hr))
        return L"";

    std::wstring ds;

    IPersistFile* ppf;
    hr = psl->QueryInterface(IID_IPersistFile, (LPVOID*) &ppf);
    if (SUCCEEDED(hr))
    {
        hr = ppf->Load(lnkPath.c_str(), STGM_READ);
        if (SUCCEEDED(hr))
        {
            wchar_t ws[MAX_PATH];

            WIN32_FIND_DATA wfd;
            psl->GetPath(ws, MAX_PATH, &wfd, SLGP_UNCPRIORITY | SLGP_RAWPATH);

            ds = ws;
        }

        ppf->Release();
    }

    psl->Release();
    return ds;
}

QString WinShortcut::parse(const QString& lnkPath)
{
    std::wstring wp = lnkPath.toStdWString();
    return QString::fromStdWString(parse(wp));
}



基本的にはWindowsのAPIをたたいているだけという感じの内容です。

これで

QString dst_path = WinShortcut::parse(QString("C:\\aaa\\bbb.lnk"));

のようにショートカットファイルを指定してやると、そのリンク先のパスを取得することができます。
スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。