Hallo,
die Idee als solches finde ich ja gut. Die Zähne beisse ich mir aber schon seit über einer Stunde daran aus, das "Sleep" zu ersetzen, weil es ja hardwareabhängig ist.
Der Grundgedanke ist, aus dem ProcessHandle das WindowHandle zu bekommen.
Delphi-Quellcode:
function ShellExecExplorer(aClientHandle: THandle;
aParameters: string;
var aExplorerHandle: THandle): Boolean;
var
SEI: TShellExecuteInfo;
begin
aExplorerHandle := 0;
FillChar(SEI, SizeOf(SEI), #0);
SEI.cbSize := SizeOf(SEI);
SEI.Wnd := aClientHandle;
SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
SEI.lpVerb := 'open';
SEI.lpFile := PChar('explorer.exe');
SEI.lpParameters := PChar(aParameters);
SEI.lpDirectory := nil;
SEI.nShow := SW_SHOWNORMAL;
Result := ShellExecuteEx(@SEI);
if Result then begin
if SEI.hProcess > 32 then begin
Sleep(1000);
// WaitForInputIdle(SEI.hProcess, INFINITE); hab ich probiert, tut nicht
end;
end;
CloseHandle(SEI.hProcess);
end;
Vielleicht hat ja jemand eine Idee?