web-dev-qa-db-fra.com

Raccourci de défilement horizontal sous Windows

Dans Os X, je peux maintenir la touche Maj enfoncée tout en utilisant la molette de la souris pour faire défiler horizontalement au lieu de verticalement. Y at-il un moyen de faire quelque chose de similaire dans Windows?

62
Matthew Shanley

Vous pouvez le simuler avec AutoHotKey

Si je trouve le script, je vous le ferai savoir:

Vous devriez trouver des scripts

#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) }
15
Ivo Flipse

Voici un script AutoHotKey pour le faire en utilisant les commandes shift et (vraisemblablement) natives de la molette de la souris:

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

Cela provient directement de https://Gist.github.com/cheeaun/160999 .

N'oubliez pas que de nombreuses applications, notamment Microsoft, ne prennent pas en charge le défilement horizontal de la molette de la souris. (Je pense que la fonctionnalité n'a été introduite que dans Windows Vista.)

23
Sam

De http://www.autohotkey.com/docs/Hotkeys.htm

Certaines des touches de raccourci les plus utiles pour la molette de la souris impliquent d'autres modes de défilement du texte d'une fenêtre. Par exemple, la paire de touches de raccourci suivante défile horizontalement au lieu de verticalement lorsque vous tournez le volant tout en maintenant la touche Ctrl gauche enfoncée:

~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
7
Matthew Lock

Il y a un moyen de faire cela dans les fenêtres avec la bonne souris. J'ai une souris avec une molette de défilement dans laquelle est intégré un bouton gauche/droit. Il suffit de pousser la molette de défilement vers la gauche ou vers la droite pour déplacer le contenu dans la direction souhaitée. J'ai le Logitech VX et j'en suis très content.

Le VX vous permet également de configurer les boutons différemment pour chaque application si vous le souhaitez. Ce niveau de personnalisation est très agréable d'avoir!

5
Axxmasterr

Dans certains programmes Windows, shift défile horizontalement (par exemple, Windows Explorer).

Dans d'autres programmes tels que Internet Explorer, Firefox et Excel, maintenez le bouton de la molette de défilement enfoncé et déplacez-vous de gauche à droite pour faire défiler horizontalement.

3
Matthew Lock

Pas exactement un raccourci clavier, mais vous pouvez toujours cliquer sur la molette de la souris. Cela fait apparaître une icône à 4 directions dans la plupart des applications que vous pouvez utiliser pour faire défiler

2
Blaine

Voici une solution de hacky pour Word (uniquement) nécessitant à la fois les macros AutoHotKey et Word. Cela ne fonctionne que sur la vue principale du document dans Word (ce qui me suffit).

Commencez par utiliser AutoHotKey pour envoyer une frappe personnalisée à Word en réponse à l'action de la souris. J'utilise Alt-M RightArrow et Alt-M LeftArrow. (J'ai également des mappages pour les événements WheelLeft et WheelRight ci-dessous car ma souris les envoie très bien; j'ai juste besoin que Word fasse quelque chose d'utile avec eux.)

#If WinActive("ahk_class OpusApp")
+WheelUp::SendInput !+M{Left}
WheelLeft::SendInput !+M{Left}
WheelRight::SendInput !+M{Right}
+WheelDown::SendInput !+M{Right}
#If

Configurez les raccourcis clavier Word (vous pouvez également utiliser la boîte de dialogue de personnalisation du clavier pour ce faire):

' 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"

Enfin, définissez les macros Word dans votre modèle Normal (ou ajustez les références ci-dessus):

Sub ScrollRight()
    ActiveWindow.SmallScroll ToRight:=1
End Sub
Sub ScrollLeft()
    ActiveWindow.SmallScroll ToLeft:=1
End Sub
2
iagrapefruit

À partir de la solution Sam, j'ai développé ma propre solution qui a une vitesse de défilement configurable:

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
Envil

Après quelques recherches, nous avons finalement trouvé un moyen (en utilisant AutoHotKey ) de fonctionner dans Excel et partout ailleurs, sans rien casser de toute évidence (adapté de plusieurs solutions sur les forums AutoHotKey, bien que je n’ai pas enregistré les sources, je ne peux donc pas donner le crédit approprié, désolé).

MS Excel semble avoir quelques étranges façons de gérer son interface utilisateur (même si, après de nombreuses années à voir ce que les développeurs de MS Office nous ont donné, je ne suis pas étonné). . Ce script semble fonctionner un peu partout, à l'exception de MS Word - si quelqu'un peut résoudre ce problème, faites le moi savoir! C'est probablement quelque chose comme découvrir la classe window pour Word et le coder pour cela, comme si cela avait été fait avec Excel (juste avec un jeu différent de raccourcis clavier).

#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
1
BevanFindlay