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

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: 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;

{/codecitation}

Добавить комментарий