2012-05-05 2 views
1

This link содержит полезную информацию о том, как использовать функцию mouse_event, расположенной в user32.dllГоризонтальная прокрутка с C#

Основываясь на этой ссылке, которую я знаю, что я мог бы прокручивать делать что-то вроде:

 [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... 

Любом если вы посмотрите на эту ссылку, она не содержит значения int для MOUSEEVENTF_HWHEEL. Я хотел бы иметь возможность использовать горизонтальный свиток. Как я могу использовать 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

Я постараюсь измените его, если это будет много неприятностей, тогда я оставлю его как есть. спасибо за помощь снова. –

Смежные вопросы