Я делаю проект, в котором мне нужно разработать приложение, в котором курсор мыши перемещается в соответствии с предоставленными ему координатами. Эти координаты генерируются с позиции ученика пользователя. Я могу получить координаты ученика с помощью opencv. Теперь у меня есть следующие вопросы:
1.) Как мне запрограммировать курсор мыши, чтобы он двигался в соответствии с указанными мне координатами. В частности, я ищу библиотеки и функции, которые будут это делать. После просмотра в Интернете я обнаружил, что люди используют graphics.h Библиотека с Turbo C. Я делаю свой проект в 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.
Вы можете использовать порт библиотеки 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/
Он будет использовать стандартную мышь 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: если это решит вашу проблему, вы можете пометить это как ответ 🙂
Других решений пока нет …