【发布时间】:2012-05-06 15:21:45
【问题描述】:
=)
我在 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;
}
或
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;
}
谁能知道为什么这会发送键盘输入和鼠标?!只是和我的笔记本电脑配置有关吗?
提前致谢! =)
【问题讨论】:
-
我猜他们可能是,但这并不能解释为什么它会关闭我的屏幕! :/ 类型标志设置为 INPUT_MOUSE 所以应该只用于鼠标事件!
-
您是否将
mi.time设置为0?不这样做时,我得到了奇怪的结果。 -
啊,谢谢!解决了它! :) windows 必须检查鼠标已经处于非活动状态的时间,并根据它使屏幕进入睡眠状态!如果您将其作为正确答案,我将选择它作为您的最佳答案! =)
标签: c++ keyboard mouse simulator sendinput