В Os X я могу удерживать Shift, используя колесико прокрутки мыши для прокрутки по горизонтали, а не по вертикали. Есть ли способ сделать что-то подобное в Windows?
В Os X я могу удерживать Shift, используя колесико прокрутки мыши для прокрутки по горизонтали, а не по вертикали. Есть ли способ сделать что-то подобное в Windows?
Ответы:
Вы можете смоделировать это с AutoHotKey
Если я найду сценарий, я дам вам знать: Из этих сообщений:
Вы должны найти несколько скриптов
#Persistent mhook := > DllCall("SetWindowsHookEx", "int", 14 > ; WH_MOUSE_LL
, "uint", RegisterCallback("WheelHorzHook"), > "uint", 0, "uint", 0) return
WheelLeft:
MsgBox WheelLeft return
WheelRight:
MsgBox WheelRight return
WheelHorzHook(nCode, wParam, lParam) {
global mhook
Critical
if (wParam = 0x020E) ; WM_MOUSEHWHEEL (Vista-only)
{
if (delta := NumGet(lParam+0,10,"Short"))
{
if (delta<0) {
SetTimer, WheelLeft, -1
return true
} else {
SetTimer, WheelRight, -1
return true
}
}
}
return DllCall("CallNextHookEx", "uint", mhook, "int", nCode, "uint",
wParam, "uint", lParam) }
Вот скрипт AutoHotKey, чтобы сделать это с помощью команд shift и (предположительно) собственной прокрутки колеса мыши:
; Shift + Wheel for horizontal scrolling
+WheelDown::WheelRight
+WheelUp::WheelLeft
Это взято непосредственно от https://gist.github.com/cheeaun/160999 .
Помните, что многие приложения, включая приложения Microsoft, не поддерживают горизонтальную прокрутку колесика мыши. (Я считаю, что эта функция была представлена только в Windows Vista.)
С http://www.autohotkey.com/docs/Hotkeys.htm
Некоторые из наиболее полезных горячих клавиш для колеса мыши включают альтернативные режимы прокрутки текста окна. Например, следующая пара горячих клавиш прокручивается по горизонтали, а не по вертикали, когда вы поворачиваете колесо, удерживая левую клавишу управления:
~LControl & WheelUp:: ; Scroll left.
ControlGetFocus, fcontrol, A
Loop 2 ; <-- Increase this value to scroll faster.
SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 0 after it is SB_LINELEFT.
return
~LControl & WheelDown:: ; Scroll right.
ControlGetFocus, fcontrol, A
Loop 2 ; <-- Increase this value to scroll faster.
SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 1 after it is SB_LINERIGHT.
return
Есть способ сделать это в Windows правой кнопкой мыши. У меня есть мышь с колесом прокрутки, в которое встроена правая кнопка Jog Left / Jog Right. Простое нажатие колеса прокрутки влево или вправо перемещает содержимое в нужном направлении. У меня есть Logitech VX, и я был очень счастлив с ним.
VX также позволяет вам настраивать кнопки по-разному для каждого отдельного приложения, если вы так склонны. Этот уровень настройки очень приятен!
В некоторых программах Windows смещение прокручивается по горизонтали (например, Windows Explorer).
В других программах, таких как Internet Explorer, Firefox и Excel, удерживая нажатой кнопку колеса прокрутки и перемещаясь слева направо, будет прокручиваться горизонтально.
Вот хакерское решение для Word (только), требующее как AutoHotKey, так и макросов Word. Он работает только в основном режиме просмотра документов в Word (что достаточно для меня).
Во-первых, используйте AutoHotKey для отправки пользовательского нажатия клавиши в Word в ответ на действие мыши. Я использую Alt-M RightArrow и Alt-M LeftArrow. (У меня также есть сопоставления для событий WheelLeft и WheelRight ниже, потому что моя мышь отправляет их очень хорошо; мне просто нужно, чтобы Word сделал что-то полезное с ними.)
#If WinActive("ahk_class OpusApp")
+WheelUp::SendInput !+M{Left}
WheelLeft::SendInput !+M{Left}
WheelRight::SendInput !+M{Right}
+WheelDown::SendInput !+M{Right}
#If
Настройте привязки клавиш Word (для этого вы можете использовать диалог настройки клавиатуры):
' Alt-Shift-M Right (keycode 39)
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyM, wdKeyShift, wdKeyAlt), _
KeyCode2:=BuildKeyCode(39), _
KeyCategory:=wdKeyCategoryMacro, Command:="Normal.NewMacros.ScrollRight"
' Alt-Shift-M Left (keycode 37)
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyM, wdKeyShift, wdKeyAlt), _
KeyCode2:=BuildKeyCode(37), _
KeyCategory:=wdKeyCategoryMacro, Command:="Normal.NewMacros.ScrollLeft"
Наконец, определите макросы Word в вашем шаблоне Normal (или настройте ссылки на них выше):
Sub ScrollRight()
ActiveWindow.SmallScroll ToRight:=1
End Sub
Sub ScrollLeft()
ActiveWindow.SmallScroll ToLeft:=1
End Sub
После некоторого осмотра , в конце концов нашел способ (с использованием AutoHotKey ), который работает в Excel и везде, без явного нарушения (адаптировано из нескольких различных решений на форумах AutoHotKey, хотя я не записывал источники, поэтому не могу дать соответствующий кредит извините).
MS Excel, кажется, имеет некоторые странные способы обработки своего пользовательского интерфейса (хотя, так или иначе, после многих лет просмотра того, что разработчики MS Office дали нам, я не настолько удивлен). Этот скрипт, кажется, работает практически везде, кроме MS Word - если кто-то может решить эту проблему, то дайте мне знать! Вероятно, это что-то вроде поиска оконного класса для Word и его кодирования, как это было сделано в Excel (просто с другим набором привязок клавиш).
#Singleinstance Force
#IfWinActive ahk_class XLMAIN
+WheelUp::
SetScrollLockState, On
SendInput {Left}
SetScrollLockState, Off
Return
+WheelDown::
SetScrollLockState, On
SendInput {Right}
SetScrollLockState, Off
Return
; Everything except Excel.
#IfWinNotActive ahk_class XLMAIN
+WheelUp:: ; Scroll left.
ControlGetFocus, fcontrol, A
Loop 4 ; <-- Increase this value to scroll faster.
SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 0 after it is SB_LINELEFT.
return
+WheelDown:: ; Scroll right.
ControlGetFocus, fcontrol, A
Loop 4 ; <-- Increase this value to scroll faster.
SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 1 after it is SB_LINERIGHT.
return
#IfWinActive
На основе решения Sam я разработал собственное решение с настраиваемой скоростью прокрутки:
https://gist.github.com/envil/d21a24744b68fda626b4444784f71c32
; Shift + Wheel for horizontal scrolling
+WheelUp::
; Scroll to the left
MouseGetPos,,,id, fcontrol,1
Loop 8 ; <-- Increase for faster scrolling
SendMessage, 0x114, 0, 0, %fcontrol%, ahk_id %id% ; 0x114 is WM_HSCROLL and the 0 after it is SB_LINERIGHT.
return
+WheelDown::
;Scroll to the right
MouseGetPos,,,id, fcontrol,1
Loop 8 ; <-- Increase for faster scrolling
SendMessage, 0x114, 1, 0, %fcontrol%, ahk_id %id% ; 0x114 is WM_HSCROLL and the 1 after it is SB_LINELEFT.
return