Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обмануть таймер простоя [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо