Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Delphi - Kompendium Bociarza


Rekomendowane odpowiedzi

Opublikowano

Witam

 

W związku z tym, że ostatnio mam chęć powiększenia swojej wiedzy na temat pisania botów w Delphi. Postanowiłem utworzyć temacik w którym zadam szereg pytań niezbędnych moich zdaniem osobom chcącym pisać boty.

 

Postaram się Wasze odpowiedzi na te pytanka zebrać do kupy i trzymać w tym temacie jako pomoc dla przyszłych noobków. Do rzeczy

 

Lista pytań.

 

1. Jak zrobić poruszyć myszką z jednego miejsca do drugiego. (opowiednik AutoIT MouseMove)

2. Jak kliknąć myszką lewym/prawym przyciskiem myszy. (AutoIT MouseClick)

3. Jak zmienić długość kliknięcia myszy dla danego programu?

4. Jak zmienić długość przyciśnięcia klawisza klawiatury po przyciśnięciu ?

5. Jak Przesunąć kursor myszki z jednego miejsca na drugie w danym oknie?

6. Jak kliknąć na dane coordinates w danym oknie?

7. Jak uczynić dane okno aktywnym? (Winactivate)

8. Jak sprawdzić czy dane okno jest aktywne? (Winactive)

9. Jak wysłać znak / ciąg znaków do danego okna ?

10. Jak odczytać kolor z danego okna w danym położeniu, ewentualnie jak sprawdzić czy pixel o danym kolorze znajduje się na danych coordach?

11. Jak uruchomić odliczanie czasowe ( timer )?

12. Jak zamknąć okno/proces?

13. Powinno się tutaj znaleźć jakieś standardowe pytanie, którego nie ma ?

Opublikowano

Wiec pewnie sie przyda dla paru osob do poczytania ..

 

function mouseclick(key:integer;x:integer;y:integer;click:integer;speed:integer;push:inte

er):integer;

var

i: integer;

begin

x:= MulDiv(x, 65535, screen.width);

y:= MulDiv(y, 65535, screen.Height);

for i:=0 to click do

begin

if key = 1 then

begin

 

if i = 0 then

begin

mouse_event(MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);

end;

sleep(speed);

mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE, 0, 0, 0,0);

sleep(push);

mouse_event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE, 0, 0, 0,0);

end;

if key = 2 then

begin

if i = 0 then

begin

mouse_event(MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);

end;

sleep(speed);

mouse_event(MOUSEEVENTF_RIGHTDOWN or MOUSEEVENTF_ABSOLUTE, 0, 0, 0,0);

sleep(push);

mouse_event(MOUSEEVENTF_RIGHTUP or MOUSEEVENTF_ABSOLUTE, 0, 0, 0,0);

end;

 

end;

i:=0;

 

end;

 

a tutaj nieastapiony pixelsearch autoitowy troche zmieniony pod delphi ;)

 

function pixelsearch(X, Y,X1,Y1: Integer;color:string): string;

const

CAPTUREBLT = $40000000;

var

hdcScreen: HDC;

hdcCompatible: HDC;

bmp: TBitmap;

hbmScreen: HBITMAP;

kolor: Tcolor;

ptr : pointer;

ptr2: pointer;

i: integer;

ii:integer;

posx:integer;

posy:integer;

label skoniec;

begin

hdcScreen := CreateDC('DISPLAY', nil, nil, nil);

hdcCompatible := CreateCompatibleDC(hdcScreen);

 

hbmScreen := CreateCompatibleBitmap(hdcScreen,x1-x,y1-y);

SelectObject(hdcCompatible, hbmScreen);

bmp := TBitmap.Create;

BitBlt(hdcCompatible, 0, 0,x1-x, y1-y, hdcScreen, X, Y, SRCCOPY or CAPTUREBLT);

bmp.Handle := hbmScreen;

posx:=0;

posy:=0;

for i:=0 to Y1-Y-1 do

begin

ptr := Pointer(Integer(bmp.ScanLine));

 

for ii:=0 to X1-X-1 do

begin

ptr2 := Pointer(integer(ptr) + (ii*4) );

kolor := PColor(ptr2)^ ;

kolor := RGB(GetRValue(kolor), GetGValue(kolor), GetBValue(kolor));

if color = inttohex(integer(kolor),8) then

begin

posx:= ii+X;

posy:=i+Y;

goto skoniec {wyskok na koniec}

end;

end;

end;

 

skoniec:

result:= inttostr(posx) + ' ' + inttostr(posy);

bmp.Free;

DeleteDC(hdcScreen);

DeleteDC(hdcCompatible);

end;

 

Mysle ze starczy jak narazie niech inni sie wypowiedza :)

Opublikowano

Ale czemu chcesz zrobic wszystko tj bys pisal w autoicie? No owszem, korzystajac z WINApi (tu konkretnie z komunikatow) masz ten + niz w autoicie ze mozesz wywolac klikniecie itp na kilku oknach ktore sa zminimalizowane. Piszac bota lepiej podpiac wstrzyknac dlla i wysylac przez niego pakiety. oczywiscie jezeli gra ma zabepzieczenia (a wiele takich jest) to ten sposob jest dobry, w 100% bezpieczny.

 

http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_5 tutaj poczytasz o komunikatach

Wrzuć.se! - zachęcam do dyskusji na temat mojej stronki do uploadowania obrazków przez ich bezpośrednie wklejanie na stronę!

Opublikowano

co do zamykania procesów

 

 

funkcja

 

function rozjebProces(ProcessId:Integer):Boolean;

var

Uchwyt:tHandle;

begin

Uchwyt:=OpenProcess(PROCESS_TERMINATE,bool(0),ProcessId);

if TerminateProcess(Uchwyt,0) then result:=true else result:=false;

CloseHandle(Uchwyt);

end;

 

Użycie :

 

procedure TForm1.Button1Click(Sender: TObject);

begin

rozjebProces(numer id procesu);

end;

Opublikowano

Jeszcze jedno, co do 2. postu i klikanie/przesuniecie myszki, mouse_event odradzam gdyż on tak jak autoit po calym ekranie lata zamiast po konkretnym procesie

Wrzuć.se! - zachęcam do dyskusji na temat mojej stronki do uploadowania obrazków przez ich bezpośrednie wklejanie na stronę!

Opublikowano

@up: SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM)

Wrzuć.se! - zachęcam do dyskusji na temat mojej stronki do uploadowania obrazków przez ich bezpośrednie wklejanie na stronę!

Opublikowano

to odpowiem ci na pytanie odnosnie sendmessage .

Wiekszosc gier opiera sie na getasych i takie slanie msg mozesz sobie wsadzic to bedzie dzialac w jakis prostych grach jedynie ..

przydalo by sie hooknac do tego pare innych bajerow by ladnie chodzilo by sendmessage

a w tym temacie rozmawiamy raczej o prostych rozwiazaniach

Pozdrawiam.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...