![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обмануть таймер простоя [D7, XP]
Dymok © (2013-07-19 16:10:00)Есть RDP-сервер (WindowsServer2008R2), на котором настроено завершение сеанса пользователя через некоторое время его бездействия.
Как обойти это ограничение?
Пробовал вот так эмулировать периодическое нажатие клавиши, движение мышью- все не помогает:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
setcursorpos(random(Screen.Width-1), Random(Screen.Height-1));
keybd_event(VK_SHIFT,0,0,0);
keybd_event(VK_MENU,0,0,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
SendMessage(Edit1.handle, wm_char, ord('E'), 0);
end;
Вова (2013-08-22 13:52:00) [1]
> сделать железный эмулятор - включается в USB и нажимает
> кнопки...
сделать программный эмулятор железного эмулятора, рассказывайте как :-D
RWolf (2013-08-22 10:30:00) [2]Приобрести отладочную плату на STM32, внести лёгкие правки в поставляемую в комплекте программу эмулятора мыши и воткнуть плату в свободный порт USB.
Результат — курсор ездит по экрану сам, RDP побеждён.
Нетривиально, зато интересно.
antonn (2013-08-22 10:18:00) [3]
> Во-вторых, я не знаю, как там RDP отслеживает активность
> пользователя
вроде через WinStationQueryInformationW
Комп2 (2013-08-22 00:32:00) [4]сделать железный эмулятор - включается в USB и нажимает кнопки...
Dymok (2013-07-29 12:58:00) [5]1) Программа, вызвавшая SetThreadExecutionState - остаётся запущена
закрываю RDP-соединение не завершая сеанс пользователя.
2) Под "активностью" пользователя понимается то, что он (то есть я! )) ) должен или двигать мышкой или нажимать любые кнопки, не реже чем установлен разрешенный период "бездействия"
Т.е. собственно вопрос сводится к тому, как сказать винде что нажата кнопка или подвинута мышь, так, чтобы она не поняла что это "имитация"
Inovet (2013-07-29 10:28:00) [6]> [7] Dymok © (29.07.13 08:48)
> Но, к сожалению, SetThreadExecutionState, всё равно не
> помогла, наверно винду так легко не обманешь ((
Во-первых, программа, вызвавшая SetThreadExecutionState, должна быть запущена. Во-вторых, я не знаю, как там RDP отслеживает активность пользователя. Во всяком случае SetThreadExecutionState не имитация активности и не обман, а сообщение системе о необходимости не уходить в спячку, а под активностью пользователя может подразумеватья нечто другое.
Dymok (2013-07-29 08:50:00) [7]brother, флаги ES_XXX тоже пробовал
Dymok (2013-07-29 08:48:00) [8]Спасибо. Самое трудное для меня было написать вызов API - функции, используя описание от Microsoft. Хотя честно читал статью про это на королевстве, всё равно было как-то непонятно...
Но, к сожалению, SetThreadExecutionState, всё равно не помогла, наверно винду так легко не обманешь ((
brother (2013-07-23 20:55:00) [9]яб нашел, где описаны флаги ES_XXX и использовал бы их...
Inovet (2013-07-23 16:01:00) [10]> [4] Dymok © (22.07.13 09:19)
> А как вызвать SetThreadExecutionState?
Так всё же в справке есть.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa373208%28v=vs.85%29.aspx
function SetThreadExecutionState(esFlags: UINT): UINT; stdcall; external 'Kernel32' name 'SetThreadExecutionState';
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if SetThreadExecutionState($00000001 + $80000000) = 0 then
ShowMessage('Чёта не получилось, придётся спать.')
else
ShowMessage('Нескафе голд - не замерзай ночью!');
end;
Dymok (2013-07-22 09:19:00) [11]А как вызвать SetThreadExecutionState? Не могу разобраться. В Windows.pas она не описана...
Inovet (2013-07-19 18:54:00) [12]> [2] брат Птибурдукова (19.07.13 18:11)
Ленивый одмин не делает.
брат Птибурдукова (2013-07-19 18:11:00) [13]
> Есть RDP-сервер (WindowsServer2008R2), на котором настроено
> завершение сеанса пользователя через некоторое время его
> бездействия.
Так может, стоит перенастроить, а не пытаться обмануть?
Inovet (2013-07-19 17:13:00) [14]Может, это надо?
SetThreadExecutionState