-
DeadMeat © (09.08.08 22:47) [20]
> _Milk (09.08.08 20:16) [19]
Вы меня поражаете... очень. Вы чуть выше читали? Ладно... перецитирую?
> Я проверял.... Я всегда проверяю то, о чем пишу..
По всей видимости, статус скринсейвера вы проверяли по внешнему виду этого окна? А вы попробуйте послеSystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
подождать выставленный вами интервал... И если скринсейвер после этого заработает, то я специально для Вас переустановлю две висты и одну ХР, на которых я все это проверял... и проверю снова на свежей версии, чтобы исключить баги "древней" установки.
Потом прошу отписаться сюда.... -
Городской Шаман (10.08.08 00:24) [21]
> _Milk (08.08.08 09:40) [15]
>
> > DeadMeat (05.08.08 22:35) [10]
>
> > Это не выход... А если зависание системы? Вариантов неожиданного
> > завершения приложения масса.... поэтому полноценное выключение
> > заставки не приемлимо.
>
> Ты прежде чем постить о "теоретическом" поведении скрисейвера,
> лучше бы проверил это практически (Я проверял, завершая
> их ножиданно. Заставка остается включенной, но во время
> работы самого плеера не включается)
> Проверь это практически на своем приложении с SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,
> 1, nil, 0);
> а потом уже пости:(
Угу если программа глюканет то после перезугрузки станет все как раньше, ведь четвёртый параметр
fWinIni установлен в 0, а вот если установить его в
SPIF_UPDATEINIFILE .... -
DeadMeat © (11.08.08 09:04) [22]
> Городской Шаман (10.08.08 00:24) [21]
А "ДО" перезагрузки? Или надо будет в ридми указать, что мол если программа вылетит, то обязательно перезагрузитесь..
Вот об этом и речь... жаль что уважжаемый _Milk этого не хочет принять.
Где он кстати? Проверил? -
ALFA (15.10.08 11:17) [23]Программно, раз в минуту например, делай: SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y);
-
Добежал (22.01.09 19:44) [24]Интересно, а я вот не понимаю, каким образом код:if (msg.message=WM_SYSCOMMAND) and
(msg.wParam=SC_SCREENSAVE) then
handled:=true
else
handled:=false;
может помочь? Получается, тут только или выставляется handled или нет. Если смотреть VCL:function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
Result := True;
if Msg.Message <> WM_QUIT then
begin
Handled := False;
if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end
else
FTerminate := True;
end;
end;
От того, выставлен ли Handled, зависит фактически только то, будет ли вызван DispatchMessage.
В нашем примере при приходе "msg.wParam=SC_SCREENSAVE
" будет handled выставлен в true и соответственно не будет вызван DispatchMessage.
Не понимаю... А как это выглядит с точки зрения Windows? То есть, перед тем как включить заставку она всем окнам рассылает данное сообщение - логично.
Но как она потом собирает результат?! Если над этим сообщением все потоки сделали DispatchMessage, то заставка включается, а если поток хоть одного окна не сделал DispatchMessage над этим сообщением - заставка не включается что ли, логика такова? А интересно сколько по времени тогда ждет винда, чтобы все потоки успели сделать DispatchMessage?
То есть, допустим достаточно всего одного приложения, которое подвисло или еще что и не выбирает из очереди сообщения - чтобы отключения экрана никогда не произошло? Вообще как-то немного бредово выглядит