![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 для проводника ничего не находят, но ведь окно есть, я же нашёл его... спасите мой глюк) |
|
#2
|
||||
|
||||
|
Цитата:
UPD. Кстати, а эксплорер хоть запускается? Он же завершается, если обнаруживает что одна его копия уже запущена. Последний раз редактировалось poli-smen, 23.11.2012 в 11:23. |
|
#3
|
|||
|
|||
|
так я с одмина сижу, да и если через WindowFromPoint(a) работает, почему так не хочет?
|
|
#4
|
||||
|
||||
|
Цитата:
Кстати, а эксплорер хоть запускается? Он же завершается, если обнаруживает что одна его копия уже запущена. |
|
#5
|
|||
|
|||
|
Цитата:
да, запускается нормально и никуда не исчезает, прямо сейчас на него смотрю, и через енум хэндл 0, а через наведение, находит( блин.. |
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Цитата:
Последний раз редактировалось reqyz, 23.11.2012 в 11:45. |
|
#8
|
||||
|
||||
|
EnumWindows находит CabinetWClass. и даже можно до SysListView32 добраться
|
|
#9
|
||||
|
||||
|
Цитата:
Код:
Caption:=IntToStr(ProcInfo.dwProcessId); А ты вообще как определяешь что у тебя запущено несколько процессов "explorer.exe". Что-то помоему врёшь ты мне. |