2017-08-15 150 views
0

我使用模擬鼠標滾動

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

向下滾動有點然後等待一個第二滾動等睡覺後處理。但是,它似乎等待10秒鐘,然後向下滾動-100。

我不確定這是否相關,但我試圖讓它在Web瀏覽器中作爲窗體的一部分向下滾動頁面(一旦滾動到底部,頁面加載更多,您可以再次滾動)。

回答

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循環需要這樣的計數器。倒計時直到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  
} 
+0

好的謝謝。我如何在後臺線程上運行它? – KangarooChief

+0

@KangarooChief你可以使用計時器。我可以在一分鐘內給你一個例子 –

+0

對於Windows Forms應用程序,你應該使用['System.Windows.Forms.Timer'](https://msdn.microsoft.com/en-us/library/system.windows.forms .timer(v = vs.110).aspx) –