Показать сообщение отдельно
  #7  
Старый 24.04.2015, 12:43
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
сделай в Delphi как в мышке, то бишь в цикле
Пробовал вот так:
Код:
flag:boolean;
cs:HWND;

........

procedure TForm1.FormCreate(Sender: TObject);
begin
  cs:=FindWindow(nil, 'Counter-Strike');
  while flag=True do
  begin

      if GetAsyncKeyState(VK_MBUTTON)<>0 then
      begin
        SendMessage(cs,WM_KEYDOWN ,VK_SPACE, MakeLong(0, MapVirtualKey(VK_SPACE, 0))); 
        Sleep(1);
        SendMessage(cs,WM_KEYUP ,VK_SPACE, MakeLong(0, MapVirtualKey(VK_SPACE, 0)));
        Sleep(1);
      end;
    end;
end;
Этот же код писал и в потоке..
Всё ровно в игре чувствуется задержка. С макросом, если в игре бежать вперед, нажать кнопку макроса и отпустить бег вперед, то он прыгает еще долго вперед, по инерции... Всё что я не пробовал в Delphi, не может повторить такого.. То-есть он так же пригает по инерции дальше, но гораздо меньше времени. Если с макросом по инерции прыгает сикунд 10-15, то с Delphi прогой около 3-5 секунд.

Или я что-то не правильное сделал в цикле? Может Getasynckeystate каким-то образом влияет на быстроту выполнения? Может не правильно эмулирую space?
Пробовал еще через keybd_event();, но в игре не прыгает, но если открыть консоль, то в консоле бегут порбелы в строке. Значит посылка в окно кс осуществляется, но почему не прыгает!?
Еще пробовал увеличить приоритет программы - Высокий, до лампочки.
Короче я запутался окончательно))
Помогите, дайте какую-нибудь идею, как можно с минимальными задержками имитировать нажатие пробела?
Ответить с цитированием