-
Хочется сделать так, как это реализовано в видео-плеерах. То есть, запретить Windows отключать дисплей, уходить в hibernate и подобное на время, пока приложение запущено. Даже если в это время никакие клавиши не нажимаются и мышка не двигается.
-
а может это просто выключить в винде?
-
По крайней мере частично поможет
The WM_QUERYENDSESSION message is sent when the user chooses to end the Windows session or when an application calls the ExitWindows function. If any application returns zero, the Windows session is not ended. Windows stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.
не знаю, как там с хибернацией
-
скучная копипаста из smplayer: bool BaseGui::winEvent ( MSG * m, long * result ) else else
}
}
}
return false;
}
и ещё:
void WinScreenSaver::disable()
qDebug("WinScreenSaver::disable: lowpower: %d", lowpower);
qDebug("WinScreenSaver::disable: poweroff: %d", poweroff);
qDebug("WinScreenSaver::disable: screensaver: %d", screensaver);
if (lowpower != 0) SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, 0, NULL, 0);
if (poweroff != 0) SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, 0, NULL, 0);
if (screensaver != 0) SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, 0, NULL, 0);
}
void WinScreenSaver::restore() else
}
есть мнение, что этого должно хватить для самостоятельного разбора. --- Understanding is not required. Only obedience.
-
-
> По крайней мере частично поможет
TUser, ты вообще понял о чем ветка то? Причем тут завершение сессии вообще? > скучная копипаста из smplayer:
не катит... В ветке DeadMeat приведена цитата из MS: Microsoft Windows Vista and later: If password protection is enabled by policy, the screen saver is started regardless of what an application does with the SC_SCREENSAVE notification—even if fails to pass it to DefWindowProc. to DeadMeat, нда... Я тоже удивлен, что нету способа окромя эмуляции нажатий клавиш... И сама MS это рекомендует?! Впрочем в ихнем примере я тоже не понял почему ( http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Interaction/264.mspx ) Листинг 2.
' посылка символа в буфер клавиатуры
Call SendMyKey(Chr$(9)) ' клавиша Tab
' почему-то нужно сделать вывод окна
' — тогда срабатывает посылка символа
MsgBox "Hello!"
Мы не смогли понять почему, но посланный символ срабатывает только в случае, если программа потом выдает на экран еще какое-либо окно. Почему это даже MS не знает и вообще почему нужно показывать какое-то окно, чтобы посылка символа "засчиталась"?! Бред какой-то... Получается раз в минуту там допустим нужно посылать код клавиши да еще какое-то окно выводить при этом?
-
DeadMeat, и еще вопрос - тут разговор именно о скринсейве. Но я не знаю - отключение экрана и скринсейвер это взаимосвязанные операции? То есть, ведь может быть так, что скринсейвер отключен, но зато указано отключение монитора через допустим 5 минут. При таких настройках все равно будет посылаться сообщение SC_SCREENSAVE? Ты что об этом думаешь?
И вообще, ты сам в результате как реализовал?
-
то есть, копипастил я зря. ну и иди нафиг, ректалоинженер.
--- All Your Base Are Belong to Us
-
-
> Agent13 © (20.01.09 23:21) [8]
Все бы ничего, но вот:
> ES_CONTINUOUS > Informs the system that the state being set should remain > in effect until the next call that uses ES_CONTINUOUS and > one of the other state flags is cleared.
Т.е. если не вызвать с этим флагом второй раз, то ничего назад не вернется. И далее там же:
> This function does not stop the screen saver from executing.
Сам сейчас пробовал. Правда не останавливает.
-
>[9] DeadMeat (2009-01-21 10:24:00) а я таки упорно не понимаю, чем не нравится копипаста из smplayer'а. ну, кроме того, что требует привилегий на смену некоторых параметров. однако ж в задаче на это ограничений нет.
--- All Your Base Are Belong to Us
-
> ketmar © (21.01.09 12:29) [10]
Ну чем не нравится автору мне не известно, а мне не нравится тем, что при аварийном завершении приложения, параметры не восстановятся. Т.е. с одной стороны вроде и правильно так делать, но с другой...
-
> а мне не нравится тем, что при аварийном завершении приложения, > параметры не восстановятся
абсолютно тем же не нравится, и это все грамотно расписано в ветке http://pda.delphimaster.net/?id=1217672834&n=5 которую ketmar видимо не читал но в своем фирменном стиле все равно по старинке всех обосрал.
-
DeadMeat, как в результате ты все таки реализовал? Или ты в процессе?
-
> Добежал
SendInput с INPUT_MOUSE и нулевыми координатами вызывай раз в 50 секунд и все.
-
>[11] DeadMeat (2009-01-21 12:59:00) >а мне не нравится тем, что при аварийном завершении приложения, параметры не >восстановятся. мне что, надо было весь код написать за топикстартера? в том числе и отлов аварийных завершений с восстеновлением параметров? или топикстартер таки включит мозг и сделает это сам?
зыж а тут ещё удивляются в другом топике, почему помогать никто не хочет. неужто всё ещё непонятно? задолбали. всё больше думаю, что шутка про идеальную IDE с одной кнопкой была совсем не шуткой…
--- Understanding is not required. Only obedience.
-
> SendInput с INPUT_MOUSE и нулевыми координатами
в смысле с нулевыми? Так тогда ж мышка будет улетать каждые 50 секунд в левый верхний угол, это как-то не фонтан.
> мне что, надо было весь код
тебе мне кажется надо перестать форумы посещать. Вот есть люди типа Юрия Зотова - почему от них никогда не дождешься такого? Ты же в любой абсолютно ветке так себя ведешь. Я не видел НИ РАЗУ, чтобы отвечая на вопрос ты не обосрал автора топика. Просто не помню такого. Имхо, самореализацию лучше перенести в реальность.
-
Добежал (21.01.09 13:49) [16]
> тебе мне кажется надо перестать форумы посещать
Скорее тебе следует перестать их посещать. Потому что ветки с втоим участием чаще всего перерастают в свару не в последнюю очередь из-за твоих хамских манер. Можешь считать этот пост официальным предупреждением и не разводить дискуссию на эту тему.
-
Удалено модератором
-
Удалено модератором Примечание: Создание пустых сообщений
-
Интересно, а я вот не понимаю, каким образом код: 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? То есть, допустим достаточно всего одного приложения, которое подвисло или еще что и не выбирает из очереди сообщения - чтобы отключения экрана никогда не произошло? Вообще как-то немного бредово выглядит
|