capslock-plus icon indicating copy to clipboard operation
capslock-plus copied to clipboard

在onenote中无法移动光标

Open hesong44 opened this issue 7 years ago • 12 comments

请问这个问题可以解决吗

hesong44 avatar Aug 22 '17 23:08 hesong44

我也发现同样的问题。不过左右移动可以,上下移动不行。

amaruk avatar Aug 23 '17 15:08 amaruk

经常使用Onenote,用Capslock+上下不能移动很难受。 希望能改进。 image

TooFlow avatar Jan 24 '18 01:01 TooFlow

把对应的按键中的SendInput改为SendPlay

neibor avatar Apr 17 '18 20:04 neibor

亲测可用,感激!

摘自手册:(http://ahkcn.sourceforge.net/docs/commands/Send.htm#SendInputDetail) 在三种发送模式中, SendPlay 是最不常用的, 因为它本身并不模拟键击和鼠标点击. 作为替代, 它制造一系列事件 (消息) 直接流向活动窗口 (类似于 ControlSend, 但在更低的层面). 因此 SendPlay 不会触发热键或热字串。

所以可能是sendinput和OneNote的热键冲突?

amaruk avatar Apr 18 '18 08:04 amaruk

keyFunc_moveUp(i:=1){ global if(WinActive("ahk_id" . GuiHwnd)) { ControlFocus, , ahk_id %LV_show_Hwnd% SendPlay, {Up %i%} ControlFocus, , ahk_id %editHwnd% } else SendPlay,{up %i%} Return }

keyFunc_moveDown(i:=1){ global if(WinActive("ahk_id" . GuiHwnd)) { ControlFocus, , ahk_id %LV_show_Hwnd% SendPlay, {Down %i%} ControlFocus, , ahk_id %editHwnd% } else SendPlay,{down %i%} Return }

是这样改吗,为什么还是不行

hesong44 avatar Apr 22 '18 08:04 hesong44

@hesong44 看起来是没什么问题 , 确认改的是对应的程序吗

neibor avatar Apr 23 '18 02:04 neibor

image 我改的是上面这个文件,应该正确吧

hesong44 avatar Apr 23 '18 11:04 hesong44

对的。 改完别忘记编译。 selectup和selectdown也做同样修改。

amaruk avatar Apr 24 '18 04:04 amaruk

多谢了,虽然还是不行!

hesong44 avatar Apr 25 '18 13:04 hesong44

同样问题。以一种奇怪方式解决,本机运行正常 (Win10 20H2, OneNote 2016)。

修改lib_keysFunction中以下函数:


keyFunc_moveUp(i:=1){
    global

    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        return
    }

    if(WinActive("ahk_id" . GuiHwnd))
    {
        ControlFocus, , ahk_id %LV_show_Hwnd%
        SendEvent, {Up %i%}
        ControlFocus, , ahk_id %editHwnd%
    }
    else {
        SendEvent,{Up %i%}
        ; SendInput, {Up %i%}

    }
    Return
}

keyFunc_moveDown(i:=1){
    global
    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        return
    }
    if(WinActive("ahk_id" . GuiHwnd))
    {
        ControlFocus, , ahk_id %LV_show_Hwnd%
        SendInput, {Down %i%}
        ControlFocus, , ahk_id %editHwnd%
    }
    else {
        SendInput,{down %i%}
    }
    Return
}

keyFunc_selectUp(i:=1){
    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_LSHIFT=0xA0
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        dllcall("keybd_event","UChar", VK_LSHIFT, "UChar", 0X2A, "UInt", 1, "Ptr", 0 ) ;以神奇的方式按下LShift
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        Send, {RShift Up} ;卡了一个bug,前面的LShift取消不掉了,只能用RShift取消
        return
    }

    SendInput, +{Up %i%}
    return
}


keyFunc_selectDown(i:=1){
    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_LSHIFT=0xA0
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        dllcall("keybd_event","UChar", VK_LSHIFT, "UChar", 0X2A, "UInt", 1, "Ptr", 0 ) ;以神奇的方式按下LShift
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        Send, {RShift Up} ;卡了一个bug,前面的LShift取消不掉了,只能用RShift取消
        return
    }

    SendInput, +{Down %i%}
    return
}

aqzlpm11 avatar Feb 27 '21 08:02 aqzlpm11

https://capslockx.snomiao.com/#/?id=javascript-%e8%ae%a1%e7%ae%97-%e5%bb%ba%e8%ae%ae%e5%ae%89%e8%a3%85-nodejs-

CLX 有针对OneNote的光标移动特例,可以试试

https://github.com/snolab/CapsLockX/blob/3baecc91760e8700f0400b7f374663d77e306668/Modules/01.2-%E6%8F%92%E4%BB%B6-%E7%BC%96%E8%BE%91%E5%A2%9E%E5%BC%BA.ahk#L60-L74

具体代码大概长这样


上方向键发送(n:=1)
{
    ; 在 OneNote 笔记内部直接 SendEvent 上下方向键无反应, 故特殊处理使用 ControlSend 。
    if (hWnd := WinActive(".*- OneNote ahk_class Framework\:\:CFrame ahk_exe ONENOTE.EXE")) {
        ControlGetFocus, focusedClassNN, ahk_id %hWnd%
        if (focusedClassNN == "OneNote`:`:DocumentCanvas1") {
            loop %n%{
                ControlSend, OneNote::DocumentCanvas1, {Blind}{Up}
            }
        }
    }
    loop %n%{
        SendEvent {Blind}{up}
    }
}

snomiao avatar Sep 12 '21 09:09 snomiao

同样问题。以一种奇怪方式解决,本机运行正常 (Win10 20H2, OneNote 2016)。

修改lib_keysFunction中以下函数:

keyFunc_moveUp(i:=1){
    global

    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        return
    }

    if(WinActive("ahk_id" . GuiHwnd))
    {
        ControlFocus, , ahk_id %LV_show_Hwnd%
        SendEvent, {Up %i%}
        ControlFocus, , ahk_id %editHwnd%
    }
    else {
        SendEvent,{Up %i%}
        ; SendInput, {Up %i%}

    }
    Return
}

keyFunc_moveDown(i:=1){
    global
    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        return
    }
    if(WinActive("ahk_id" . GuiHwnd))
    {
        ControlFocus, , ahk_id %LV_show_Hwnd%
        SendInput, {Down %i%}
        ControlFocus, , ahk_id %editHwnd%
    }
    else {
        SendInput,{down %i%}
    }
    Return
}

keyFunc_selectUp(i:=1){
    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_LSHIFT=0xA0
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        dllcall("keybd_event","UChar", VK_LSHIFT, "UChar", 0X2A, "UInt", 1, "Ptr", 0 ) ;以神奇的方式按下LShift
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_UP, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        Send, {RShift Up} ;卡了一个bug,前面的LShift取消不掉了,只能用RShift取消
        return
    }

    SendInput, +{Up %i%}
    return
}


keyFunc_selectDown(i:=1){
    if (WinActive("ahk_exe onenote.exe"))
    {
        VK_LSHIFT=0xA0
        VK_UP=0x26
        VK_DOWN=0x28
        KEYEVENTF_KEYUP=0x0002
        dllcall("keybd_event","UChar", VK_LSHIFT, "UChar", 0X2A, "UInt", 1, "Ptr", 0 ) ;以神奇的方式按下LShift
        Loop, %i%
        {
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", 0, "Ptr", 0 )
            dllcall("keybd_event","UChar", VK_DOWN, "UChar", 0, "UInt", KEYEVENTF_KEYUP, "Ptr", 0 )
        }
        Send, {RShift Up} ;卡了一个bug,前面的LShift取消不掉了,只能用RShift取消
        return
    }

    SendInput, +{Down %i%}
    return
}

很厉害

Snailser avatar Sep 22 '22 13:09 Snailser