![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При выходе из скринсейвера Винда закрывает запущенные им процессы [D7, Win2k]
Barvetal © (2005-08-26 17:16:00)Всем привет!
Пишу скринсейвер. Скринсейвер должен работать следующим образом:
После запуске, в нем можно работать мышкой. То-есть, при дергании мышкой из скринсейвера выхода не должно происходить. Скринсейвер должен содержать ряд интернет-ссылок. При щелчке мышкой на любую ссылку скринсейвер открывает браузер и загружает ссылку, после чего должен выгружаться.
Так вот. Проблема в чем. Если запускать скринсейвер вручную (двойным щелчком или нажатием на кнопку Preview в диалоге Display панели управления), то все отрабатывает как нужно. Но. Если выставить диапазон запуска (например, 1 минуту), то после нажатия на ссылочку открывается браузер, и через секунду закрывается, сразу после закрытия скринсейвера (это при условии, что ни одного экземпляра браузера не было запущено). Таким образом, выходит, что винда (Вин2000) после выгрузки скринсейвера убивает все созданные им процессы.
И еще такой момент, если был запущен хоть один экземпляр Интернет Эксплорера, то при описанном выходе из скринсейвера вновь открытый экземпляр Интернет Эксплорера не закрывается, и все работает как нужно.
Решил проверить, дело только в интернет-эксплорере, или нет. Написал скринсейвер, который запускается, и в процессе своего запуска запускает еще и Ворд. Так вот, если ни одного экземпляра ворда не было запущено до запуска скринсейвера, то ворд при закрытии скринсейвера тоже закрывается. Если хоть один экземпляр ворда был, то не закрывается. То-есть, ситуация полностью идентична предыдущей.
Таким образом, вопрос. Как сделать, чтобы при выходе из скринсейвера, запущенного согласно периоду ожидания, винда не закрывала запущенные скринсейвером процессы?
Всем заранее спасибо за ответы!!
Barvetal (2005-08-26 19:26:00) [21]2 alpet и всем остальным:
Вот, сделал код активации скринсейвера следующим:
procedure TScrForm.FormActivate(Sender: TObject);
var
si : TSTARTUPINFO;
ProcInfo : TProcessInformation;
begin
FillChar(si, SizeOf(si), 0);
FillChar(ProcInfo, SizeOf(ProcInfo), 0);
si.wShowWindow := SW_SHOWNORMAL;
si.dwFlags := STARTF_USESHOWWINDOW;
si.lpDesktop := PChar('default');
Result := DWORD(CreateProcess(nil, PChar('D:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE'), nil, nil, false, 0, nil, nil, si, ProcInfo));
CloseHandle(ProcInfo.hThread);
CloseHandle(ProcInfo.hProcess);
end;
То-есть, в параметр lpDesktop структуры StartupInfo загнал значение ' default'. Пробовал до этого еще и ' WinSta0\Default'. Проблема та же. При завершении скринсейвера Ворд также пропадает с экрана :(
Скажите пожалуйста, что же я не так делаю?? Получается, несмотря на мой код, ворд все равно не запускается на десктопе default... :(
alpet (2005-08-26 18:27:00) [22]Правильно система поступает - когда завершается скринсейвер - она переключает десктоп из Screen-Saver на Default. Запущенные программы, остаются изолированными в десктопе 'Screen-Saver'. По идее, под скринсейвером ничего лишнего (как и под Winlogon) выполнятся не должно.
DeadMeat (2005-08-26 18:25:00) [23]А если проверить тоже самое на блокноте?
---
...Death Is Only The Begining...