А АWednesday, 6 May 2015

Маленький имитатор безделья.

Всем привет.

Шуточная заметка. Правда, правда. Таким трюками надо заниматься  в детстве. Но вот довелось повторить).

В общем другу поставили MS Lync. А он имеет свойство показывать состояние пользователя за компьютером. А точнее его бездействие. Если не трогается определенное время клавиатура или мышь то пользователь  "Не активен" и далее пишет сколько времени не активен. Не важно какой софт загружен и работает. Вот если друг решил глянуть кино или видео-инструкцию, то это и будет через некоторое время как "Не активен".)  А для друга получается что это можно расценить как бездеятельность! Смешно? Разумеется, но вдруг высокое начальство на это обратит свое внимание.

Надо помочь. Мне на ум пришел трюк из одной книги Фленова с бегающим курсором. 

Схема проста - создаем имитатор передвижения курсора мыши. 

Проект на Delphi: Форма, две кнопки и два таймера. Два таймера которые выполняют события Button1Click() и Button2Click() соответственно. Время на таймерах надо установить разное, но не сильно разное, так чтобы выполнялась простая вещь: один таймер ставит курсор на центр кнопки1 курсор, а другой его смещает на 10 пикселей. Следом опять происходит возврат курсора на кнопку1 и так по циклу до бесконечности. Типа пользователь трудится в поте лица.)

Это код для второй кнопки:
procedure TForm1.Button2Click(Sender: TObject);
var
        pt : TPoint;
begin
  {Позволим кнопке Button2 перерисоваться}
  Application.ProcessMessages;
  {Найдем координаты центра button 1}
  Pt.x := Button1.Left + (Button1.Width div 2);
  Pt.y := Button1.Top + (Button1.Height div 2);
  {Преобразуем Pt к координатам экрана}
  Pt := ClientToScreen(Pt);
  {Преобразуем Pt к "mickeys" (абсолютным координатам курсора мышки}
  Pt.x := Round(Pt.x * (65535 / Screen.Width));
  Pt.y := Round(Pt.y * (65535 / Screen.Height));
  {Переместим курсор мыши}
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
end;


А это код для первой кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var
        pt : TPoint;
begin
        Application.ProcessMessages;
        GetCursorPos(pt);
        SetCursorPos(pt.x + 10, pt.y + 10);
        Application.ProcessMessages;
end;



Замечание - используя функцию SetCursorPos() для второй кнопки не даст эффекта,  MS Lync не среагирует. Нужно использовать API-ную Mouse_Event().

Успехов.

1 comment:

Anonymous said...

Вы скорее, так же как и я, пожинаете плоды верхнего недопонимания работы админа - чем лучше все отлажено, тем больше у него свободного времени. Правда?)

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное