我正在使用以下库:http://www.codeproject.com/Articles/28064/Global-Mouse-and-Keyboard-Library?fid=1518257&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&fr=51#xx0xx
为了帮助我在Windows 7中使用低级鼠标挂钩。我创建了一个计时器,以检查上一次触发鼠标移动事件的时间,如果该时间长于给定时间,则将鼠标移动到屏幕的左上角使用SetCursorPos(0,0)
在移动鼠标之前,我先获取了旧坐标,然后保存了它们。这样,当我收到下一个MouseMove事件时,可以将鼠标替换为其原始位置。但是,在调用SetCursorPos(oldPos.x,oldPos.y)时,鼠标不会移动。
我确定oldPos值正确,但是光标拒绝移动。这可能是由于我正在使用的图书馆吗?请帮忙。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
void mouseHook_MouseMove(object sender, MouseEventArgs e)
{
//If the mouse was not visible, move it back to it's original position
if (!mouseVisible)
{
mouseVisible = true;
SetCursorPos(cursorPosition.x, cursorPosition.y);
}
//Update the last moved time.
lastMoved = DateTime.Now;
}
private void hideMouse(object sender, EventArgs e)
{
if (mouseVisible && (DateTime.Now - lastMoved) > new TimeSpan(0, 0, 0, mouseControl.timeTrackBar.Value))
{
log.Debug("Hiding mouse.");
//Store the current mouse position.
GetCursorPos(out cursorPosition);
//Hide the mouse.
SetCursorPos(0, 0);
log.Debug("Moving cursor to 0,0");
mouseVisible = false;
}
最佳答案
我的猜测是这样的:
使用SetCursor将鼠标移至0,0。
调用SetCursor的行为会从您的钩子生成鼠标移动事件。
您通过再次显示光标并将其放回之前的位置来响应鼠标移动。