To na forum AutoHotKey - migiem! I czytaj tam posty z przykładowymi skryptami, dokumentację i kombinuj SAM! A jeżeli chcesz zrobić taki program jak opisałeś w Delphi, to poniżej masz przydatną proceudrę. Do tego poczytać Pętle i ewentualnie Tablice a jeżeli chodzi o rozpoznanie czy nacisnąłeś w grze na przykład F12 żeby rozpocząć symulacje "combo" to pozostają dwie metody w sumie: globalny, lovlevelowy hook na klawiaturę (wymaga wyłaczonego UAC lub praw Administratora na nowszych systemach). Ogólnie wertuj MSDN i Google w poszukiwaniu WH_KEYBOARD_LL
(stała ta wynosi $0D). Inne rozwiązanie to odczytywanie rezultatu funkcji GetAsyncKeyState
w wątku z krótkim intervalem czasowym lub Timerze i reagowanie na rezultaty. Jednak widząc, Twój zerowy zapał w podejściu do tego tematu i chęć samodzielnego wykonania, a przy okazji nauczenia się czegoś pomimo otrzymanych licznych informacji. Nie sądzę by sens miało podawanie czegoś więcej. Nie raz już pomagałem tutaj podsyłając gotowce na temat wspomnianych wyżej metod wykrycia wciskania klawiszy globalnie w różnych aplikacjach. Takze pogoogluj. Bo człowiek traci chęć niestety do pomagania, skoro wrzuca i to nie raz gotowce, a ludziom się nawet nie chce z nich skorszystać oraz dodatkowo pogooglować za większą ilością informacji. Myślą, że jak "nasmarują" od razu na forum posta, to wszyscy rzucą wszystko i polecą im taki program napisać na tacy i za darmo. Tak to nie działa. Takie rzeczy tylko w Erze ;) A tak poważnie. Jeżeli nie chce się Tobie samemu wykazać inicjatywą, to pozostaje tylko zlecenie tego w dziale Oferty pracy z kontaktem na siebie, opisem co i jak ma działać oraz koniecznie propozycją wynagrodzenia.
procedure KeyDownUp(KeyToSend : Byte; KeyDown : boolean);
const
DownUp_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_KEYUP);
Extended_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_EXTENDEDKEY);
var
Input : TagINPUT;
KeyExtended : boolean;
begin
Input.Itype := INPUT_KEYBOARD;
Input.ki.wVK := KeyToSend;
Input.ki.wScan := MapVirtualKey(KeyToSend, 0);
KeyExtended := KeyToSend in
[VK_CONTROL, VK_LCONTROL, VK_RCONTROL,
VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT,
VK_HOME, VK_END, VK_PRIOR, VK_NEXT,
VK_INSERT, VK_DELETE, VK_MENU];
Input.ki.dwFlags := DownUp_Flags_Arr[not KeyDown] or Extended_Flags_Arr[KeyExtended];
Input.ki.time := 0;
SendInput(1, Input, SizeOf(Input));
end;