Главная страницаОбратная связьКарта сайта

Показать диалог поиска файлов

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   DDEMan;

 procedure SearchInFolder(Folder: string);
 begin
   with TDDEClientConv.Create(Self) do
   begin
     ConnectMode        := ddeManual;
     ServiceApplication := "Explorer.exe";
     SetLink("Folders", "AppProperties");
     OpenLink;
     ExecuteMacro(PChar("[FindFolder(, " + Folder + ")]"), False);
     CloseLink;
     Free;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   SearchInFolder("c:\Windows");
 end;

 {************************************}

 // Or even easier with ShellExecute: 

ShellExecute(Handle, "find", "C:\Windows", nil, nil, SW_SHOW);

 {************************************}

 // Suchen-Dialog ausfuhren und einen Suchstring ubergeben: 

uses
   ShellAPI;

 procedure WindowsSuchenDialog(Verzeichnis, Suchstring: string);
 var
   hOtherWin, hFocusWin: HWND;
   OtherThreadID, iTimeOut: Integer;
   aDwordVar: DWORD;
   buf: array [0..40] of Char;
   sVerz: string;
 begin
   // ShellExecute(application.handle, "find", "c:\", nil, nil, SW_SHOWNORMAL); 
  // oder mit TDDEClientConv 
  with TDDEClientConv.Create(nil) do
   begin
     ConnectMode := ddeManual;
     ServiceApplication := "explorer.exe";
     SetLink("Folders", "AppProperties");
     OpenLink;
     sVerz := IncludeTrailingBackslash(Verzeichnis);
     ExecuteMacro(PChar("[FindFolder(, "+ sVerz +")]"), False);
     CloseLink;
     Free;
   end;
   iTimeOut := 0;
   repeat
     { Warten, bis der Such Dialog erscheint. 
      Unter Win95/98/NT4 hat der Suchdilaog die Klasse #32770. 
      Unter ME/2000/XP ist die Suche in den Explorer integriert, 
      darum auf CabinetWClass warten}
     Sleep(100);
     hOtherWin := GetForegroundWindow;
     buf[0] := #0;
     GetClassName(hOtherWin, buf, 60);
     inc(iTimeOut);
   until (StrComp(buf, "#32770") = 0) or (StrComp(buf, "CabinetWClass") = 0) or (iTimeOut > 20);
   if iTimeOut > 20 then Exit;
   repeat
     { Wait until it is visible }
     { Warten, bis das Fenster erscheint }
     Sleep(100);
   until IsWindowVisible(hOtherWin);

   { Handle vom Control finden, welches den Fokus besitzt }
   OtherThreadID := GetWindowThreadProcessID(hOtherWin, @aDwordvar);
   if AttachThreadInput(GetCurrentThreadID, OtherThreadID, True) then
   begin
     hFocusWin := GetFocus;
     if hFocusWin <> 0 then
       try
         SendMessage(hFocusWin, WM_SETTEXT, 0, Longint(PChar(Suchstring)));
       finally
         AttachThreadInput(GetCurrentThreadID, OtherThreadID, False);
       end;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   WindowsSuchenDialog("c:\temp","test.txt");
 end;

Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация по разработке на Delph - "Показать диалог поиска файлов", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2023 Дискета.info