60

В Os X я могу удерживать Shift, используя колесико прокрутки мыши для прокрутки по горизонтали, а не по вертикали. Есть ли способ сделать что-то подобное в Windows?

9 ответов9

23

Вот скрипт AutoHotKey, чтобы сделать это с помощью команд shift и (предположительно) собственной прокрутки колеса мыши:

; Shift + Wheel for horizontal scrolling
+WheelDown::WheelRight
+WheelUp::WheelLeft

Это взято непосредственно от https://gist.github.com/cheeaun/160999.

Помните, что многие приложения, включая приложения Microsoft, не поддерживают горизонтальную прокрутку колесика мыши. (Я считаю, что эта функция была представлена только в Windows Vista.)

15

Вы можете смоделировать это с 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) }
7

С 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
5

Есть способ сделать это в окнах правой кнопкой мыши. У меня есть мышь с колесом прокрутки, в которое встроена правая кнопка Jog Left / Jog Right. Простое нажатие колеса прокрутки влево или вправо перемещает содержимое в нужном направлении. У меня есть Logitech VX, и я был очень счастлив с ним.

VX также позволяет вам настраивать кнопки по-разному для каждого отдельного приложения, если вы так склонны. Этот уровень настройки очень приятен!

3

В некоторых программах Windows смещение прокручивается по горизонтали (например, Windows Explorer).

В других программах, таких как Internet Explorer, Firefox и Excel, удерживая нажатой кнопку колеса прокрутки и перемещаясь слева направо, будет прокручиваться горизонтально.

2

Не совсем сочетание клавиш, но вы всегда можете нажать на колесо мыши. В большинстве приложений появляется значок с 4 направлениями, который можно использовать для прокрутки.

2

Вот хакерское решение для 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
1

На основе решения 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
1

После некоторого осмотра , в конце концов нашел способ (с использованием 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .