Показать сообщение отдельно
  #1  
Старый 23.11.2012, 11:17
reqyz reqyz вне форума
Начинающий
 
Регистрация: 13.02.2010
Сообщения: 104
Репутация: 10
Вопрос Странный Explorer в Windows 7

Задача казалась бы очень лёгкая, но столкнулся с необычным глюком. Нужно всего лишь запустить процесс Проводника и получить Хэндл его главной формы.

Делаю так:
Код:
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 для проводника ничего не находят, но ведь окно есть, я же нашёл его... спасите мой глюк)
Ответить с цитированием