Форум программистов, компьютерный форум CyberForum.ru

SendMessage - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с текстовыми файлами http://www.cyberforum.ru/cpp-beginners/thread714050.html
3)Разработать программу, которая выполняет следующие действия: создает входной поток для построчного чтения из внешнего файла и выходной поток для вывода в выходной файл. Текст из входного потока извлекается построчно, выполняется обработка прочитанной строки согласно варианту задания, результат записывается в выходной файл. Каждая прочитанная строка состоит из слов. Слова разделены ...
C++ Разработать функцию, проверяющую, является ли число простым 1)Разработать функцию, проверяющую, является ли число простым. С её помощью найти и напечатать все простые числа из интервала от n до m. http://www.cyberforum.ru/cpp-beginners/thread714049.html
Количество чисел массива равных последнему элементу C++
Здравствуйте! Помогите мне пожалуйста с задачкой) Дан массив и n целых чисел (n<=100). Найти количество чисел массива равных последнему элементу массива.
C++ Задача на линейные списки. Вставить в список L новый элемент E1 за каждым вхождением заданного элемента E
Вставить в список L новый элемент E1 за каждым вхождением заданного элемента E, если Е входит в L.
C++ Задача на базы данных http://www.cyberforum.ru/cpp-beginners/thread714026.html
Используя технологию структурного программирования разработать программу обработки файлов структур с числом записей не менее пяти в соответствии с индивидуальным заданием. Города Наименование / Количество жителей / Площадь в кв. км. / Год основания / Количество школ
C++ Строки: Все последовательности одинаковых символов заменить на выражения N(C) Сдаю сессию , полный 0 в программировании, может у кого то есть готовое, буду очень благодарна Ввести фразу. Все последовательности одинаковых символов заменить на выражения N(C). Где N – количество последовательных одинаковых символов, а С – символ. Например : «Веер и ветер» – «В2(е)р2( )и ветер». подробнее

Показать сообщение отдельно
Nalik
 Аватар для Nalik
44 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 582
30.11.2012, 01:15     SendMessage
Всем привет!
Пишу программу которая сама нажимает мышкой в игре по заданным координатам.
Для этого игра уже должна быть запущена. Если игра не запущенна то на экран выдается соответствующее сообщение.
Если вдруг игра была закрыта по каким бы то ни было причинам (вылетела или ещё что-то), то она сама перезаходит и продолжает работу снова. Так должно быть чисто теоретически, однако когда игра перезапускается, программа не жмёт по заданным координатам до тех пор пока я не нажму мышкой в какую либо точку вне окна игры, только после этого она начнёт работать. Так же обратил внимание что когда я навожу мышку внутрь игрового окна на какое либо пустое место программа перестаёт работать (ну это как раз объяснимо, там сначала должна ставится мышка поверх кнопки на которую нужно нажать тем самым делая её "активной", но всё равно хотелось бы это исправить).
Предполагаю что в этом вся и проблема состоит, что когда игра перезапускается, то игровое окно становится то ли активным, то ли мышка внутрь окна помещается и потому бот перестаёт работать.
В общем если кто-то заметит какие нибудь косяки в коде, подскажите пожалуйста что делать.

Для примера взял игру Dishonored и быстренько настрочил на неё аналогичный код, чтобы показать основную проблему. http://*************/s/2yr1i

ЗЫ: Если создал не в том разделе тему, то прощу прощения, не ругайтесь, а лучше перенесите просто в нужный.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <ostream>
#include <clocale>
#include <conio.h>
#include <Windows.h> //для определения окна
#include <WinUser.h> //для определения окна
#include <ShellAPI.h> //для запуска процессов
 
 
using namespace std;
 
//Объявляем функции
void send5 (HWND Handle_Kalc, int x, int y);
void sendplus (HWND Handle_Kalc, int x, int y);
 
void main()
{
    HWND Handle_Kalc; 
 
    setlocale(LC_CTYPE, "Russian"); //Руссификатор
 
    Handle_Kalc = FindWindow(NULL, L"**Dishonored"); // получаю хендл окна по его заголовку
        if(Handle_Kalc) //Проверка Хендла окна
    {   
        cout << "\nИгра запущена: начинаем работу\n"; //Выводим текст на экран
        while(1) 
        {
            while(1) //Бесконечный цикл
            {
                Handle_Kalc = FindWindow(NULL, L"**Dishonored"); // получаю хендл окна каждый новый цикл
 
                send5(Handle_Kalc, 352, 450); //Вызов функции 
                sendplus(Handle_Kalc, 716, 507); //Вызов функции
            
                    if (Handle_Kalc) 
                {
                    cout << "\n>>Работа продолжается..\n";
                }
                else 
                 {
                     cout << "\n>>Игра была закрыта, запускаю её снова...\n";
                 
                     ShellExecute( Handle_Kalc,L"open", L"Dishonored.exe",0, L"E:\\Games\\Dishonored\\Binaries\\Win32\\",SW_SHOWNORMAL ); //запустить игру
                 
                     cout << ">>Запускаю игру...\n"; //Выдать текст на экран
                     Sleep(15000);
        
                } 
            }
        }
    }
    else //Если хендл окна ложен выдать текст   
    {
        cout << "\nИгра не запущена\n"; //Выводим текст на экран
    }
    getch();
}
 
 
void send5 (HWND Handle_Kalc, int x, int y)
{
        SendMessage(Handle_Kalc, WM_MOUSEMOVE, MK_LBUTTON, MAKELONG(x,y)); //навести курсор в координаты
        SendMessage(Handle_Kalc, WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(x,y)); //нажать в координатах
        SendMessage(Handle_Kalc,WM_LBUTTONUP,0,MAKELONG(x,y)); //отпустить в координатах
 
        Sleep(1300);
        SendMessage(Handle_Kalc, WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(x,y)); //нажать в координатах
        SendMessage(Handle_Kalc,WM_LBUTTONUP,0,MAKELONG(x,y)); //отпустить в координатах
        cout << ">>Задание\n";
}
 
void sendplus (HWND Handle_Kalc, int x, int y)
{
        SendMessage(Handle_Kalc, WM_MOUSEMOVE, MK_LBUTTON, MAKELONG(x,y)); //навести курсор в координаты
        SendMessage(Handle_Kalc, WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(x,y)); //нажать в координатах
        SendMessage(Handle_Kalc,WM_LBUTTONUP,0,MAKELONG(x,y)); //отпустить в координатах
 
        Sleep(1300);
        SendMessage(Handle_Kalc, WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(x,y)); //нажать в координатах
        SendMessage(Handle_Kalc,WM_LBUTTONUP,0,MAKELONG(x,y)); //отпустить в координатах
        cout << ">>Назад\n";
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru