Shell Link常用对话框?

时间:2019-07-16 17:13:59

标签: windows winapi windows-shell common-dialog

在调用CreateFile之前,需要文件名。您当然可以创建自己的对话框:

  • 枚举驱动器,文件夹或Shell名称空间
  • 允许用户浏览
  • 显示所选文件夹中的文件
  • 让用户选择一个文件并关闭对话框

但是幸运的是Windows已经完成了所有UI的繁重工作,并为您提供了IFileOpenDialog common dialog:

enter image description here

创建链接是否存在相同的内容?

Windows资源管理器有一个对话框,指导用户创建文件,文件夹,项目,URL等的快捷方式:

enter image description here

此对话框是否为“通用” 对话框-可供应用程序使用?


编辑:也提醒您:我不想调用 向导-因为向导创建了硬盘驱动器上的链接。而且我不希望它保存在硬盘上。我需要能够获取结果:

  • IShellLink
  • IUniformResourceLocator

  • 位置
  • 标题
用户输入的

我需要一个“位置选择器”用户界面。

1 个答案:

答案 0 :(得分:1)

  

创建链接是否存在相同的内容?

     

Windows资源管理器有一个对话框,指导用户创建一个   文件,文件夹,项目,URL等的快捷方式:

是的,它是API NewLinkHereW

一个测试(VS 2015,Windows 10)=>

(在 e:\ test 中为示例创建的链接)

        typedef void(WINAPI *NLH)(HWND hwnd, HINSTANCE hAppInstance, LPTSTR lpszCmdLine, int nCmdShow);
        NLH NewLinkHereW;
        HMODULE hDll = LoadLibrary(L"appwiz.cpl");
        NewLinkHereW = (NLH)GetProcAddress(hDll, "NewLinkHereW");
        WCHAR wsFolder[MAX_PATH] = L"e:\\test";
        lstrcat(wsFolder, L"\\newlink.lnk");
        if (NewLinkHereW)
        {
            HANDLE hLink = CreateFile(wsFolder, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
            if (hLink != INVALID_HANDLE_VALUE)
            {
                CloseHandle(hLink);
                NewLinkHereW(GetDesktopWindow(), NULL, wsFolder, SW_SHOWNORMAL);
            }               
        }