|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
вообще explorer это не обычное приложение
Пишу программы за еду. __________________ |
#17
|
||||
|
||||
Вообще експлорер по всей видимости в 7 винде при запуске просит уже запущенный експлорер создать еще одно окно (растет потребляемая память открытого експлорера).
А если запускается второй - кто сказал, что именно главный поток создаст окно? Или что он не запускает еще одну копию себя, которую просит открыть окно? jmp $ ; Happy End! The Cake Is A Lie. |
#18
|
||||
|
||||
Интересно ещё, что второй процесс "explorer.exe" закрывается не сразу после закрытия окна ради которого он был открыт, а через некоторое время...
Действительно "Странный Explorer в Windows 7" |
#19
|
||||
|
||||
Немного добавлю.
Что хотите получить от explorer.exe?, ведь оно используется не только для запуска проводника виндовс, но и так же как shell. К примеру если в реестре: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon Параметр Shell сделать пустым, то после перезагрузки как не запускай explorer.exe - запустится только проводник, причём сколько угодно раз. А если параметр Shell=Explorer.exe, то при первом запуске загрузится рабочий стол (shell), а последующие запускают проводник... Програмистами не рождаются, ими становятся! |
#20
|
|||
|
|||
так что же делать, кто нибудь решение подскажет?
|
#21
|
||||
|
||||
создавай новый рабочий стол без переключения на него и запускай на нем explorer
Пишу программы за еду. __________________ |
#22
|
|||
|
|||
Цитата:
|
#23
|
||||
|
||||
Код:
var p:string; h:HWND; i,i1:integer; begin p:=extractfiledir(application.ExeName); //Извлекаем полный путь до папки h:=0; //Начальный хендл i1:=0;//стартовая позиция поиска if ShellExecute(0,'open',PChar(p),nil,nil,SW_SHOWDEFAULT)=42 then begin //открываем папку с ехе for i := 1 to length(p) do if p[i]='\' then i1:=i; //получаем позицию конечной папки в полном пути p:=copy(p,i1+1,length(p)-i1); //извлекаем название конечной папки while h=0 do h:=FindWindow(nil, PChar(p)); //перебираем окна до тех пор, пока не найдем окно с заголовком с названием папки ShowMessage('Нашлось - '+Inttostr(h)); end; end; Собственно вопрос был - почему хендл explorera находился нулевым. Продолжаем думать. Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 27.11.2012 в 09:45. |
#24
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#25
|
|||
|
|||
Ладно, всем спасибо, решил задачу как извращенец) вот
Код:
path:=ExtractFilePath(ParamStr(0)); delete(path,length(path),1); name:=ExtractFileName(path); with StartInfo do begin cb := SizeOf(StartInfo); end; CreateProcessA(nil,PChar('Explorer n/,/select,"'+paramstr(0)+'"'),nil,nil,false,0,nil,nil,StartInfo,ProcInfo); //WaitForSingleObject(ProcInfo.hProcess, INFINITE); WaitForInputIdle(ProcInfo.hProcess, INFINITE); sleep(1000); Handle:=0; repeat Handle:=FindWindowEx(0,Handle,nil,PChar(name)); GetWindowThreadProcessId(Handle,id); pid:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False,id); SetLength(ExeFile, MAX_PATH); if GetModuleBaseNameA(pid, 0, PChar(ExeFile), MAX_PATH) > 0 then SetLength(ExeFile, StrLen(PChar(ExeFile))) until((lowercase(ExeFile)='explorer.exe')and(IsWindowVisible(Handle))); CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); |
#26
|
|||
|
|||
а в чем был собственно смысл ?
|