автоматические щелчки мыши делают экран пустым - PullRequest
4 голосов
/ 22 марта 2011

Привет, ребята. Я работаю над написанием программы, которая будет делать несколько щелчков мышью для меня в цикле.Я создал структуру и установил для нее тип INPUT_MOUSE для репликации щелчков и использовал SendInput () для отправки информации.все компилируется правильно и может быть названо «рабочей» программой, но я столкнулся с довольно забавным сбоем.Я написал программу на своем ноутбуке (Windows Vista) попробовал, и она работала нормально.Когда я переписываю тот же самый точный код и использую его на своем рабочем столе (Windows 7), когда я запускаю программу, мой экран становится черным, как только я запускаю часть программы автоматизации, как это происходит, когда она переходит в спящий режим.программа будет работать в фоновом режиме просто отлично, но это своего рода боль, которую автомат затмевает мой экран.Есть идеи, что здесь происходит?Я могу отобразить код, если это необходимо.Заранее спасибо.

по запросу. Я добавляю свой код

enter code here


        #include "stdafx.h"

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

        using namespace std;





        void clicky(int x, int y)
        {
            // 5 sec wait
                clock_t run;
                run = clock()+5*CLOCKS_PER_SEC;
                while (clock() < run) {}


            //plug in cursor coords and click down and up
                SetCursorPos(x,y);

                INPUT mouse;
                mouse.type = INPUT_MOUSE;
                mouse.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
                SendInput(1,&mouse,sizeof(INPUT));

                mouse.type = INPUT_MOUSE;
                mouse.mi.dwFlags= MOUSEEVENTF_LEFTUP;
                SendInput(1,&mouse,sizeof(INPUT));








        }


        void main()


        {
            int coords=0;
            string h;
            //find out how many clicks are needed
            cout << "How many clicks will you need?";
            cin >> coords;
            //extra getline here without it when return is hit
            //from entering the click amount it would also enter
            //a cursor coordinate
            getline(cin,h);


            POINT p[21];
            for (int count = 1;count<=coords;count++)
            {
                cout << "Place mouse cursor where you want a click and press return"<<endl;
                //each time return is hit the cursor coordinates
                //will be stored in the corresponding spot in 
                // the p array
                    string key = "r";
                    getline(cin,key);
                    GetCursorPos(&p[count]);
                    break;




            }

            string go;
            cout << "Hit Return to initialize your click loop";
            getline(cin,go);

            while (true)
            //infinite loop cycling through the users
            //cursor coordinates and clicking
            {
                for(int click=1;click<=coords;click++)
                {
                    int x = p[click].x;
                    int y = p[click].y;
                    clicky(x,y);
                }

            }



        } 

1 Ответ

4 голосов
/ 22 марта 2011

Попробуйте инициализировать структуру INPUT для всех нулей перед вызовом SendInput(), например

INPUT i;
ZeroMemory(&i, sizeof(i));

Кроме того, убедитесь, что указанные вами координаты не слишком велики.

У меня экран погас (на самом деле экранная заставка сработала), когда я выполнял одно из этих двух действий неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...