睡眠后处理模拟鼠标滚动

时间:2017-08-15 14:21:58

标签: c# visual-studio

我正在使用

for (int i = 0; i < 10; i++)
{
    mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -10, 0);
    System.Threading.Thread.Sleep(1000);
}

向下滚动一点然后等待一秒滚动,依此类推。但是,它似乎等待10秒然后向下滚动-100。

我不确定这是否相关但是我试图让它在Web浏览器中向下滚动页面作为Windows窗体的一部分(一旦滚动到底部页面加载更多,您可以再次滚动)

1 个答案:

答案 0 :(得分:1)

问题是你的GUI冻结并且在for循环期间没有更新,因为它在同一个线程上运行。要查看每秒需要在后台线程上运行它的更改。

您也可以使用System.Timers.Timer来完成这项工作。将其设置为

System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 1000;    
timer.AutoReset = true;

并连接处理滚动

Elapsed事件
timer.Elapsed += Timer_Elapsed;
timer.Start();

你还需要一个像for-loop一样的计数器。在事件处理程序

中向下计数到0
int counter = 10;

private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    if(counter > 0)
    {
        mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -10, 0);
        counter--;
    }
    else
    {
        System.Timers.Timer t = sender as System.Timers.Timer;
        t.Stop();
    }
}

这样你可以在10次迭代后停止计时器

根据Jakub Dąbek的建议,您也可以使用System.Windows.Forms.Timer。这看起来像这样:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 1000;
timer.Tick += Timer_Tick;
timer.Start();

private void Timer_Tick(object sender, EventArgs e)
{
    // here the same code as above    
}