文件对话框选择文件
一丶打开文件
CoInitialize(NULL);
IFileOpenDialog * pOpenFileDlg = NULL;
HRESULT hr = S_FALSE;
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, (LPVOID*)&pOpenFileDlg);
if (SUCCEEDED(hr))
{
hr = pOpenFileDlg->Show(NULL);
if (SUCCEEDED(hr))
{
//从对话框中获取文件名
IShellItem* pItem;
hr = pOpenFileDlg->GetResult(&pItem);
if (SUCCEEDED(hr))
{
//结果成功,获取名字.
PWSTR pszFilePath = NULL;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
//进行你的代码操作. pszFilePath = 打开的路径
CString str(pszFilePath);
m_ChoosPluginEdt.SetWindowTextW(str);
CoTaskMemFree(pszFilePath);//释放内存
}
pItem->Release();
}
}
pOpenFileDlg->Release();//释放内存
}
CoUninitialize();
//保存文件用 IFileSaveDialog 用到再写
获取选择的文件夹
CoInitialize(nullptr);
IFileDialog* pfd = NULL;
HRESULT hr = CoCreateInstance(
CLSID_FileOpenDialog,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pfd));
if (SUCCEEDED(hr))
{
wstring result;
pfd->SetOptions(FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM);
if (pfd->Show(NULL) == S_OK)
{
IShellItem* pitem = NULL;
if (pfd->GetResult(&pitem) == S_OK && pitem)
{
LPWSTR resultptr = NULL;
if (pitem->GetDisplayName(SIGDN_FILESYSPATH, &resultptr) == S_OK && resultptr)
{
result = resultptr; //获得文件夹
CString str(result.c_str());
edt->SetText(str.GetBuffer());
}
pitem->Release();
}
}
CoUninitialize();
pfd->Release();
}
多级目录选择.并且返回对应路径.
std::vector<std::wstring> CinstalltoolDlg::SelectFolders() {
std::vector<std::wstring> paths{};
HRESULT hr = S_FALSE;
hr = CoInitialize(NULL);
IFileOpenDialog* pOpenFileDlg = NULL;
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,
IID_IFileOpenDialog, (LPVOID*)&pOpenFileDlg);
if (SUCCEEDED(hr)) {
FILEOPENDIALOGOPTIONS options;
hr = pOpenFileDlg->GetOptions(&options);
if (FAILED(hr)) {
// 错误处理
}
options |= FOS_PICKFOLDERS | FOS_ALLOWMULTISELECT; // 设置选择目录模式
hr = pOpenFileDlg->SetOptions(options);
if (FAILED(hr)) {
// 错误处理
}
hr = pOpenFileDlg->Show(NULL);
if (SUCCEEDED(hr)) {
// 从对话框中获取文件名
IShellItemArray* pItemArray;
hr = pOpenFileDlg->GetResults(&pItemArray);
if (SUCCEEDED(hr)) {
DWORD count;
hr = pItemArray->GetCount(&count);
if (SUCCEEDED(hr)) {
for (DWORD i = 0; i < count; i++) {
IShellItem* pItem;
hr = pItemArray->GetItemAt(i, &pItem);
if (SUCCEEDED(hr)) {
LPWSTR pFolderPath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pFolderPath);
if (SUCCEEDED(hr)) {
// 错误处理
// 处理选定的目录路径
paths.push_back(pFolderPath);
CoTaskMemFree(pFolderPath);
}
}
pItem->Release();
}
pItemArray->Release();
}
}
}
pOpenFileDlg->Release(); // 释放内存
}
CoUninitialize();
return paths;
}
作者:IBinary
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/13456695.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能. QQ群: