У 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
Існує спосіб зробити це у вікнах правою мишкою. У мене є миша з колесом прокрутки, в якому вбудована права бічна ліва / бігова кнопка правої. Просто натискання колеса прокрутки вліво або вправо перемістить вміст у потрібному напрямку. У мене є Logitech VX, і я був дуже задоволений цим.
VX також дозволяє вам налаштувати кнопки по-різному для кожної програми, якщо ви були так схильні. Цей рівень налаштування дуже приємно мати!
У деяких програмах Windows зсув прокручується горизонтально (наприклад, Провідник Windows).
В інших програмах, таких як Internet Explorer, Firefox та Excel, утримуючи кнопку колеса прокрутки та рухаючись зліва направо, прокручуються горизонтально.
Ось стислий спосіб для Word (лише), який вимагає як AutoHotKey, так і Word макросів. Він працює лише на головному перегляді документа в Word (що досить добре для мене).
По-перше, використовуйте AutoHotKey, щоб надіслати користувачеві натискання клавіші у відповідь на дії миші. Я використовую 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
З рішення Сема я розробив власне рішення, яке має настроювану швидкість прокрутки:
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