Как вы думаете каким образом можно с наименьшим гемороем из моей НЕ MFC программы вызвать стандартный диалог поиска файлов Windows, передать ему имя файла для поиска и получить из него выбранный файл с путем из наденных в процессе поиска????
Нашел решение для Delphi ( там все просто при работе с DDE):
uses DdeMan;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TDDEClientConv.Create(Self) do
begin
ConnectMode := ddeManual;
ServiceApplication := 'explorer.exe';
SetLink( 'Folders', 'AppProperties');
OpenLink;
ExecuteMacro('[FindFolder(, C:\Мои документы)]', False);
CloseLink;
Free;
end;
end;
Но как быть в С++?????
14.03.07 10:10: Перенесено модератором из 'C/C++' — Odi$$ey
Здравствуйте, Nature, Вы писали:
N>Как вы думаете каким образом можно с наименьшим гемороем из моей НЕ MFC программы вызвать стандартный диалог поиска файлов Windows, передать ему имя файла для поиска и получить из него выбранный файл с путем из наденных в процессе поиска????
N>Нашел решение для Delphi ( там все просто при работе с DDE):
N>uses DdeMan;
N> procedure TForm1.Button1Click(Sender: TObject);
N> begin
N> with TDDEClientConv.Create(Self) do
N> begin
N> ConnectMode := ddeManual;
N> ServiceApplication := 'explorer.exe';
N> SetLink( 'Folders', 'AppProperties');
N> OpenLink;
N> ExecuteMacro('[FindFolder(, C:\Мои документы)]', False);
N> CloseLink;
N> Free;
N> end;
N> end;
N>Но как быть в С++?????
А что, стандартные функции поиска без диалога уже не устраивают?
Здравствуйте, Nature, Вы писали:
N>Как вы думаете каким образом можно с наименьшим гемороем из моей НЕ MFC программы вызвать стандартный диалог поиска файлов Windows, передать ему имя файла для поиска и получить из него выбранный файл с путем из наденных в процессе поиска????
N>Нашел решение для Delphi ( там все просто при работе с DDE):
N>uses DdeMan;
Чудовищный оверхед. Для того, чтобы просто найти файл, вы вызываете через весьма тормозное DDE ещё более тормозной виндовый поиск.
N>Но как быть в С++?????
В C++ с помощью чистой CRT/STL это тоже можно сделать примерно так:
#include <iostream>
#include <vector>
#include <io.h>
void GetFilesInDir(const std::string& dirname, std::vector<std::string>& results){
results.clear();
_finddata_t fdata;
intptr_t hFile;
std::string wildcart = dirname;
wildcart += "\\*.*";
hFile = _findfirst(wildcart.c_str(), &fdata);
if (-1L == hFile) return;
do{
results.push_back(fdata.name);
}while(_findnext( hFile, &fdata) == 0);
_findclose( hFile );
return;
}
int main(){
std::vector<std::string> results;
// Для примера ищем все файлы/папки внутри корня C:\ и выводим на экран
GetFilesInDir("C:\\", results);
for(std::vector<std::string>::const_iterator ci = results.begin();
ci != results.end(); ++ci)
std::cout << (*ci).c_str() << std::endl;
std::cin.get();
return 0;
}