Windows 2000に SHCreateItemFromParsingName もどきを実装してみた

Windows 2000のSHELL32に IShellItem限定で 一応ちゃんと動く SHCreateItemFromParsingName を実装してみました

テストコード

int _tmain(int argc, _TCHAR* argv[])
{
    IShellItem *psi;
    //wchar_t dir[]=L"c:\\boot.ini";
    wchar_t dir[]=L"c:\\windows\\system32";
    int hres = CoInitialize(NULL);
    SHCreateItemFromParsingName(dir, NULL,/*CLSCTX_ALL*/ IID_IShellItem, (LPVOID *)&psi);
    if (psi != NULL){
        wchar_t *pth;
            psi->GetDisplayName(SIGDN_FILESYSPATH,&pth);
            MessageBoxW(0,pth,L"",0);
        }
    return 0;
}

実装コード

_declspec(dllexport) HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath,  IBindCtx *pbc, REFIID riid, void **ppv)
{
    LPITEMIDLIST pidl;
    HRESULT result;
    *ppv = NULL;
    result = SHParseDisplayName(pszPath, pbc, &pidl, 0, NULL);
    if(SUCCEEDED(result))
    {
        result = SHCreateItem(NULL, NULL, pidl, (IShellItem **) ppv);
        if(!SUCCEEDED(result))
        {
            ILFree(pidl);
        }
    }
    return result;
}

テスト用に v2.4d3 というバージョンで公開しています。

Windows 2000 Kernel32 改造計画【BM】

Windows 2000に SHCreateItemFromParsingName もどきを実装してみた

Windows 2000のSHELL32に IShellItem限定で 一応ちゃんと動く SHCreateItemFromParsingName を実装してみました

テストコード

int _tmain(int argc, _TCHAR* argv[])
{
    IShellItem *psi;
    //wchar_t dir[]=L"c:\\boot.ini";
    wchar_t dir[]=L"c:\\windows\\system32";
    int hres = CoInitialize(NULL);
    SHCreateItemFromParsingName(dir, NULL,/*CLSCTX_ALL*/ IID_IShellItem, (LPVOID *)&psi);
    if (psi != NULL){
        wchar_t *pth;
            psi->GetDisplayName(SIGDN_FILESYSPATH,&pth);
            MessageBoxW(0,pth,L"",0);
        }
    return 0;
}

実装コード

_declspec(dllexport) HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath,  IBindCtx *pbc, REFIID riid, void **ppv)
{
    LPITEMIDLIST pidl;
    HRESULT result;
    *ppv = NULL;
    result = SHParseDisplayName(pszPath, pbc, &pidl, 0, NULL);
    if(SUCCEEDED(result))
    {
        result = SHCreateItem(NULL, NULL, pidl, (IShellItem **) ppv);
        if(!SUCCEEDED(result))
        {
            ILFree(pidl);
        }
    }
    return result;
}

テスト用に v2.4d3 というバージョンで公開しています。

Windows 2000 Kernel32 改造計画【BM】

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です