Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2010, 19:33   #1
evil29a
 
Регистрация: 04.03.2009
Сообщений: 3
Вопрос SendMessage/PostMessage

Всем доброго времени суток. Надеюсь на понимание и помощь.
Проблема в следующем, есть онлайн игра, необходимо передавать в её окно нажатие клавиш F1-F12, пробовал реализовывать используя SendMessage/PostMessage/keybd_event, сообщения доходили, действия выполнялись, но только n-ное количество раз, после чего никакой реакции со стороны клиента игры на отправляемые сообщения не было, пробовал на другом сервере с клиентом той же версии - всё работает. Вопрос что такого могли сделать админы сервера для такого результата и как это можно вылечить?
evil29a вне форума Ответить с цитированием
Старый 23.09.2010, 22:01   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Тебе виднее, чем эти действия этой проги от действий реального человека отличаются. Соответственно, чтобы вылечить, надо убрать эти отличия.
Somebody вне форума Ответить с цитированием
Старый 23.09.2010, 22:26   #3
evil29a
 
Регистрация: 04.03.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Тебе виднее, чем эти действия этой проги от действий реального человека отличаются. Соответственно, чтобы вылечить, надо убрать эти отличия.
Предлагаешь распаять клавиатуру и программно замыкать f1-f12?)

Мне интересно что такого они могли сделать с клиентом игры что бы он принимал только часть сообщений, и после наглухо не отвечал, как будто идёт переполнение буфера, старые коды не удаляются
evil29a вне форума Ответить с цитированием
Старый 23.09.2010, 22:36   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Предлагаю подумать, нет ли очевидных для возможного античита свидетельств того, что играет бот, а не человек. Например, клавиши нажимаются строго через одинаковое время или мышка не двигается, если человек двигал бы ей. В любом случае, я же не знаю, что там за клиент и сервер и что из себя представляет игровой процесс, так что ничего конкретного даже предположить не могу.
Somebody вне форума Ответить с цитированием
Старый 24.09.2010, 13:44   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Вы не можете эмулировать ввод с клавиатуры отправкой сообщений.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 24.09.2010, 14:47   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

А ничего, что написано, что на другом сервере всё работает в этом же клиенте?
Somebody вне форума Ответить с цитированием
Старый 24.09.2010, 15:04   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
А ничего, что написано, что на другом сервере всё работает в этом же клиенте?
Если что-то работает - это ещё не значит, что это вообще должно работать.

Работоспособность кода нужно подтверждать теорией, а не экспериментами. Иначе получите говно-код.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.09.2010, 22:13   #8
evil29a
 
Регистрация: 04.03.2009
Сообщений: 3
По умолчанию

Спасибо за советы, но с SendInput тоже самое, или может что не так делаю, код на делфи.
Код:
var
inp: TInput;
begin
inp.Itype := INPUT_KEYBOARD;
inp.ki.wVk := $70; // f1
inp.ki.wScan := 0;
inp.ki.dwFlags := 0;
inp.ki.time := 1;
inp.ki.dwExtraInfo := 0;
if SendInput(1, inp, SizeOf(inp)) = 0 then
  begin
  ShowMessage('blok');
  Exit
  end;
inp.ki.dwFlags := KEYEVENTF_KEYUP;
SendInput(1, inp, SizeOf(inp));
end;
Тема открыта, может есть варианты писать на прямую в порт контроллера? если кто с этим сталкивался подкиньте плиз инфы
evil29a вне форума Ответить с цитированием
Старый 25.09.2010, 23:13   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Если не работает SendInput, то, вероятнее всего, проблема - не в эмуляции ввода (при условии, что вы не ошиблись с её вызовом).

Вон там выше Somebody рациональную идею высказал.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.11.2010, 21:48   #10
blinkapec
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 12
По умолчанию

Ёлки зелёные, долго пытаюсь заставить работать PostMessage и SendMessage, но ничего не получается.

Код:
    invoke PostMessage,hnd,WM_KEYDOWN,VK_A,NULL
    invoke PostMessage,hnd,WM_KEYUP,VK_A,NULL
Функция возвращает 0х01.
В окне, которому послано сообщение, ничего ожидаемого (и даже неожиданного) не происходит.
А функция keybd_event - работает. Но мне нужно отправлять сообщения окну без фокуса.
Как мне проверить в чём проблема?
P.S. Хэндл окна - правильный.

...Упс, только что проверил вариант с F1 - работает... Хм, получается проблема, описанная здесь
Но как же тогда мне заставить работать программу хотя бы только на моём компьютере?

Последний раз редактировалось blinkapec; 25.11.2010 в 21:58.
blinkapec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WINAPI SendMessage PostMessage Mefit Общие вопросы по Java, Java SE, Kotlin 2 19.09.2010 01:04
Как вызвать API функции SendMessage и PostMessage() на java? madboy4ik Общие вопросы по Java, Java SE, Kotlin 2 19.01.2010 15:10
PostMessage [Qj] Win Api 1 21.08.2009 20:29
В чём отличие между SendMessage и PostMessage? TwiX Общие вопросы Delphi 2 29.07.2009 20:16