uses SysUtils;
function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar; nShowCmd: integer): integer; stdcall;
external 'Shell32.dll';
function keybd_event(bVk, bScan: byte; dwFlags, dwExtraInfo: integer): integer; stdcall;
external 'user32.dll';
procedure disconnectMonitor;
const
login = 'lgn';
password = 'pwd';
gamePath = 'F:\l2gf\system\l2.exe';
begin
while Delay(3000) do begin
if Engine.Status = lsOffline then begin
print('dc');
Engine.FaceControl(0, false);
Delay(1000);
Engine.GameClose;
Delay(1000);
ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
Delay(10000);
enterText(login);
Engine.UseKey('Tab');
Delay(300);
enterText(password);
Delay(300);
Engine.UseKey('Enter');
Delay(2000);
Engine.UseKey('Enter');
Delay(2000);
Engine.UseKey('Enter');
Delay(2000);
Engine.UseKey('Enter');
Delay(10000);
Engine.FaceControl(0, true);
end;
end;
end;
procedure enterText(const text: string);
var
i: cardinal;
upperCase: boolean;
begin
for i:= 1 to length(text) do begin
if isDigit(text) then
Engine.UseKey(text)
else begin
upperCase:= text = UpCase(text);
if upperCase then begin
keybd_event(20, 0, 1, 0);
keybd_event(20, 0, 2, 0);
Engine.UseKey(text);
delay(10);
keybd_event(20, 0, 1, 0);
keybd_event(20, 0, 2, 0);
end else
Engine.UseKey(text);
end;
Delay(50);
end;
end;
function isDigit(ch: char): boolean;
const
digits = '013456789';
var
i: cardinal;
begin
result:= false;
for i:= 0 to length(digits) do
if digits = ch then begin
result:= true;
exit;
end;
end;
begin
Script.NewThread(@disconnectMonitor);
end.
function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar; nShowCmd: integer): integer; stdcall;
external 'Shell32.dll';
function keybd_event(bVk, bScan: byte; dwFlags, dwExtraInfo: integer): integer; stdcall;
external 'user32.dll';
procedure disconnectMonitor;
const
login = 'lgn';
password = 'pwd';
gamePath = 'F:\l2gf\system\l2.exe';
begin
while Delay(3000) do begin
if Engine.Status = lsOffline then begin
print('dc');
Engine.FaceControl(0, false);
Delay(1000);
Engine.GameClose;
Delay(1000);
ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
Delay(10000);
enterText(login);
Engine.UseKey('Tab');
Delay(300);
enterText(password);
Delay(300);
Engine.UseKey('Enter');
Delay(2000);
Engine.UseKey('Enter');
Delay(2000);
Engine.UseKey('Enter');
Delay(2000);
Engine.UseKey('Enter');
Delay(10000);
Engine.FaceControl(0, true);
end;
end;
end;
procedure enterText(const text: string);
var
i: cardinal;
upperCase: boolean;
begin
for i:= 1 to length(text) do begin
if isDigit(text) then
Engine.UseKey(text)
else begin
upperCase:= text = UpCase(text);
if upperCase then begin
keybd_event(20, 0, 1, 0);
keybd_event(20, 0, 2, 0);
Engine.UseKey(text);
delay(10);
keybd_event(20, 0, 1, 0);
keybd_event(20, 0, 2, 0);
end else
Engine.UseKey(text);
end;
Delay(50);
end;
end;
function isDigit(ch: char): boolean;
const
digits = '013456789';
var
i: cardinal;
begin
result:= false;
for i:= 0 to length(digits) do
if digits = ch then begin
result:= true;
exit;
end;
end;
begin
Script.NewThread(@disconnectMonitor);
end.
Скрипт использует WinAPI-шные функции.
Имитирует нажатие клавиш на клавиатуре, по буквам вводя логин, потом нажимает tab (переводит на 2 строку логина, туда где пароль) и так же по 1 букве вводит пароль.
Само собой, в коде нужно заменить hex-коды нажимаемых клавиш на свои.
function keybd_event(bVk,bScan:byte;dwFlags,dwExtraInfo: integer): integer; stdcall; external 'user32.dll';
function SetCursorPos(x, y : integer): boolean; stdcall; external 'user32.dll';
function mouse_event(dwFlags, dx, dy, dwData: byte; dwExtraInfo: integer): void; stdcall; external 'user32.dll';
procedure pressKey(hexCode: BYTE);
begin
keybd_event(hexCode, 45, 1, 0 );
delay(200);
end;
procedure mouseClick(x, y, _delay : integer);
begin
SetCursorPos(x, y);
mouse_event($2, 0, 0, 0, 0);
delay(_delay);
mouse_event($4, 0, 0, 0, 0);
end;
begin
//login
pressKey($4C);
pressKey($4F);
pressKey($47);
pressKey($49);
pressKey($4E);
//press tab
pressKey($09);
//pwd
pressKey($50);
pressKey($57);
pressKey($44);
//enter
pressKey($0D);
delay(1000);
mouseClick(920, 740, 3000); //клик на соглашение
delay(1000);
mouseClick(960, 550, 1000); // клик на "принять сервер"
delay(1000);
mouseClick(960, 951, 1000); // кнопка старта на выборе чара. Хотя с этого момента можно уже использовать стандартные функции адреналина.
end.
Список KeyCode: http://excelvba.ru/articles/KeyCode
Взято с TopHope
Имитирует нажатие клавиш на клавиатуре, по буквам вводя логин, потом нажимает tab (переводит на 2 строку логина, туда где пароль) и так же по 1 букве вводит пароль.
Само собой, в коде нужно заменить hex-коды нажимаемых клавиш на свои.
function keybd_event(bVk,bScan:byte;dwFlags,dwExtraInfo: integer): integer; stdcall; external 'user32.dll';
function SetCursorPos(x, y : integer): boolean; stdcall; external 'user32.dll';
function mouse_event(dwFlags, dx, dy, dwData: byte; dwExtraInfo: integer): void; stdcall; external 'user32.dll';
procedure pressKey(hexCode: BYTE);
begin
keybd_event(hexCode, 45, 1, 0 );
delay(200);
end;
procedure mouseClick(x, y, _delay : integer);
begin
SetCursorPos(x, y);
mouse_event($2, 0, 0, 0, 0);
delay(_delay);
mouse_event($4, 0, 0, 0, 0);
end;
begin
//login
pressKey($4C);
pressKey($4F);
pressKey($47);
pressKey($49);
pressKey($4E);
//press tab
pressKey($09);
//pwd
pressKey($50);
pressKey($57);
pressKey($44);
//enter
pressKey($0D);
delay(1000);
mouseClick(920, 740, 3000); //клик на соглашение
delay(1000);
mouseClick(960, 550, 1000); // клик на "принять сервер"
delay(1000);
mouseClick(960, 951, 1000); // кнопка старта на выборе чара. Хотя с этого момента можно уже использовать стандартные функции адреналина.
end.
Список KeyCode: http://excelvba.ru/articles/KeyCode
Взято с TopHope