Сегодня сильно развивается отрасль web-разработки и, в частности последние годы, стало появляться множество web- и flash- игр. В некоторых из них используется сложное управление, требующее несколько манипуляций мышкой или клавиатурой, а может и тем и другим. В таких играх доли секунды могут решить исход всей игры.
Для повышения скорости манипуляций пользователя была разработана утилита (рис.1) с набором команд [1-3]:
- Start>[Буква клавиши по нажатию на которую происходит выполнение скрипта];
- XX>[число определяющее положение курсора относительно левой границы экрана];
- YY>[число определяющее положение курсора относительно правой границы экрана];
- KeyClick>[буква которая будет нажата];
- Time>[число определяющее паузу до следующей команды в милисекундах];
- Stop>[Буква клавиши по нажатию на которую происходит выполнение скрипта].
Рисунок 1- Окно утилиты
Приведем пример реализации модуля обработки команд.
var
x,y: word;
i,k,kkk,po:integer; //Вспомогательная переменная для цикла
s,f:string;
ppp:byte;
RUS: HKL;
begin
po:=0;
if PopupMenu2.Checked then
begin
Skript.Lines.LoadFromFile(‘C:Skript.datas’);
if Skript.Lines.Count>1 then
begin
s:=Skript.Lines[0];
for i:=1 to Length(s) do
if (getasynckeystate( ord(s[i]))<>0) then
for k:=1 to Skript.Lines.Count do
begin
if Skript.Lines[k] = ‘Start>’+s[i] then
begin
po:=11;
Break;
end;
end;
if po=11then
for k:=k to Skript.Lines.Count do
begin
po:=0;
if (Skript.Lines[k] <> ‘Stop>’+s[i])or(pos(s[i],Nab)=0) then
begin
if pos(‘Time>’,Skript.Lines[k])>0 then
begin
sleep(StrToInt(Copy(Skript.Lines[k],6,Length(Skript.Lines[k])-5)));
end;
if (Pos(‘XX>’,Skript.Lines[k])>0)and(Pos(‘YY>’,Skript.Lines[k+1])>0) then
begin
x:= StrToInt(Copy(Skript.Lines[k],4,Length(Skript.Lines[k])-3));
y:= StrToInt(Copy(Skript.Lines[k+1],4,Length(Skript.Lines[k+1])-3));
x := Round(x * (65535 / Screen.Width));
y := Round(y * (65535 / Screen.Height));
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, x, y, 0, 0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, x, y, 0, 0);
end;
if (Pos(‘KeyClick>’,Skript.Lines[k])>0) then
begin
f:=Skript.Lines[k];
kkk:=pos(f[length(f)],Alf)+64;
ppp:=kkk;
SetKbdLayout(ENGLISH);
SetLayoutActiveWnd(ENGLISH);
keybd_event(ppp, MapVirtualKey(ppp, 0), 0, 0);
keybd_event(ppp, MapVirtualKey(ppp, 0), KEYEVENTF_KEYUP, 0);
Application.ProcessMessages;
end;
end;
if Skript.Lines[k]=’Stop>’+s[i] then
begin
break;
end;
end;
off:=1;
end;
end;
Разработанная программа может быть использована как пример при изучении технологий программирования, или при самостоятельной проработке материала по эмуляции клавиатуры и кликов мыши при разработке информационных систем [4, 5].
Библиографический список
- Имитация щелчка мыши в любом месте экрана. URL: http://delphiru.ru/winapi/191-simulationmouseclick
- Эмуляция нажатия клавиши 2. URL: http://delphidevelop.ru/publ/26-1-0-210
- Биддик М. Отслеживая каждый «клик» // Журнал сети и системы связи. 2008. №14. C.42-45.
- Баженов Р.И. Использование системы moodle для организации самостоятельной работы студентов // Журнал научных публикаций аспирантов и докторантов. 2014. № 3 (93). С. 174-175.
- Баженов Р.И. Об организации деловых игр в курсе «Управление проектами информационных систем» // Научный аспект. 2014. Т. 1. № 1. С. 101-102.