Wie scrollen Sie die Liste der Notizen in OneNote mit dem Mausrad unter Windows 7?

1387
user1306322

Wenn Sie den Cursor mit einer Bildlaufleiste innerhalb einer Liste bewegen, rollt das Mausrad normalerweise durch diese Liste. In OneNote kann ich jedoch nur die Notizseite selbst scrollen, wenn sich der Cursor definitiv innerhalb der Liste der Notizen befindet (blauer Bereich in dieser Abbildung):

schickes gif, es ist schade, wenn du es nicht siehst

Es scheint nicht wichtig zu sein, ob die Seite gescrollt werden kann oder nicht. Das Mausrad dreht die Liste der Notizen nicht, wenn es sich im blauen Bereich befindet. Ich kann ihn nur durch Interaktion mit der Bildlaufleiste mit der linken Maustaste scrollen.

Es scheint das Problem mit Windows 7 zu sein (vielleicht ist es das Betriebssystem oder vielleicht hat OneNote-Version für 7 diesen Fehler). Windows 10 scheint dieses Problem überhaupt nicht zu haben.

0
Nicht alle Programme akzeptieren alle Eingabemöglichkeiten. In ähnlicher Weise lösen die Schaltflächen "Zurück" und "Weiter" der Maus nichts in Programmen aus, für die nichts geeignet ist. Ich glaube, ich habe in anderen Windows-Programmen gearbeitet, die das Scrollen der Maus ignorieren, mich aber nicht aus meinem Kopf erinnern. Die Entwickler müssen absichtlich "Tun, wenn ein Mausradereignis empfangen wird" programmieren, damit etwas passiert. Christopher Hostage vor 7 Jahren 0
@ChristopherHostage Dies scheint ein spezifisches Problem für Windows 7 zu sein. In Windows 10 funktioniert es einwandfrei. user1306322 vor 7 Jahren 0

1 Antwort auf die Frage

0
user1306322

Neue, viel einfachere Lösung mit AutoHotKey

Ich habe nach einem Weg gesucht, um Einfrieren durch ständige Überprüfungen des aktiven Fensters zu vermeiden, und auch nach einer insgesamt einfacheren Codelösung. Folgendes habe ich gemacht:

#ifWinActive ahk_class Framework::CFrame WheelUp:: ControlGetFocus, control, A Loop 3 SendMessage, 0x115, 0, 0, %control%, A Return  #ifWinActive ahk_class Framework::CFrame WheelDown:: ControlGetFocus, control, A Loop 3 SendMessage, 0x115, 1, 0, %control%, A Return 

Ändern Sie die Loop 3zu Loop 5oder wie viele Zeilen, die Sie für eine Bewegung des Rades wollen blättern.


alte Lösung mit AutoIt

Hinweis: Diese Lösung kann bei älteren CPUs oder bei voller CPU-Auslastung zum Stottern und gelegentlichen Einfrieren führen.

Ich zog ein AutoIt-Skript hoch, das den Cursor im Notizenlistenbereich erkennt. Wenn Sie nach oben oder unten blättern, klicken Sie auf die Schaltflächen "Auf" und "Ab" in der Bildlaufleiste. Dies funktioniert mit mehreren OneNote-Fenstern. Sie müssen sich nicht auf das Fenster konzentrieren, damit der Bildlauf funktioniert, bewegen Sie den Mauszeiger über diese Liste:

#include <AutoItConstants.au3> #include <MsgBoxConstants.au3> #include <MouseOnEvent.au3> ; get it from https://www.autoitscript.com/forum/topic/64738-mouseonevent-udf/ #include <WinAPI.au3> #include <Misc.au3>  _MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, 'MouseWUp') _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, 'MouseWDown') Opt("WinTitleMatchMode", 2) ; 2 - substring mode  Global $clicks = 3 ; how many items to scroll per scroll, change this to 5, 8, 13, 42 or however fast you wanna scroll  Func MouseWUp($iEvent) If StringInStr(WinGetTitle($hWin), " - OneNote") Then  ; check if cursor is within the notes list and not anywhere else Local $cur = MouseGetPos() Local $handle = $hWin ;WinGetHandle("[ACTIVE]") Local $wpos = WinGetPos($handle) ; returna array of x,y,w,h Local $cpos = ControlGetPos ($handle, "", "[CLASS:NetUIHWND; INSTANCE:5]") ;MsgBox($MB_SYSTEMMODAL, "title", "win2:" & $wpos[2] & "; win3:" & $wpos[3] & "; cp2:" & $cpos[2] & "; cp3:" & $cpos[3])  If ($cur[0] > $wpos[0] + $wpos[2] - $cpos[2]) And ($cur[0] < $wpos[0] + $wpos[2]) Then  Local $x = $cpos[2] - 2 Local $y = 58 ControlClick($handle, "", "[CLASS:NetUIHWND; INSTANCE:5]", "left", $clicks, $x, $y)  EndIf  EndIf EndFunc  Func MouseWDown($iEvent) If StringInStr(WinGetTitle($hWin), " - OneNote") Then  Local $cur = MouseGetPos() Local $handle = $hWin ;WinGetHandle("[ACTIVE]") Local $wpos = WinGetPos($handle) Local $cpos = ControlGetPos ($handle, "", "[CLASS:NetUIHWND; INSTANCE:5]")  If ($cur[0] > $wpos[0] + $wpos[2] - $cpos[2]) And ($cur[0] < $wpos[0] + $wpos[2]) Then  Local $x = $cpos[2] - 2 Local $y = $cpos[3] - 8 ControlClick($handle, "", "[CLASS:NetUIHWND; INSTANCE:5]", "left", $clicks, $x, $y)  EndIf EndIf EndFunc  ; https://stackoverflow.com/a/11270659 Func _WindowFromPoint($iX,$iY) Local $stInt64,$aRet,$stPoint=DllStructCreate("long;long") DllStructSetData($stPoint,1,$iX) DllStructSetData($stPoint,2,$iY) $stInt64=DllStructCreate("int64",DllStructGetPtr($stPoint)) $aRet=DllCall("user32.dll","hwnd","WindowFromPoint","int64",DllStructGetData($stInt64,1)) If @error Then Return SetError(2,@error,0) If $aRet[0]=0 Then Return SetError(3,0,0) Return $aRet[0] EndFunc  Local $hControl, $hWin, $hOldWin, $aMousePos $hOldWin = "" While True ;Not _IsPressed("1B") $aMousePos = MouseGetPos() $hControl=_WindowFromPoint($aMousePos[0],$aMousePos[1]) ; Since _WindowFromPoint() can return 'sub' windows, or control handles, we should seek the owner window $hWin=_WinAPI_GetAncestor($hControl,2) If $hWin <> $hOldWin Then ;TrayTip("Window Info","Window under mouse = " & WinGetTitle($hWin), 1) $hOldWin = $hWin EndIf Sleep(10) WEnd 

Ich habe nicht herausgefunden, wie Sie verhindern können, dass die Blätter die Notizseite selbst beeinflussen. Wenn jemand einen Weg findet, das Bildlaufereignis aus dem Notizenlistenbereich heraus in den Hauptnotizbereich zu gelangen, teilen Sie Ihre Lösung bitte mit, damit wir die Skripts für beste Ergebnisse kombinieren können.