我有以下代码。当我执行代码时,我的鼠标指针移动到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 :(得分: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 ++中通常使用有效和无效的代码替代方案,开发人员可以根据需要进行更改。