Задача казалась бы очень лёгкая, но столкнулся с необычным глюком. Нужно всего лишь запустить процесс Проводника и получить Хэндл его главной формы.
Делаю так:
Код:
var
Handl:HWND=0;
function EnumProc(h:HWND; lParam:DWord):boolean; stdcall;
begin
handl:=h;
Result:=handl=0;
end;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
with StartInfo do
begin
cb := SizeOf(StartInfo);
{dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
StartInfo.wShowWindow:=SW_show;//hide;
}
end;
CreateProcessA(nil,{PChar('Explorer n/,/select,"'+paramstr(0)+'"')}'Explorer.exe',nil,nil,false,0,nil,nil,StartInfo,ProcInfo);
//WaitForSingleObject(ProcInfo.hProcess, INFINITE);
WaitForInputIdle(ProcInfo.hProcess, INFINITE);
EnumThreadWindows(ProcInfo.dwThreadId,@EnumProc,0);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end.
в результате в хэндл получаю ноль, хотя для блокнота то же самое спокойно работает
Думал что может для проводника не так с окнами что либо, потестил через таймер:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
a:TPoint;
begin
GetCursorPos(a);
Caption:=inttostr(WindowFromPoint(a));
end;
так работает.
Внимание, Вопрос: что не так в первом коде?
ну и почему для блокнота и др работает, EnumThreadWindows и EnumWindows для проводника ничего не находят, но ведь окно есть, я же нашёл его... спасите мой глюк)