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

Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна - C++

Восстановить пароль Регистрация
 
Nalik
 Аватар для Nalik
44 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 582
12.05.2014, 10:31     Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна #1
Написал простенький кликер на с++, который в игре нажимает кнопочки от 1 до 9, сделал зависимости нажатия кнопочек от того что происходит на экране, ну то есть если уровень здоровья маленький, то программа нажимает кнопочку 1 и т.д. Реализовал это через гетпиксель, обращаюсь к координатам, сверяю пикселя. Но столкнулся с проблемой, что когда запускаю прогу на ноуте, все отлично работает, но когда запускаю игру на компе, то программа как то не правильно начинает работать.

Понял почему так, не смотря на то что игру и на ноуте и на компе запускаю в оконном режиме с разрешением экрана 1024х768, ещё так же влияет разрешения самого Windows, на ноуте 1366х768 и всё отлично работает, на компе 1920х1080 и в игре не все функции работают как надо.

Запихнул в пеинт скрин игрового окна с компа и с ноута и смотрю, что хоть настройки в игре стоят 1024х768, но по факту получается, что когда играю с компа то разрешение там одно, а с ноута другое.

Собственно вопрос в том, может кто подскажет, как можно привести программу к универсальному виду, чтобы она работала на всех разрешениях экрана, не прибегая к тому, что под каждое разрешение придется писать свой код?

P.S. И не надо пожалуйста кричать "хакер, фигакер, ещё один и бла-бла", не знаете пройдите мимо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2014, 10:31     Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна
Посмотрите здесь:

как сделать программно чтобы программа была постоянно на заднем плане C++
C++ как сделать так чтобы была возможность записывать и фамилию и имя,а то у меня только до пробела читает?
C++ Как сделать так, чтобы программа не компилилась, хотя синтаксически была бы правильной?
рабочая программа. но нужно ее переписать так, чтобы она была наиболее общей. C++
C++ Как сделать чтобы функция была видна из .cpp файла?
Массив: Образовать новую последовательность чисел так, чтобы она тоже была неубывающей C++
C++ как сделать цикл, чтобы после моего действия, которое делает программа, она предлагала мне сделать его еще раз?
как сделать программу, чтобы она запрашивала пароль до входа в систему C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.05.2014, 10:35     Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна #2
Цитата Сообщение от Nalik Посмотреть сообщение
Реализовал это через гетпиксель, обращаюсь к координатам, сверяю пикселя.
Код будьте любезны. Иначе все и будут мимо проходить.
Nalik
 Аватар для Nalik
44 / 25 / 9
Регистрация: 30.11.2012
Сообщений: 582
12.05.2014, 10:50  [ТС]     Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна #3
Вот например. В вызванных функциях так же идут обращения к координатам, но весь код заточен под разрешения экрана винды 1366х768 и разрешение игры 1024х768.
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//РЕЖИМ 2: ФАРМ НА МЕСТЕ
 
void mode2 (HWND Handle_ArcheAge)
{
    //int i;
    cout << "\nРежим 2: фарм на месте\n";
    time_t Time= time(NULL);    //счетчик времени
    while(1)
    //{
        //cout <<"Кидаю баффы\n";
        //F1 (Handle_ArcheAge);
        //altu (Handle_ArcheAge);
        //send9 (Handle_ArcheAge);
        //for (i=0;i<10;i++)
        {
            //в курсоре моб (красный) - предположительно маленький, если большой, то бить будет не до конца
            COLORREF minLimit = RGB(134,29,29); //диапазон минимального цвета
            COLORREF maxLimit = RGB(180,70,70); //диапазон максимального цвета
 
            HDC hdc=GetDC(Handle_ArcheAge);
            COLORREF  d = GetPixel (hdc, 389-3, 63-25); // координаты определения пикселя
            ReleaseDC(Handle_ArcheAge,hdc);
            if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit) &&
            GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit) &&
            GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit))
            {   
                kritHP (Handle_ArcheAge); //критическое состояние, нажимаю Z
                health80lutnya (Handle_ArcheAge); //
                mana80fleyta (Handle_ArcheAge);
                cout <<" >> Атакую..\n";
                Sleep(1000);
                send1 (Handle_ArcheAge); //клавиша 1
                send2 (Handle_ArcheAge); //клавиша 2
                send3 (Handle_ArcheAge); //клавиша 3
                send4 (Handle_ArcheAge); //клавиша 4
                send5 (Handle_ArcheAge); //клавиша 5
                send6 (Handle_ArcheAge); //клавиша 6
                send7 (Handle_ArcheAge); //клавиша 7
                send8 (Handle_ArcheAge); //клавиша 8
                F (Handle_ArcheAge); //поднять предмет
            }
            else //в курсоре нет красного цвета (нету моба)
            {
                //делаем проверку есть ли в курсоре вообще моб (может быть большим или мертвым) (коричневый)
                HDC hdc=GetDC(Handle_ArcheAge);
                COLORREF  c = GetPixel (hdc, 633-3, 61-25); // координаты определения пикселя
                ReleaseDC(Handle_ArcheAge,hdc);
                if (Handle_ArcheAge, c ==RGB(55,42,17)) //RGB коды цветов
                {
                    //делаем проверку большой ли это моб (красный)
                    COLORREF minLimit = RGB(134,29,29); //диапазон минимального цвета
                    COLORREF maxLimit = RGB(180,70,70); //диапазон максимального цвета
 
                    HDC hdc=GetDC(Handle_ArcheAge);
                    COLORREF  d = GetPixel (hdc, 333-3, 63-25); // координаты определения пикселя
                    ReleaseDC(Handle_ArcheAge,hdc);
                    if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit) &&
                    GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit) &&
                    GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit))
                    {
                        kritHP (Handle_ArcheAge); //критическое состояние, нажимаю Z
                        health80lutnya (Handle_ArcheAge); //
                        mana80fleyta (Handle_ArcheAge);
                        agr (Handle_ArcheAge);
                        cout <<" >> Атакую..\n";
                        Sleep(1000);
                        send1 (Handle_ArcheAge); //клавиша 1
                        send2 (Handle_ArcheAge); //клавиша 2
                        send3 (Handle_ArcheAge); //клавиша 3
                        send4 (Handle_ArcheAge); //клавиша 4
                        send5 (Handle_ArcheAge); //клавиша 5
                        send6 (Handle_ArcheAge); //клавиша 6
                        send7 (Handle_ArcheAge); //клавиша 7
                        send8 (Handle_ArcheAge); //клавиша 8
                        F (Handle_ArcheAge); //поднять предмет
                    }
                    else //в курсоре есть коричневый цвет, но нет красного, моб полностью убит
                    {
                        cout <<"В КУРСОРЕ ЕСТЬ КОРИЧНЕВЫЙ ЦВЕТ, НО НЕТ КРАСНОГО, МОБ полностью убит\n";
                        kritHP (Handle_ArcheAge);
                        health80lutnya (Handle_ArcheAge);
                        mana80fleyta (Handle_ArcheAge);
                        agr (Handle_ArcheAge);
                        send1(Handle_ArcheAge); //клавиша 1
                        F (Handle_ArcheAge); //поднять предмет
                        D (Handle_ArcheAge); //повернуться
                        K (Handle_ArcheAge); //открыть - закрыть окно умений
                    }
                }
                else //в курсоре нет красного и нет коричневого
                {
                    cout <<"В КУРСОРЕ НЕТУ КРАСНОГО И НЕТУ КОРИЧНЕВОГО\n";
                    kritHP (Handle_ArcheAge);
                    health80lutnya (Handle_ArcheAge);
                    mana80fleyta (Handle_ArcheAge);
                    send1(Handle_ArcheAge); //клавиша 1
                    F (Handle_ArcheAge); //поднять предмет
                    D (Handle_ArcheAge); //повернуться
                    K (Handle_ArcheAge); //открыть - закрыть окно умений
                }
            }
            //закончено выполнения цикла, не более не менее
            //проверяется R пиксель из RGB цвета и если он совпадает выполняются эти действия
            cout <<"ЗАКОНЧЕНО ВЫПОЛНЕНИЕ ЦИКЛА, ИДЁМ НА СЛЕДУЮЩУЮ СТУПЕНЬ\n";
            //if ( kritHP &&
            //health80lutnya  &&
            //mana80fleyta  )
            //{
            //  cout <<"в курсоре вообще никого нет, смотрим крит, жизни и ману и ищем цель\n";
            //send1(Handle_ArcheAge); //клавиша 1
            //F (Handle_ArcheAge); //поднять предмет
            //D (Handle_ArcheAge); //повернуться
            //K (Handle_ArcheAge); //открыть - закрыть окно умений
            //}
 
        }
    //}
}
Знакомый посоветовал использовать оффсеты окна. Определять с каким разрешением запущено окно и к моим координатам прибавлять или отнимать разницу, чтобы программа жала на нужные кнопочки
Yandex
Объявления
12.05.2014, 10:50     Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна
Ответ Создать тему
Опции темы

Текущее время: 17:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru