Keybd_Event w grze, jak zastosować aby działał?

Odpowiedz Nowy wątek
2011-09-26 18:13

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

0

Witam,
Chciałem napisać program który zmienia biegi w grze LFS. Niestety ten sposób którym ja robię nie działa na auto ale jedynie jak otworzę okienko czatu to wpisuje wybraną przeze mnie literkę.
Kod który nie działa:

 Keybd_Event(VkKeyScan('s'), 0, 0, 0);
        Keybd_Event(VkKeyScan('s'), 0, KEYEVENTF_KEYUP, 0);

W związku z powyższym proszę o pomoc i słuszne, działające rozwiązanie tematu
ps. nie wiem czy da się to zrobić w Delphi ale komuś się udało w innym języku zrobić odcięcie silnika które wciskało dany przycisk.

Pozostało 580 znaków

2011-09-26 23:09
Moderator

Rejestracja: 11 lat temu

Ostatnio: 2 miesiące temu

Lokalizacja: Szczecin

0

Jeżeli się nie udaje pod Delphi, możesz spróbować zrobić to pod AutoHotKey'em, może pod nim zadziała. Tylko exek ze skryptem będzie nieco większy - wiadomo. Ewentualnie czasem jak nie działa w grze DirectX Keybd_Event to zadziałać MOŻE, ale też nie musi - SendKey.

procedure SimulateKeyPress(Key : Cardinal; KeyUp : boolean);
var
  Input : TagINPUT;
begin
  Input.Itype := INPUT_KEYBOARD;
  Input.ki.wVK := Key;
  Input.ki.wScan := MapVirtualKey(Key, 0);
  if Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME,
    VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE] then
  begin
    Input.ki.dwFlags := KEYEVENTF_EXTENDEDKEY;
  end
  else
  begin
    if KeyUp = False then
    begin
      Input.ki.dwFlags := 0;
    end
    else
    begin
      Input.ki.dwFlags := KEYEVENTF_KEYUP;
    end;
  end;
  Input.ki.time := 0;
  SendInput(1, Input, SizeOf(Input));
end;

Pozostało 580 znaków

2011-09-27 21:17

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

0

No niestety komenda SendKey działa identycznie jak poprzednia. Natomiast nie za bardzo rozumiem ten autohotkey. Moja aplikacja polega na tym że ma zmieniać biegi jeżeli silnik przekroczy ileś tam obrotów.

Pozostało 580 znaków

2011-09-28 19:02
Moderator

Rejestracja: 11 lat temu

Ostatnio: 2 miesiące temu

Lokalizacja: Szczecin

0

Czego nie rozumiesz? Pobierasz pakiet z: http://www.autohotkey.com i odpowiednim programem ze skryptu *.ahk generujesz plik wykonywalny. Więcej informacji na tamtejszym forum gdzie mozęsz zadać pytanie w razie problemów z napisaniem skryptu, a także w dokumentacji programu. Nie wiem jak odczytujesz informacje o ilości obrotów, ale jeżeli czytasz w pamięci procesu, to może uda się to i zrobić pod AutoHotkey'em, jednak ja nie jestem w tym ekspertem. Nie wiem też, czy uda się zasymulować Tobie ten klawisz pod AutoHotkey'em, skoro inne metody w Delphi zawiodły.


Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0