как использовать переменные в команде xdotool

у меня есть следующий код. когда я выполняю код, мой указатель мыши перемещается к 0 0 координате. Мне нужно переместить курсор в положение x1 y1. значение x1 y1 является целым числом.

int x1,y1;
for(int i=0; i<nomdef; i++)
{
if(defectArray[i].depth > 40 )
{
con=con+1;
if(con==1)
{
x1=(defectArray[i].depth_point)->x;
y1=(defectArray[i].depth_point)->y;
}
cvLine(src, *(defectArray[i].start), *(defectArray[i].depth_point),CV_RGB(255,255,0),1, CV_AA, 0 );
cvCircle( src, *(defectArray[i].depth_point), 5, CV_RGB(0,0,255), 2, 8,0);                              cvDrawContours(src,defects,CV_RGB(0,0,0),CV_RGB(255,0,0),-1,CV_FILLED,8);

}
}system("xdotool mousemove x1 y1");

0

Решение

Это программа на C ++ (не bash или любой другой язык высокого уровня). В строковых константах C / C ++ нет вызова / замены переменных.

Таким образом, системный вызов делает то, что вы написали: вызов "xdotool mousemove x1 y1" (без замены x1 и y1, как вы могли бы ожидать).

Вместо этого вы должны отформатировать строку, например с помощью std::string, std::ostringstream.

Добавьте эти включения в начало вашего файла:

#include <string>
#include <sstream>

Измените последнюю строку вашего кода на:

std::ostringstream ossCmd;
ossCmd << "xdotool mousemove " << x1 << ' ' << y1;
#if 1 // EXPLICIT:
std::string cmd = ossCmd.str();
system(cmd.c_str());
#else // COMBINED:
system(ossCmd.str().c_str());
#endif // 1

Это должно работать.

Замечания:

#if 1 Это может выглядеть странно, но в C / C ++ это обычный способ иметь альтернативы активного и неактивного кода, между которыми разработчик может измениться по мере необходимости.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]