Poziomy skrót do przewijania w systemie Windows

64

W Os X mogę przytrzymać Shift, używając kółka myszy do przewijania w poziomie zamiast w pionie. Czy istnieje sposób na zrobienie czegoś podobnego w systemie Windows?

Matthew Shanley
źródło
1
przewijanie w jakiej aplikacji? poszukiwacz? przeglądarka internetowa? To zależy od tego, jak twórca chciał to zaimplementować, więc jeśli będzie to przeglądarka, będzie inaczej.
John T
Nie sądzę, aby domyślnie dostępny był systemowy skrót dla systemu Windows.
dreszcze42
11
Miałem nadzieję na rozwiązanie systemowe.
Matthew Shanley,

Odpowiedzi:

15

Możesz to zasymulować za pomocą AutoHotKey

Jeśli znajdę skrypt, dam ci znać: Z tych postów:

Powinieneś znaleźć jakieś skrypty

#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) }
Ivo Flipse
źródło
Ach, masz to do pracy? Niesamowite!
Ivo Flipse,
23

Oto skrypt AutoHotKey, aby to zrobić przy użyciu poleceń shift i (prawdopodobnie) natywnych poleceń przewijania kółkiem myszy:

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

Jest to pobierane bezpośrednio z https://gist.github.com/cheeaun/160999 .

Pamiętaj, że wiele aplikacji, w tym aplikacje Microsoft, nie obsługuje poziomego przewijania kółkiem myszy. (Myślę, że ta funkcja została wprowadzona tylko w systemie Windows Vista).

Sam
źródło
Dziękujemy, działa świetnie w Visual Studio! Szkoda, że ​​nie działa w programie Excel 2013 i Google Chrome.
cheeesus
3
@cheeesus, dla mnie, w systemie Windows, Google Chrome ma wbudowaną obsługę przewijania w poziomie. Nawet bez powyższego skryptu mogę przytrzymać Shift i przewijać kółko myszy, aby przewijać w poziomie.
Sam
2
Doskonały! To najlepsza odpowiedź tutaj, prosta i łatwa. Dla tych, którzy są nowi w AutoHotKey, oto kroki: 1) Pobierz i zainstaluj AutoHotKey z autohotkey.com 2) Kliknij prawym przyciskiem myszy na pulpicie -> Nowy -> Dokument tekstowy -> Utwórz plik o nazwie „myscript.ahk” 3) Skopiuj i wklej skrypt z powyższego -> Zapisz plik 4) Kliknij plik prawym przyciskiem myszy -> Uruchom skrypt 5) Mała ikona H powinna pojawić się w obszarze powiadomień paska zadań, a teraz „Shift + kółko myszy” powinno wyświetlać się poziomo przewijanie
np8
@ np8 to nie działało dla mnie .. próbowałem dokładnie tak. Używam normalnej myszy HP z kółkiem przewijania. przeglądarka chrome działa shift + przewijanie w poziomie .. zawsze działało nawet przed ahk. teraz z instalacją ahk .. miałem nadzieję, że MS Office będzie działać .. ale nie działa.
ihightower
@ihightower Istnieje również rozwiązanie dla programu Excel. Dodam to do tej odpowiedzi.
np8
8

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

Niektóre z najbardziej przydatnych klawiszy skrótu dla kółka myszy obejmują alternatywne tryby przewijania tekstu okna. Na przykład następująca para klawiszy skrótu przewija się w poziomie zamiast w pionie po obróceniu koła, przytrzymując lewy klawisz Control:

~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
Matthew Lock
źródło
5

Istnieje sposób, aby to zrobić w systemie Windows za pomocą prawej myszy. Mam mysz z kółkiem przewijania, które ma zintegrowany z nią przycisk jog left / jog jog. Wystarczy nacisnąć kółko przewijania w lewo lub w prawo, aby przenieść zawartość w żądanym kierunku. Mam Logitech VX i jestem z niego bardzo zadowolony.

VX pozwala również konfigurować przyciski inaczej dla każdej aplikacji, jeśli masz na to ochotę. Ten poziom personalizacji jest bardzo miły!

Axxmasterr
źródło
Bezprzewodowa mysz laserowa Microsoft 5000 ( microsoft.com/hardware/mouseandkeyboard/... ) ma tę funkcję.
Travis,
Masz rację! Miałem tę mysz przed uaktualnieniem do VX. VX ma dwie bardzo fajne funkcje, dlatego zaktualizowałem. Ma koło zamachowe na kółku przewijania, które obraca się przez 7 sekund. Inną ciekawą funkcją jest klucz USB dla myszy, który w rzeczywistości pasuje całkowicie do urządzenia, więc bardzo trudno jest zgubić klucz.
Axxmasterr
3

W niektórych programach Windows przesuwanie przewija się w poziomie (np. Eksplorator Windows).

W innych programach, takich jak Internet Explorer, Firefox i Excel, przytrzymanie przycisku kółka przewijania i przechodzenie od lewej do prawej przewija się w poziomie.

Matthew Lock
źródło
2
Wygląda na to, że Chrome ma również wbudowane przewijanie w poziomie Shift.
Sam
Wygląda na to, że działa również w VS, czego właściwie potrzebowałem! Dziękuję Ci!
Shimmy,
2

Oto zhackowane rozwiązanie dla programu Word (tylko) wymagające makr AutoHotKey i Word. Działa tylko w głównym widoku dokumentu w programie Word (co jest dla mnie wystarczające).

Najpierw użyj AutoHotKey, aby wysłać niestandardowe naciśnięcie klawisza do programu Word w odpowiedzi na działanie myszy. Używam Alt-M RightArrow i Alt-M LeftArrow. (Mam również mapowania dla zdarzeń WheelLeft i WheelRight poniżej, ponieważ moja mysz wysyła je dobrze; Potrzebuję tylko programu Word, aby zrobić z nimi coś użytecznego).

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

Skonfiguruj powiązania klawiszy Word (w tym celu możesz też skorzystać z okna dialogowego dostosowywania klawiatury):

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

Wreszcie, zdefiniuj makra Word w swoim szablonie Normal (lub dostosuj odniesienia do nich powyżej):

Sub ScrollRight()
    ActiveWindow.SmallScroll ToRight:=1
End Sub
Sub ScrollLeft()
    ActiveWindow.SmallScroll ToLeft:=1
End Sub
iagrapefruit
źródło
2

Niezupełnie skrót klawiaturowy, ale zawsze możesz kliknąć kółko myszy. W większości aplikacji można przewijać czterokierunkową ikonę

Blaine
źródło
1

Po rozejrzeniu się, w końcu znalazłem sposób (za pomocą AutoHotKey ), który działa w Excelu i wszędzie indziej, bez oczywistego zepsucia czegokolwiek (zaadaptowanego z kilku różnych rozwiązań na forach AutoHotKey, chociaż nie nagrałem źródeł, więc nie mogę podać odpowiedni kredyt przepraszam).

Wydaje się, że MS Excel ma dziwne sposoby obsługi interfejsu użytkownika (choć jakoś po wielu latach sprawdzania, co dali nam programiści MS Office, nie jestem zaskoczony). Ten skrypt wydaje się działać prawie wszędzie oprócz MS Word - jeśli ktoś może to rozwiązać, daj mi znać! Prawdopodobnie jest to coś w rodzaju znalezienia klasy okna dla Worda i kodowania jej tak, jak w przypadku Excela (tylko z innym zestawem klawiszy).

#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
BevanFindlay
źródło
1

Z rozwiązania Sama opracowałem własne rozwiązanie, które ma konfigurowalną prędkość przewijania:

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
Envil
źródło
Świetny scenariusz. To działa naprawdę dobrze.
Nick Painter
Jedyną aplikacją, na której nie działa, jest Eksplorator Windows.
Nick Painter,