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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 12:45   #1
Nub
Пользователь
 
Регистрация: 04.10.2010
Сообщений: 19
Восклицание Отправка сообщений в чат игры

С++ только изучаю. Изучаю на практических задачах. Попросили тут меня написать программку, которая отправляет в чат игры сообщения по нажатию определённых клавиш. Проблема лишь одна - не работает собственно отправка

В игре, для отправки сообщений в чат нужно:
1. Нажать Enter
2. Ввести сообщение
3. Нажать Enter

Переписал главную функцию для отправки сообщений в блокнот. Работает, но тоже есть вопросы.


Код:
void Post (AnsiString text){
char *str_as_char = text.c_str();
HWND hwnd;
hwnd=FindWindow("notepad",NULL);
hwnd=FindWindowEx(hwnd, 0, "Edit", NULL);

/*
 PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0);
Если эта строка (первое нажатие Enter) не закоментирована, 
то текст в блокнот отправляется странно. Первые пять символов в сообщении идут на одной строке, а последующие на второй. Даже не знаю, с чем это может быть связано.
*/


  Application->ProcessMessages();
  for (int i = 0; i < strlen(str_as_char); i++) {
  PostMessage(hwnd, WM_CHAR, str_as_char[i], 0);

/*
PostMessage(hwnd, WM_IME_KEYDOWN, str_as_char[i], MapVirtualKey(str_as_char[i], 0));
PostMessage(hwnd, WM_IME_KEYDOWN, str_as_char[i], 0);
Пробовал разные варианты отправки, но в этом случае, даже в блокнот киррилица не уходит.
*/

  }
  PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0);
  Application->ProcessMessages();
}
UPD. Что-то мне подсказывает, что в DirectX приложения нужно отправлять сообщения с помощью SendInput. А пример можно?

Последний раз редактировалось Nub; 28.04.2011 в 13:47.
Nub вне форума Ответить с цитированием
Старый 28.04.2011, 18:57   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Для того, что бы отправить сообщение в чат игры нужно имитировать работу клиента игры. То есть как минимум нужно знать протокол, по которому общаются клиент с сервером и научиться отправлять сообщения по этому протоколу из своей программы.

Сообщения Windows, которые вы пытались отправлять, и тем более средства DirectX здесь не помогут
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 28.04.2011, 20:02   #3
Nub
Пользователь
 
Регистрация: 04.10.2010
Сообщений: 19
По умолчанию

Задача уже практически решена. Воспользовался SendKey. Так что знать протоколы необязательно
Nub вне форума Ответить с цитированием
Старый 29.04.2011, 10:07   #4
Nub
Пользователь
 
Регистрация: 04.10.2010
Сообщений: 19
Лампочка

Пойдём дальше. На текущий момент функция отправки имеет вид:
Код:
void Post(AnsiString text){
char *str_as_char = text.c_str();
CSendKeys sk;
HWND hwnd;
hwnd=FindWindow("notepad",NULL);
hwnd=FindWindowEx(hwnd, 0, "Edit", NULL);
sk.AppActivate(hwnd);
sleep(100);
sk.SendKeys("{ENTER}");
ActivateKeyboardLayout(0,  0);
sk.SendKeys(str_as_char);
sk.SendKeys("{ENTER}");
ActivateKeyboardLayout(0,  0);
}
Естественно только class и caption при определения окна другие.
Сообщения отправляются. Но не всегда корректно.
Например, иногда форма ввода сообщения открывается, сообщение вписывается, и на этом всё замирает.

Без двойного переключения раскладки клавиатуры - ActivateKeyboardLayout(0, 0); что-то шлёт вообще как-то странно.

Ну и самая большая проблема. Управление в игре осуществляется клавишами WASD и ещё парочкой. Так вот после отправки сообщения, игрок начинает судорожно двигаться самостоятельно. Отчего сие?
Nub вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка SMS сообщений RUBEY Компоненты Delphi 11 25.06.2011 17:40
Отправка СМС сообщений Rek322 Помощь студентам 7 12.03.2010 21:18
Отправка сообщений CalvinKlein Работа с сетью в Delphi 1 27.01.2010 20:46
IdTCPServer отправка сообщений. gusluk Работа с сетью в Delphi 3 08.04.2009 09:43
отправка сообщений Pitbull Работа с сетью в Delphi 6 03.08.2007 17:06