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

Участник
Участник
Статус
Оффлайн
Регистрация
6 Сен 2020
Сообщения
754
Реакции
366
ahk.h:
Expand Collapse Copy
#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++:
Expand Collapse Copy
HINSTANCE _hGDI = LoadLibrary(L"gdi32.dll");
На это
C++:
Expand Collapse Copy
HINSTANCE _hGDI = LoadLibrary("gdi32.dll");
Стандарт языка C++: C++17 (для использования inline в header-файлах).
 
Последнее редактирование:
Пожалуйста, авторизуйтесь для просмотра ссылки.
setCursorPosВыставить позицию курсора
getPixelColorПолучить цвет в пикселе (R, G, B)
keybouardButtonDownСимулировать нажатие кнопки клавиатуры (Работает если программа запускается от имени администратора)
keybouardButtonUpСимулировать отпускание кнопки клавиатуры (Работает если программа запускается от имени администратора)
keyboardButtonСимулировать нажатие и отпускание кнопки клавиатуры (Работает если программа запускается от имени администратора)
sendMouseDownСимулировать нажатие левой кнопки мыши
sendMouseUpСимулировать отпускание левой кнопки мыши
clickСимулировать нажатие и отпускание кнопки мыши
Замените это
C++:
Expand Collapse Copy
HINSTANCE _hGDI = LoadLibrary(L"gdi32.dll");
На это
C++:
Expand Collapse Copy
HINSTANCE _hGDI = LoadLibrary("gdi32.dll");
p.s. я знаю что пишется keyboard а не keybouard я просто камень который пишет быстро и не смотрит что он пишет.
Понимаю)
Когда-то в проекте название функции неправильно написал и потом где-то 3 часа фиксил, не мог понять почему не проходит тест.
 
а для процессора усложение
Если мы будем гнаться за столь тщательными оптимизациями, то начинающим программистам вообще не останется материала для несложной работы. Конечно, таскать за собой лишнюю зависимость с, возможно, во многом ненужным функционалом не очень правильно, однако кому-то это явно будет полезно. Да и сам автор получил нелишний для себя опыт.
 
То начинающим программистам вообще не останется материала для несложной работы.
С++ имеет один из самых легких синтаксисов, у него одни из самых лучших компилеров (gcc,g++ к примеру) и на нем можно сделать все, что угодно.
Если он хоть немного приложит сил в изучение языка, то он успешно поймет, как работать на нем. А если не получится, то его очень трудно называть программистом и далеко на таких "легких" языках он не уйдет.
 
С++ имеет один из самых легких синтаксисов, у него одни из самых лучших компилеров (gcc,g++ к примеру) и на нем можно сделать все, что угодно.
Если "программист" не может понимать такого легкого языка, то его очень трудно называть таковым.
Я конечно не эксперт, но C++ далеко не самый легкий язык в обучении. Я бы сказал, это один из самых сложных для новичка языков. Именно поэтому многие начинают с Python, C# или JavaScript.
И ещё поправка. С помощью стандартных средств C++ нельзя сделать «все что угодно», для реализации тех же HTTP запросов на сайт необходимо достаточно большое количество кода, в то время как в других языках это решается в пару строк.
 
С помощью стандартных средств C++ нельзя сделать «все что угодно», для реализации тех же HTTP запросов на сайт необходимо достаточно большое количество кода, в то время как в других языках это решается в пару строк.
Ты написал две не одинаковые вещи, длина кода никак не влияет на простор програмированния на языке. И да, на плюсах или на том же си можно сделать все, что угодно.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я конечно не эксперт, но C++ далеко не самый легкий язык в обучении. Я бы сказал, это один из самых сложных для новичка языков. Именно поэтому многие начинают с Python, C# или JavaScript.
И ещё поправка. С помощью стандартных средств C++ нельзя сделать «все что угодно», для реализации тех же HTTP запросов на сайт необходимо достаточно большое количество кода, в то время как в других языках это решается в пару строк.
Господи ирвал не пиши про легкие языки, питон или джава это вообще отмена по времени это скам на время шаришь? Я на тебя в арбитраж пойду, за такие слова. Да и вообще C++ подходит только для читов, ведь так оно и есть, мы же не проверяем информацию перед публикацией.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да и вообще C++ подходит только для читов,
ТЫ на солнышке перегрелся?
С++ как и любой другой язык имеет свое предначертание к той или иной сфере программирования.
 
Пару функций и уже можно называть, что это ahk?
Да тут немного функций, но они рабочие и они взяты с ahk.
Может перестанешь переобуваться? Сначала говоришь что это вообще не ahk а теперь говоришь что функции из ahk.
 
1653840208097.png

к чему это
 
Назад
Сверху Снизу