OneNote перехватывает курсор пера перед AHK? - PullRequest
0 голосов
/ 22 февраля 2019

Отказ от Palm - это мусор на моем ноутбуке, поэтому я отключил сенсорный экран HID, чтобы он регистрировался только пером.Итак, я использовал AHK, чтобы создать скрипт, который будет прокручивать страницу после того, как пользователь нажмет ALT, и отключит прокрутку при втором ALT нажатии.

Он отлично работает, за исключением того, что в OneNote (Приложение Win 10), ввод курсором пера перехвачен OneNote.Например, если я сделаю ToolTip, %xPos% %yPos%, то он не будет обновляться, пока курсор моего пера находится где-нибудь над окном OneNote.Вне этого все работает нормально.

Как сделать, чтобы AHK украл курсор мыши, прежде чем OneNote сможет его получить?

isTabletMode := 1
penScrollActive := 0

#MaxThreadsPerHotkey 2   ; Allows a second instance to modify penScrollActive while PenScroll is looping.
$Alt::
    ; Check if PC is in tablet mode.
    ;   1 --> Tablet, 0 --> Desktop
    RegRead, isTabletMode, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ImmersiveShell,TabletMode
    if(isTabletMode) {
        if(penScrollActive) {
            penScrollActive := 0  ; We are already scrolling, so turn it off.
        }
        else {
            penScrollActive := 1 ; We are not scrolling yet, so turn on pen scrolling.
        }
    GoSub PenScroll
    }
    else    ; If we aren't in tablet mode, then Alt should just send Alt
        Send, {Alt}
    return

PenScroll:
    loop {    ; For some reason, while() logic wasn't working, so this is a workaround. Breaks upon the conditional at bottom.
        MouseGetPos, mouseX, mouseY
        ToolTip, %mouseX% %mouseY%   ; For debugging: Output what cursor pos registers as.  (This isn't working in OneNote when using the pen input as a cursor (eg. hover) ).
        Sleep, 20
        MouseGetPos, mouseX_new, mouseY_new
        if (mouseX_new - mouseX > 0)        ; Horizontal scrolling
            Send, {WheelLeft}
        else if (mouseX_new - mouseX < 0)
            Send, {WheelRight}
        if (mouseY_new - mouseY > 0)        ; Vertical scrolling
            Send, {WheelUp}
        else if (mouseY_new - mouseY < 0)
            Send, {WheelDown}
        if (penScrollActive = 0)            ; Conditional to break out
            break
    }
    return

; To Reload the script: Win+`
#`::Reload
Return

#If penScrollActive
LButton::Return

1 Ответ

0 голосов
/ 24 апреля 2019

Одна вещь, которую вы можете попробовать - моя AutoHotInterception библиотека для AHK.Вы устанавливаете пользовательский драйвер устройства, затем вы можете подключиться к событиям ввода на уровне драйвера, ниже ОС.
Он поддерживает "Абсолютную" (как у графического планшета) мышь
Вы хотите "Режим подписки"конечные точки

...