Как запрограммировать компьютерную мышь на основе C++

Я делаю проект, в котором мне нужно разработать приложение, в котором курсор мыши перемещается в соответствии с предоставленными ему координатами. Эти координаты генерируются с позиции ученика пользователя. Я могу получить координаты ученика с помощью opencv. Теперь у меня есть следующие вопросы:

1.) Как мне запрограммировать курсор мыши, чтобы он двигался в соответствии с указанными мне координатами. В частности, я ищу библиотеки и функции, которые будут это делать. После просмотра в Интернете я обнаружил, что люди используют графику. Библиотека с Turbo CI Я делаю свой проект в Visual Studio 2010, поэтому, пожалуйста, дайте мне знать о любом методе, который идет с этим.

2.) Во-вторых, как я могу использовать эту так называемую мышь, которую я создал с помощью C++ и opencv, чтобы функционировать в качестве основной мыши в Windows? Нужно ли мне программировать на уровне ассемблера или писать драйвер устройства или есть какой-либо другой подходящий метод?

Для Q1. Я был бы очень признателен, если бы вы могли дать мне пример кода.

Благодарю.

............................ Это то, что я сделал до сих пор.............................. У меня проблемы с запуском кода. Я интегрировал WinBGIm v6.0 с http://winbgim.codecutter.org/(я использую VS2010 Ultimate в Windows 7). Если я запускаю пример кода, все идет хорошо. Однако, когда я попытался запустить этот пример мыши, приведенный в документации, произошло несколько ошибок. Пожалуйста, помогите мне исправить ошибки, я понятия не имею, что они значат.

/* mouse example */
/*Filename:mint.cpp*/
    #include "winbgim.h"
    void main(void)
    {
    const int LIMIT = 10; // Number of clicks to stop program.
    int maxx, maxy; // Maximum x and y pixel coordinates
    int count = 0; // Number of mouse clicks
    int divisor; // Divisor for the length of a triangle side
    // Put the machine into graphics mode and get the maximum
    coordinates:
    initwindow(450, 300);
    maxx = getmaxx( );
    maxy = getmaxy( );
    // Draw a white circle with red inside and a radius of 50 pixels:
    setfillstyle(SOLID_FILL, RED);
    setcolor(WHITE);
    fillellipse(maxx/2, maxy/2, 50, 50);
    // Print a message and wait for a red pixel to be double clicked:
    settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);
    outtextxy(20, 20, "Left click " << LIMIT << " times to end.");
    setcolor(BLUE);
    divisor = 2;
    while (count < LIMIT)
    {
    triangle(maxx/divisor, maxy/divisor);
    delay(500);
    divisor++;
    if (ismouseclick(WM_LBUTTONDOWN))
    {
    (clearmouseclick(WM_LBUTTONDOWN));
    count++;
    }
    }
    // Switch back to text mode:
    closegraph( );
    }
...................................................
The compiler errors are:

c:\program files\microsoft visual studio 10.0\vc\include\winbgim.h(302): error C2086: 'int right' : redefinition
1>c:\program files\microsoft visual studio 10.0\vc\include\winbgim.h(302) : see declaration of 'right'
1>c:\users\administrator\desktop\winbgm\driver\mint.cpp(20): error C2296: '<<' : illegal, left operand has type 'const char [12]'
1>c:\users\administrator\desktop\winbgm\driver\mint.cpp(25): error C3861: 'triangle': identifier not found
Build FAILED.

1 ответ

Решение
  1. Вы можете использовать порт библиотеки BGI для Windows (WinBGIm). Вот ссылка на общее представление о том, как это сделать (пример проекта в VS2010).
    Проект: http://muhammadallee.pbworks.com/w/file/53399106/WinBGIm-Demo.zip(Вам нужно перейти в Свойства проекта-> Линкер-> Ввод и исправить там путь к файлу lib. В качестве альтернативы, используйте этот проект: http://www.cs.colorado.edu/~main/bgi/visual/BGI2010.zip Документация:
    http://www.cs.colorado.edu/~main/bgi/doc/

  2. Он будет использовать стандартную мышь Windows. Так что вам не нужно беспокоиться об этом. Вы можете просто установить координаты мыши с помощью SetMousePos() что вы используете набор координат вашей собственной мыши.

Ваш код содержит ошибки

Вместо

outtextxy(20, 20, "Left click " LIMIT << " times to end.");

Используйте этот код

char msg[80] = "";
sprintf(msg, "Left click %d times to end.", LIMIT);

И закомментировать

triangle(maxx/divisor, maxy/divisor);

Также скачайте по ссылкам, которые я упомянул. После этих изменений все заработало нормально.

PS: если это решит вашу проблему, вы можете пометить это как ответ:)

Другие вопросы по тегам