C++ Исходник Библиотка AHK для C++ (Симуляция нажатия кнопок, цвет в пикселе)

Участник
Статус
Оффлайн
Регистрация
6 Сен 2020
Сообщения
749
Реакции[?]
364
Поинты[?]
8K
ahk.h:
#pragma once
#include <Windows.h>
#include <stdio.h>

class color {
public:
    color(int _r, int _g, int _b) {
        r = _r;
        g = _g;
        b = _b;
    }

    int r;
    int g;
    int b;
};

namespace ahk {
    inline void setCursorPos(int x, int y) {
        SetCursorPos(x, y);
    }
    inline color getPixelColor(int x, int y) {
        HINSTANCE _hGDI = LoadLibrary(L"gdi32.dll");
        if (_hGDI) {
            HDC _hdc = GetDC(NULL);
            if (_hdc) {
                COLORREF _color = GetPixel(_hdc, x, y);
                ReleaseDC(NULL, _hdc);
                return(color(GetRValue(_color), GetGValue(_color), GetBValue(_color)));
            }
            FreeLibrary(_hGDI);
        }
        return color(0, 0, 0);
    }
    inline INPUT keybouardButtonDown(int key) {
        INPUT Input = { 0 };
        Input.type = INPUT_KEYBOARD;
        Input.ki.wScan = 0;
        Input.ki.time = 0;
        Input.ki.dwExtraInfo = 0;
        Input.ki.wVk = key;
        Input.ki.dwFlags = 0;
        SendInput(1, &Input, sizeof(INPUT));
        return Input;
    }
    inline void keybouardButtonUp(INPUT Input) {
        Input.ki.dwFlags = KEYEVENTF_KEYUP;
        SendInput(1, &Input, sizeof(INPUT));
    }
    inline void keyboardButton(int key) {
        INPUT Input = keybouardButtonDown(key);
        keybouardButtonUp(Input);
    }
    inline void sendMouseDown(bool rightClick = false) {
        INPUT Input = { 0 };
        Input.type = INPUT_MOUSE;
        Input.mi.dwFlags = rightClick ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_RIGHTDOWN;
        SendInput(1, &Input, sizeof(INPUT));
    }
    inline void sendMouseUp(bool rightClick = false) {
        INPUT Input = { 0 };
        Input.type = INPUT_MOUSE;
        Input.mi.dwFlags = rightClick ? MOUSEEVENTF_LEFTUP : MOUSEEVENTF_RIGHTUP;
        SendInput(1, &Input, sizeof(INPUT));
    }
    inline void click(bool rightClick = false) {
        sendMouseDown(rightClick);
        sendMouseUp(rightClick);
    }
    inline bool checkColor(color x, color y) {
        if (x.r == y.r && x.g == y.g && x.b == y.b)
            return true;
        else
            return false;
    }
}
void setCursorPosВыставить позицию курсора
Аргументы: int x, int y (Позиция на экране)
color getPixelColorПолучить цвет в пикселе (R, G, B)
Аргументы: int x, int y (Позиция на экране)
Возвращает: color(r, g, b)
INPUT keybouardButtonDownСимулировать нажатие кнопки клавиатуры (Работает если программа запускается от имени администратора)
Аргументы: int key (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
Возвращает: INPUT
void keyboardButtonUpСимулировать отпускание кнопки клавиатуры (Работает если программа запускается от имени администратора)
Аргументы: INPUT (К примеру: keyboardButtonDown возвращает Input)
void keyboardButtonСимулировать нажатие и отпускание кнопки клавиатуры (Работает если программа запускается от имени администратора)
void sendMouseDownСимулировать нажатие левой кнопки мыши
Аргументы: bool rightClick (true - правой кнопкой мыши, false [стандартное значение] - левая кнопка мыши)
void sendMouseUpСимулировать отпускание левой кнопки мыши
Аргументы: bool rightClick (true - правой кнопкой мыши, false [стандартное значение] - левая кнопка мыши)
void clickСимулировать нажатие и отпускание кнопки мыши
Аргументы: bool rightClick (true - правой кнопкой мыши, false [стандартное значение] - левая кнопка мыши)
bool checkColorСверить два цвета
Аргументы: color x, color y (Два цвета)
Замените это
C++:
HINSTANCE _hGDI = LoadLibrary(L"gdi32.dll");
На это
C++:
HINSTANCE _hGDI = LoadLibrary("gdi32.dll");
Стандарт языка C++: C++17 (для использования inline в header-файлах).
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Июн 2021
Сообщения
9
Реакции[?]
1
Поинты[?]
0
Пожалуйста, авторизуйтесь для просмотра ссылки.
setCursorPosВыставить позицию курсора
getPixelColorПолучить цвет в пикселе (R, G, B)
keybouardButtonDownСимулировать нажатие кнопки клавиатуры (Работает если программа запускается от имени администратора)
keybouardButtonUpСимулировать отпускание кнопки клавиатуры (Работает если программа запускается от имени администратора)
keyboardButtonСимулировать нажатие и отпускание кнопки клавиатуры (Работает если программа запускается от имени администратора)
sendMouseDownСимулировать нажатие левой кнопки мыши
sendMouseUpСимулировать отпускание левой кнопки мыши
clickСимулировать нажатие и отпускание кнопки мыши
Замените это
C++:
HINSTANCE _hGDI = LoadLibrary(L"gdi32.dll");
На это
C++:
HINSTANCE _hGDI = LoadLibrary("gdi32.dll");
p.s. я знаю что пишется keyboard а не keybouard я просто камень который пишет быстро и не смотрит что он пишет.
Понимаю)
Когда-то в проекте название функции неправильно написал и потом где-то 3 часа фиксил, не мог понять почему не проходит тест.
 
█ ▄ ▅ ▆ ▄█ ▅ ▇ ▆ ▅ ▇ ▅
Пользователь
Статус
Оффлайн
Регистрация
8 Дек 2019
Сообщения
163
Реакции[?]
43
Поинты[?]
0
Winapi наверно просто так делали, да?
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,825
Реакции[?]
1,852
Поинты[?]
24K
а для процессора усложение
Если мы будем гнаться за столь тщательными оптимизациями, то начинающим программистам вообще не останется материала для несложной работы. Конечно, таскать за собой лишнюю зависимость с, возможно, во многом ненужным функционалом не очень правильно, однако кому-то это явно будет полезно. Да и сам автор получил нелишний для себя опыт.
 
█ ▄ ▅ ▆ ▄█ ▅ ▇ ▆ ▅ ▇ ▅
Пользователь
Статус
Оффлайн
Регистрация
8 Дек 2019
Сообщения
163
Реакции[?]
43
Поинты[?]
0
То начинающим программистам вообще не останется материала для несложной работы.
С++ имеет один из самых легких синтаксисов, у него одни из самых лучших компилеров (gcc,g++ к примеру) и на нем можно сделать все, что угодно.
Если он хоть немного приложит сил в изучение языка, то он успешно поймет, как работать на нем. А если не получится, то его очень трудно называть программистом и далеко на таких "легких" языках он не уйдет.
 
Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,825
Реакции[?]
1,852
Поинты[?]
24K
С++ имеет один из самых легких синтаксисов, у него одни из самых лучших компилеров (gcc,g++ к примеру) и на нем можно сделать все, что угодно.
Если "программист" не может понимать такого легкого языка, то его очень трудно называть таковым.
Я конечно не эксперт, но C++ далеко не самый легкий язык в обучении. Я бы сказал, это один из самых сложных для новичка языков. Именно поэтому многие начинают с Python, C# или JavaScript.
И ещё поправка. С помощью стандартных средств C++ нельзя сделать «все что угодно», для реализации тех же HTTP запросов на сайт необходимо достаточно большое количество кода, в то время как в других языках это решается в пару строк.
 
█ ▄ ▅ ▆ ▄█ ▅ ▇ ▆ ▅ ▇ ▅
Пользователь
Статус
Оффлайн
Регистрация
8 Дек 2019
Сообщения
163
Реакции[?]
43
Поинты[?]
0
С помощью стандартных средств C++ нельзя сделать «все что угодно», для реализации тех же HTTP запросов на сайт необходимо достаточно большое количество кода, в то время как в других языках это решается в пару строк.
Ты написал две не одинаковые вещи, длина кода никак не влияет на простор програмированния на языке. И да, на плюсах или на том же си можно сделать все, что угодно.
 
Дизайнер со стажем 30 лет Говард подтвердит
Забаненный
Статус
Оффлайн
Регистрация
13 Май 2021
Сообщения
235
Реакции[?]
101
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я конечно не эксперт, но C++ далеко не самый легкий язык в обучении. Я бы сказал, это один из самых сложных для новичка языков. Именно поэтому многие начинают с Python, C# или JavaScript.
И ещё поправка. С помощью стандартных средств C++ нельзя сделать «все что угодно», для реализации тех же HTTP запросов на сайт необходимо достаточно большое количество кода, в то время как в других языках это решается в пару строк.
Господи ирвал не пиши про легкие языки, питон или джава это вообще отмена по времени это скам на время шаришь? Я на тебя в арбитраж пойду, за такие слова. Да и вообще C++ подходит только для читов, ведь так оно и есть, мы же не проверяем информацию перед публикацией.
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да и вообще C++ подходит только для читов,
ТЫ на солнышке перегрелся?
С++ как и любой другой язык имеет свое предначертание к той или иной сфере программирования.
 
vk.com/ahkcsgocheat
Пользователь
Статус
Оффлайн
Регистрация
21 Апр 2020
Сообщения
381
Реакции[?]
64
Поинты[?]
2K
Это совсем не ахк, какой смысл так называть библиотеку.
 
vk.com/ahkcsgocheat
Пользователь
Статус
Оффлайн
Регистрация
21 Апр 2020
Сообщения
381
Реакции[?]
64
Поинты[?]
2K
Участник
Статус
Оффлайн
Регистрация
6 Сен 2020
Сообщения
749
Реакции[?]
364
Поинты[?]
8K
Пару функций и уже можно называть, что это ahk?
Да тут немного функций, но они рабочие и они взяты с ahk.
Может перестанешь переобуваться? Сначала говоришь что это вообще не ahk а теперь говоришь что функции из ahk.
 
Сверху Снизу