Z
zaoorzo
SetCursorPos(x, y); перемещает курсор на заданную точку,
Почему в Windows Работает а в играх нет?
Почему в Windows Работает а в играх нет?
procedure PMouseDown(x,y: integer);
var
OldCursorPos: TPoint;
begin
//направляем мышкой и тыкаем кнопку
GetCursorPos(OldCursorPos);
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);
SetCursorPos(OldCursorPos.X, OldCursorPos.Y);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
OldCursorPos: TPoint;
begin
//сохраняем позиции
if (GetAsyncKeyState(VK_LBUTTON) <> 0) and (GetAsyncKeyState(vk_Shift) <> 0) then begin
GetCursorPos(OldCursorPos);
memo1.lines.add(inttostr(OldCursorPos.X)+':'+inttostr(OldCursorPos.y));
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i,ckl2,pos1,pos2: integer;
h: HWND;
begin
//начать кликать
for ckl2:= 1 to strtoint(edit2.text)do begin
h:=FindWindow(nil,pchar(form1.edit1.text));
if h <> 0 then begin
//ShowWindow(h, SW_MAXIMIZE);
SetForegroundWindow(h);
for i:= 0 to memo1.lines.Count-1 do begin
If Pos('stop', memo1.lines[i]) <> 0 then begin
pos1:=pos('(',memo1.Lines[i]);
pos2:=pos(')',memo1.Lines[i]);
sleep(strtoint(copy(memo1.Lines[i],pos1+1,pos2-pos1-1)));
end
else
begin
pos1:=pos(':',memo1.Lines[i]);
PMouseDown(strtoint(copy(memo1.Lines[i],1,pos1-1)),strtoint(copy(memo1.Lines[i],pos1+1,length(memo1.Lines[i])-pos1)));
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var OldPos, NewPos : TPoint;
h : HWND;
begin
GetCursorPos(OldPos);
{
К примеру нада поставить курсор в мемо на координаты х = 120
у = 43
}
// задаем необходимые координаты
NewPos.X := 120;
NewPos.Y := 43;
// преобразовываем их для мемо
NewPos :=Memo1.ClientToScreen(NewPos);
// устанавливаем курсор
SetCursorPos(NewPos.X,newpos.Y);
//подождем малость
sleep(1000);
//возвращаем назад курсор
SetCursorPos(OldPos.X, OldPos.Y);
end;
По моему в самый раз. Добавить пока нечего.Для: zaoorzo
Ссылка скрыта от гостей
если актуально
class MSMessageMouse:public MouseDevice
{
private:
char ButtonState[8]; //сотояние кнопок мышки
HWND WndHandle;
int ox, oy; //Предыдущая позиция курсора
public:
stMSMessageMouse()
{
ZeroMemory(ButtonState, 8);
};
void Init(HWND h_Wnd)
{
WndHandle=h_Wnd;
//Возьмем начальную точку курсора
tagPOINT p;
GetCursorPos(&p);
ox=p.x;
oy=p.y;
};
void Done(){};
void ReadData(MouseInfo &Info)
{
MSG Msg;
int m=0;
int lX, lY;
while(PeekMessage(&Msg, WndHandle, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) && m<Info.MaxNum)
{
TranslateMessage(&Msg);
switch (Msg.message)
{
case WM_MOUSEMOVE:
//Мы будем оперировать не с глобальными координатами курсора
//как делает винда, а с пиращениями координат в каждый тик.
lX=LOWORD(Msg.lParam)-ox;
lY=HIWORD(Msg.lParam)-oy;
//заполним смещение по осям
Info.Axis[0]=lX;
Info.Axis[1]=lY;
Info.Axis[2]=0;
//Если мышка изменила координату по x, то добавим соответствующее сообщение
if(lX)
{
Info.Msg[m].Event=id_MoveX;
Info.Msg[m].Value=lX;
m++;
};
//Если мышка изменила координату по y, то добавим соответствующее сообщение
if(lY)
{
Info.Msg[m].Event=id_MoveY;
Info.Msg[m].Value=lY;
m++;
};
//Запомним координаты курсора для вычисления пиращения в следующем кадре
ox=LOWORD(Msg.lParam);
oy=HIWORD(Msg.lParam);
break;
//Для любителей Delphi6, там есть этот меседж и работает он только под NT, в cpp6 его нету.
// И как брать скролл я не знаю.
// case WM_MOUSEWHEEL:
// Info.Msg[m].Event=id_MoveZ;
// Info.Msg[m].Value=HIWORD(Msg.wParam);
// m++;
// break;
//
// Обработка кнопок. Поступаем точно так-же как и с клавиатурой,
// только тут для каждой кнопки свой меседж.
case WM_LBUTTONDOWN:
ButtonState[0]=1;
Info.Msg[m].Event=id_ButtonDown;
Info.Msg[m].Value=0;
m++;
break;
case WM_LBUTTONUP:
ButtonState[0]=0;
Info.Msg[m].Event=id_ButtonUp;
Info.Msg[m].Value=0;
m++;
break;
//Аналогично обрабатываются WM_RBUTTONUP, WM_RBUTTONDOWN, WM_MBUTTONUP и WM_MBUTTONDOWN..
//для WM_RBUTTON Value=1, а для WM_MBUTTON Value=2.
};
memcpy(Info.ButtonState, ButtonState, 8); //Передаем состояние кнопок.
Info.MsgNum=m;
};
};
procedure TMainForm.WndProc(var Message: TMessage);
begin
//тут обрабатывае события
case( Message.WParam )of
WM_MOUSEMOVE: Begin
// тут обрабатываешь все как хочешь ты
// можешь сам принудительно двигать мышь куда угодно
// когда сработает это событие - в параметре
// lParam будут текущие координаты мыши
end;
end;//case
inherited;
end;
[u]WM_MOUSEMOVE Notification[/u]
--------------------------------------------------------------------------------
The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.
A window receives this message through its WindowProc function.
Syntax
WM_MOUSEMOVE
WPARAM wParam
LPARAM lParam;
Parameters
wParam
Indicates whether various virtual keys are down. This parameter can be one or more of the following values.
MK_CONTROL
The CTRL key is down.
MK_LBUTTON
The left mouse button is down.
MK_MBUTTON
The middle mouse button is down.
MK_RBUTTON
The right mouse button is down.
MK_SHIFT
The SHIFT key is down.
MK_XBUTTON1
Windows 2000/XP: The first X button is down.
MK_XBUTTON2
Windows 2000/XP: The second X button is down.
lParam
The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
Return Value
If an application processes this message, it should return zero.
Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab