Shell Link 通用对话框?
Shell Link common dialog?
在调用 CreateFile
之前,您需要一个文件的名称。您当然可以创建自己的对话框:
- 枚举驱动器、文件夹或 shell 命名空间
- 允许用户导航
- 显示所选文件夹中的文件
- 让用户选择一个文件并关闭对话框
但幸运的是 Windows 已经完成了所有 UI 繁重的工作,并为您提供了 IFileOpenDialog
common dialog:
是否存在创建 link 的相同方法?
Windows Explorer 有一个对话框,可指导用户创建文件、文件夹、项目、url 等的快捷方式:
此对话框是 "common" 对话框 - 可供应用程序使用吗?
编辑:另外提醒:我不想调用 向导 - 因为向导 在硬盘上创建 link。我不想把它保存在硬盘上。我需要 get 结果的能力:
IShellLink
或
IUniformResourceLocator
,
或
- 位置
- 标题
用户输入的。
我需要一个 "location picker" 用户界面。
Does the same exist for creating a link?
Windows Explorer has a dialog that guides the user through creating a
shortcut to a file, folder, item, url, etc:
是的,就是 API NewLinkHereW
一个测试(VS 2015,Windows10)=>
(link 在 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);
}
}
在调用 CreateFile
之前,您需要一个文件的名称。您当然可以创建自己的对话框:
- 枚举驱动器、文件夹或 shell 命名空间
- 允许用户导航
- 显示所选文件夹中的文件
- 让用户选择一个文件并关闭对话框
但幸运的是 Windows 已经完成了所有 UI 繁重的工作,并为您提供了 IFileOpenDialog
common dialog:
是否存在创建 link 的相同方法?
Windows Explorer 有一个对话框,可指导用户创建文件、文件夹、项目、url 等的快捷方式:
此对话框是 "common" 对话框 - 可供应用程序使用吗?
编辑:另外提醒:我不想调用 向导 - 因为向导 在硬盘上创建 link。我不想把它保存在硬盘上。我需要 get 结果的能力:
IShellLink
或IUniformResourceLocator
,
或
- 位置
- 标题
用户输入的。
我需要一个 "location picker" 用户界面。
Does the same exist for creating a link?
Windows Explorer has a dialog that guides the user through creating a shortcut to a file, folder, item, url, etc:
是的,就是 API NewLinkHereW
一个测试(VS 2015,Windows10)=>
(link 在 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);
}
}