• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szybkie pobieranie koloru piksela

Object Storage Arubacloud
0 głosów
134 wizyt
pytanie zadane 23 grudnia 2016 w C i C++ przez mo290103 Obywatel (1,860 p.)
Znacie coś szybszego od GetPixel() ? W c++
komentarz 23 grudnia 2016 przez Dorion300 Szeryf (90,250 p.)
Ale czego "GetPixel()"? jaka biblioteka?
komentarz 23 grudnia 2016 przez mo290103 Obywatel (1,860 p.)
windows.h
komentarz 23 grudnia 2016 przez mo290103 Obywatel (1,860 p.)
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    _sleep(5000);
    cout<<"start";

    while (true)
    {
        if(GetPixel(GetDC(GetDesktopWindow()),5 ,350)==2105376)
        {
            SetCursorPos( 15, 400 );
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
        }
     }
}

 

1 odpowiedź

+1 głos
odpowiedź 23 grudnia 2016 przez playerony Pasjonat (15,240 p.)
wybrane 23 grudnia 2016 przez mo290103
 
Najlepsza
Z tego co kojarzę chyba nie ma nic szybszego, jest jescze z tego co pamietam coś takiego jak "LockBits" na angielskich stronach znajdziesz dość dużo porównań i z regóły getPixel() jest szybszy.
komentarz 23 grudnia 2016 przez mo290103 Obywatel (1,860 p.)
Ok thx
komentarz 23 grudnia 2016 przez mo290103 Obywatel (1,860 p.)

Może wiesz jak napisać, żeby program szybciej działał

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    _sleep(5000);
    cout<<"start";

    while (true)
    {
        if(GetPixel(GetDC(GetDesktopWindow()),5 ,350)==2105376)
        {
            SetCursorPos( 15, 400 );
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
        }
        if(GetPixel(GetDC(GetDesktopWindow()),100 ,350)==2105376)
        {
            SetCursorPos( 100, 400 );
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
        }
        if(GetPixel(GetDC(GetDesktopWindow()),180 ,350)==2105376)
        {
            SetCursorPos( 180, 400 );
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
        }
        if(GetPixel(GetDC(GetDesktopWindow()),250 ,350)==2105376)
        {
            SetCursorPos( 250, 400 );
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
        }
        _sleep(50);
    }
    return 0;
}

 

komentarz 23 grudnia 2016 przez playerony Pasjonat (15,240 p.)
Myśle, że wystarczy raz pobierać kontekst urządzenia a nie robić to za każdym razem w pętli :)
komentarz 23 grudnia 2016 przez playerony Pasjonat (15,240 p.)

Program w tej formie myśle, że możesz rozbudowywać jak tylko chcesz dodając tyle danych ile tylko chcesz:

#include <iostream>
#include <vector>
#include <windows.h>

using namespace std;

class Container{
private:
    size_t _x, _y;
    size_t _cursorX, _cursorY;

public:
    Container(size_t x, size_t y, size_t cursX, size_t cursY) :
        _x(x), _y(y), _cursorX(cursX), _cursorY(cursY){
        }

    const size_t getX()const{return _x;}
    const size_t getY()const{return _y;}
    const size_t getCursorX()const{return _cursorX;}
    const size_t getCursorY()const{return _cursorY;}

    void setX(const size_t x){_x = x;}
    void setY(const size_t y){_y = y;}
    void setCursorX(const size_t cursorX){_cursorX = cursorX;}
    void setCursorY(const size_t cursorY){_cursorY = cursorY;}
};

void initContainer(vector<Container*>&container){
    container.push_back(new Container(5, 350, 15, 400));
    container.push_back(new Container(100, 350, 100, 400));
    container.push_back(new Container(180, 350, 180, 400));
    container.push_back(new Container(250, 350, 250, 400));
}

int main()
{
    vector<Container*> container;
    initContainer(container);

    _sleep(5000);
    cout<<"start";

    HDC hdc = GetDC(GetDesktopWindow());

    while (true)
    {
        for(vector<Container*>::iterator it = container.begin() ; it != container.end() ; ++it)
            if(GetPixel(hdc),(*it)->getX() ,(*it)->getY())==2105376)
            {
                SetCursorPos( (*it)->getCursorX(), (*it)->getCursorY() );
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0);
            }
        _sleep(50);
    }
    return 0;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 96 wizyt
pytanie zadane 5 marca 2020 w C i C++ przez Badzonor Obywatel (1,410 p.)
0 głosów
0 odpowiedzi 112 wizyt
pytanie zadane 15 czerwca 2022 w C i C++ przez MichaelM Bywalec (2,540 p.)
0 głosów
1 odpowiedź 450 wizyt
pytanie zadane 20 lipca 2020 w C i C++ przez KumberTwo Dyskutant (8,270 p.)

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...