3

ホットキーで起動する Windows 用のアプリケーション ランチャーを作成する予定です。必要なものをクリックして起動できるアイコンのポップアップ グリッドにするつもりです。スタート メニューとデスクトップを自動的にスキャンしてプログラムのショートカットを探し、それらをカタログ化するようにしたいと考えています。ただし、ショートカット/実際のバイナリからアイコンを取得する方法がわかりません。このようなことを処理する C/C++ 用のライブラリがあるかどうか疑問に思っていました。そうでない場合、どうすればいいですか?

4

5 に答える 5

5

使いたいと思いますExtractAssociatedIcon

http://msdn.microsoft.com/en-us/library/ms648067%28v=VS.85%29.aspxを参照して ください。

于 2011-06-23T18:52:05.610 に答える
1
  1. LoadLibraryEx -LOAD_LIBRARY_AS_DATAFILEまたはを使用LOAD_LIBRARY_AS_IMAGE_RESOURCE
  2. EnumResourceNames - リソースを見つける
  3. LoadImage / LoadIcon - 画像/アイコンをロードします
于 2011-06-23T18:57:29.523 に答える
1

この記事は役に立つかもしれません: http://www.codeproject.com/KB/shell/shellicon.aspx

于 2011-06-23T18:57:29.590 に答える
1

resources extractは、dll/ocx/exe ファイルから画像を抽出するツールの 1 つです。

クローズド ソース アプリケーションを使用したくない場合は、ソース付きの Icon Extractorを使用します。

于 2011-06-23T18:46:20.360 に答える
1

ExtractIconEx. 完全なソース コードは、私のオープン ソース プロジェクト、icon.cpp という名前のファイルにあります。システム変数の展開と、インデックスからのアイコンの取得をサポートしています。%SYSTEMROOT%\system32\shell32.dll,43

これがその根性です:

HICON GoFindAnIcon(LPCTSTR path)
{
    HICON icon = 0;

    //not using our parent's icon
    if(_tcsicmp(L"parent", path))
    {
        icon = (HICON)LoadImage(0, path, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_LOADFROMFILE|LR_LOADMAP3DCOLORS);
        if(!icon)
        {
            //Try something else
            TCHAR mypath[MAX_PATH];
            const TCHAR *cleanpath = path;
            const TCHAR *comma;             

            comma = _tcsrchr(path, ',');
            UINT index = 1;

            if(comma)
            {
                _tcsncpy(mypath, path, comma-path); //Can you exploit this buffer overflow ?
                mypath[comma-path] = TCHAR(0);

                index = _ttoi(comma+1);

                cleanpath = mypath;
            }

            ExtractIconEx(cleanpath, index, 0, &icon, 1);
        }
    }
    else
    {
        icon = GetParentProcessIcon();
    }

    return icon;
}
于 2011-06-23T19:16:35.023 に答える