Поиск файлов (стандарный диалог Windы)
От: Nature  
Дата: 13.03.07 22:02
Оценка:
Как вы думаете каким образом можно с наименьшим гемороем из моей НЕ 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
Re: Поиск файлов (стандарный диалог Windы)
От: Аноним  
Дата: 13.03.07 23:26
Оценка:
Здравствуйте, 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>Но как быть в С++?????


А что, стандартные функции поиска без диалога уже не устраивают?
Re: Поиск файлов (стандарный диалог Windы)
От: Tilir Россия http://tilir.livejournal.com
Дата: 14.03.07 06:51
Оценка:
Здравствуйте, 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;
}
Re: Поиск файлов (стандарный диалог Windы)
От: Аноним  
Дата: 14.03.07 10:56
Оценка:
N>Как вы думаете каким образом можно с наименьшим гемороем из моей НЕ MFC программы вызвать стандартный диалог поиска файлов Windows, передать ему имя файла для поиска и получить из него выбранный файл с путем из наденных в процессе поиска????

SHFindFiles() API.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.