=)
我在windows7笔记本电脑上使用C ++(而不是VC ++)。
这个方法有一个问题,就是将鼠标x / y从它的当前位置移开。每次调用鼠标事件的发送输入时,它都会移动鼠标,但也会关闭我的屏幕(相当于Fn + F2)。我调试了该程序并注意到mi
以及ki
和hi
不仅有值(这是x = 25,y = 25和absolure = false):
mi:
dx 25
dy 25
mouseData 0
dwFlags 1
time 2686400
dwExtraInfo 0
ki:
wVk 25
wScan 0
dwFlags 25
time 0
dwExtraInfo 1
hi:
uMsg 25
wParamL 25
wParamH 0
我试图将ki和hi设置为0,但如果我这样做,那么mi也会设置为0然后没有鼠标移动但是屏幕仍然处于睡眠状态! :$
以下是我使用的一些方法。
int Controller::mouse_move(long x, long y, bool absolute) {
mouse.dx = x;
mouse.dy = y;
if (absolute) {
mouse.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
}else{
mouse.dwFlags = MOUSEEVENTF_MOVE;
}
mouse.mouseData = 0;
mouse.dwExtraInfo = 0;
input.type = INPUT_MOUSE;
input.mi = mouse;
SendInput(1, &input, sizeof (input));
return 0;
}
OR
int Controller::mouse_move(long x, long y, bool absolute, int index_vector_no) {
input.type = INPUT_MOUSE;
input.mi.dx = x;
input.mi.dy = y;
if (absolute) {
input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
}else{
input.mi.dwFlags = MOUSEEVENTF_MOVE;
}
input.mi.mouseData = 0;
input.mi.dwExtraInfo = 0;
input.ki.dwExtraInfo = 0;
input.ki.dwFlags = 0;
input.ki.time = 0;
input.ki.wScan = 0;
input.ki.wVk = 0;
input.hi.uMsg = 0;
input.hi.wParamH = 0;
input.hi.wParamL = 0;
SendInput(1, &input, sizeof (input));
return 0;
}
任何人都可以为什么发送键盘输入以及鼠标?!它只是与我的笔记本电脑配置有关吗?
提前致谢! =)
答案 0 :(得分:3)
其他人改变的原因是因为他们都在一个联盟中,所以他们共享相同的记忆。
关于屏幕关闭,您没有将mi.time
设置为0,因此它未初始化。开始将这些结构初始化为{0}通常是一个好主意,所以你不要忘记事情。时间戳变为一些随机数,这可能导致显示超时。
答案 1 :(得分:1)
您可以使用:
input.mi.time = 0;
在:
input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
它对我有用。