2012-05-05 108 views
1

This link包含有關如何使用位於user32.dll中用C#橫向滾動

基於該鏈接的我知道,我可以做一些像滾動的mouse_event功能的有用信息:

 [DllImport("user32.dll")] 
     public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); 


     public void Scroll(){ 
       // this will cause a vertical scroll 
       mouse_event(0x0800, 0, 0, 500, 0); 
     } 

     public void Click(){ 
       // this will cause a left mouse click 
       mouse_event(0x0002, 0, 0, 0, 0); 
       Thread.Sleep(1); 
       mouse_event(0x0004, 0, 0, 0, 0); 
     } 

     // etc... 

反正如果您查看該鏈接,它不包含MOUSEEVENTF_HWHEEL的int值。我希望能夠使用水平滾動。如何使用move_event創建水平輪子運動?

回答

1

MOUSEEVENTF_HWHEEL的值是0x1000。因此,例如:

// this will cause a horizontal scroll to the right 
mouse_event(0x1000, 0, 0, 200, 0); 
3

如果你看看你所提供的相同的鏈接,你會看到:

提示:該功能已被取代。改爲使用SendInput

如果您查看SendInput的文檔,您會發現可以發送一個INPUT結構數組。如果您查看INPUT的文檔,您會發現可以發送鍵盤(KEYBDINPUT)或鼠標輸入(MOUSEINPUT)。

最後,MOUSEINPUT文檔說你可以使用MOUSEEVENTF_HWHEEL

Windows Vista:如果dwFlags包含MOUSEEVENTF_HWHEEL,則dwData指定輪子移動量。正值表示輪子向右旋轉;負值表示車輪向左旋轉。

所以,你應該使用SendInput。這有點複雜,但您可以使用它來水平滾動。您可以查看PInvoke page for SendInput以獲取示例。

+0

感謝您的幫助。我可以看到sendInput方法有更多的功能。我唯一缺少的方法就是一個。我應該使用sendInput來遷移所有的鼠標手勢嗎? –

+0

我想說這取決於你需要做多少工作。如果我是你,我會切換到SendInput,因爲最好不要使用被取代的函數。也許在未來的Windows版本中,mouse_event甚至不再適用。另外,看看[這個線程](http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/4f705f47-af2a-4491-b241-ee38ca1aa3a6/) – Ove

+0

我會盡力改變它,如果它是很麻煩,那麼我離開它。再次感謝您的幫助。 –