Programowanie w języku Delphi » FAQ

Autoklikanie

Prezentowany kod powstał z potrzeby chwili. Otóż używam MilkyTrackera do produkcji muzyki i musiałem ustawić długość patternu z 64 (40h) do 256 (100h). Kto używa tego programu, wie, że aby ustawić długość patternu (czy szybkość, BPM czy cokolwiek innego) trzeba klikać cierpliwie w przycisk plus albo minus, a nie ma powtarzania.
Nie chciało mi się robić prawie dwustu klików, więc szybciej mi zajęło napisanie czegoś takiego:

procedure TForm1.Timer1Timer(Sender: TObject);
var C:TPoint;
    X:Byte;
begin
 if GetKeyState (VK_SCROLL) <> 0 then begin
  GetCursorPos (C);
  for X := 1 to 16 do begin
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, C.x, C.y, 0, 0);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, C.x, C.y, 0, 0);
  end;
 end;
end;


Działa to w ten sposób: program uruchamiamy w tle (w OnCreate można napisać Application.ShowMainForm := false;). Gdy zajdzie potrzeba klikania w miejscu, włączamy ScrollLock. W przykładzie dla każdego obrotu pętli w timerze (Interval = 500) symulujemy 16 kliknięć - w MT odpowiada to dołożeniu jednego taktu, czyli 16 wierszy do patternu. Naciskając jeszcze raz ScrollLock wyłączamy autoklik i działamy dalej.

2 komentarze

MikiKam 2009-04-12 14:41

@pkkm:
keybd_event(ord(#13), 0, 0, 0);
keybd_event(ord(#13), 0, KEYEVENTF_KEYUP, 0);

pkkm 2008-08-28 11:38

a jak zrobić autonaciskanie klawisza Enter?