capslock-plus
capslock-plus copied to clipboard
在onenote中无法移动光标
请问这个问题可以解决吗
我也发现同样的问题。不过左右移动可以,上下移动不行。
经常使用Onenote,用Capslock+上下不能移动很难受。
希望能改进。
把对应的按键中的SendInput改为SendPlay
亲测可用,感激!
摘自手册:(http://ahkcn.sourceforge.net/docs/commands/Send.htm#SendInputDetail) 在三种发送模式中, SendPlay 是最不常用的, 因为它本身并不模拟键击和鼠标点击. 作为替代, 它制造一系列事件 (消息) 直接流向活动窗口 (类似于 ControlSend, 但在更低的层面). 因此 SendPlay 不会触发热键或热字串。
所以可能是sendinput和OneNote的热键冲突?
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 看起来是没什么问题 , 确认改的是对应的程序吗
我改的是上面这个文件,应该正确吧
对的。 改完别忘记编译。 selectup和selectdown也做同样修改。
多谢了,虽然还是不行!
同样问题。以一种奇怪方式解决,本机运行正常 (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
}
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}
}
}
同样问题。以一种奇怪方式解决,本机运行正常 (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 }
很厉害