![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Задача казалась бы очень лёгкая, но столкнулся с необычным глюком. Нужно всего лишь запустить процесс Проводника и получить Хэндл его главной формы.
Делаю так: Код:
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 для проводника ничего не находят, но ведь окно есть, я же нашёл его... спасите мой глюк) |