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?
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?
Odpowiedzi:
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) }
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).
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
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!
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.
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
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
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