1

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

  • 枚举驱动器、文件夹或 shell 命名空间
  • 允许用户导航
  • 显示所选文件夹中的文件
  • 让用户选择一个文件并关闭对话框

但幸运的是,Windows 已经完成了所有 UI 的繁重工作,并为您提供了一个IFileOpenDialog通用对话框:

在此处输入图像描述

创建链接是否存在相同的情况?

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

在此处输入图像描述

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


编辑:另外提醒一下:我不想调用向导-因为向导会在硬盘驱动器上创建链接。而且我不希望它保存在硬盘上。我需要能够得到结果:

  • IShellLink或者
  • IUniformResourceLocator,

或者

  • 地点
  • 标题

用户输入的。

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

4

1 回答 1

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);
            }               
        }
于 2019-07-16T18:15:32.637 回答