我使用Autohotkey将alt + i / k映射到上/下键,使用以下代码:
!i:: Send {up}
!k:: Send {down}
这些重映射适用于除2016年Onenote之外的所有应用程序。我在线查看并在以下链接中找到了一些讨论:
https://autohotkey.com/board/topic/15307-up-and-down-hotkeys-not-working-for-onenote-2007/
https://autohotkey.com/board/topic/41454-remap-key-doesnt-work-in-ms-onenote/
他们建议使用sendplay或sendraw,但这些对我没有用。任何人都可以帮我这个吗?
答案 0 :(得分:5)
SendPlay
并使用UI Access 这是您的Send
更改为SendPlay
的脚本:
!i::SendPlay {up}
!k::SendPlay {down}
它按照您的预期模拟↑和↓。在Windows 10上使用OneNote 2016进行测试。
如何启用SendPlay
:(最初在Windows 10中无效)
将上述映射保存到AHK文件中。我只使用这两行文件updown.ahk
。
右键单击上面的AHK文件,然后从其上下文菜单中选择使用UI Access运行(这实际上可以解决问题)
<强>故障排除:强>
AHK文件的上下文菜单中缺少使用UI访问项
SendPlay
仍无效?
请参阅在线或本地AHK帮助文件中提供的常见问题解答主题How do I work around problems caused by User Account Control (UAC)。 (它们是相同的。)
同样描述限制的主题是Run with UI Access(可在线或在本地帮助中获得)。
答案 1 :(得分:3)
似乎Autohotkey在OneNote上存在问题。 做了一些试验和错误我发现:
Send {CTRL DOWN}{UP}{CTRL UP}
模拟向上键但不完全。
答案 2 :(得分:2)
似乎很多人都遇到过OneNote的问题。
https://autohotkey.com/boards/viewtopic.php?f=5&t=25925
https://autohotkey.com/board/topic/49216-interference-between-microsoft-onenote-and-autohotkey/
但是,有些人建议在运行Onenote之前打开AHK 可以解决此问题。对于AHK与Onenote交互,Surface Pro用户似乎没有任何问题。我可以问你用的是什么电脑吗?
希望它有所帮助!
答案 3 :(得分:2)
我的解决方案:
if (winactive("ahk_exe onenote.exe"))
{
vk_code = 0xA0
dllcall("keybd_event","UChar", vk_code, "UChar", 0, "UInt", 0, "Ptr", 0 )
vk_code = 0x26
dllcall("keybd_event","UChar", vk_code, "UChar", 0, "UInt", 0, "Ptr", 0 )
vk_code = 0x26
dllcall("keybd_event","UChar", vk_code, "UChar", 0, "UInt", 0x0002, "Ptr", 0 )
vk_code = 0xA0
dllcall("keybd_event","UChar", vk_code, "UChar", 0, "UInt", 0x0002, "Ptr", 0 )
}
else
send {blind}{up}
答案 4 :(得分:1)
!i::ControlSend, OneNote::DocumentCanvas1, {Up}, ahk_exe ONENOTE.EXE
在ahk论坛here (original)和here (citing original I think)上找到。验证可在Windows 10 1803和OneNote 2016(台式机版)上正常工作。
答案 5 :(得分:0)
#if WinActive("ahk_exe" "ONENOTE.EXE")
j(){
run %A_ScriptDir%\sendDown.exe
}
k(){
run %A_ScriptDir%\sendUp.exe
}
NumLock & j::j()
return
NumLock & k::k()
return
您可以从 here
下载 exe答案 6 :(得分:0)
@miroxlav 接受的答案对我有用,但我对安全隐患不满意。
@guest 使用 dllcall("keybd_event"...)
的建议显示了方式,但不必要地发送了 Shift+Up.,并且不支持修改您映射到上/下的键,以便您可以执行诸如按 shift + 之类的操作用于扩展选择的伪造键。
导致下面的代码 - 基本上只发送虚拟键码 vk_up 和 vk_down up/down,但使用 *a::...
匹配任何修饰符
#If GetKeyState("Capslock","T") && alternate_keyboard_layouts == ...
;; map CapsLock + A/S => up/down
*a::work_around_OneNote_problems("up")
*s::work_around_OneNote_problems("down")
;; ^^ uses * - all modifiers - so that can do shift+a to exend selection, etc.
#If
work_around_OneNote_problems(key_str)
{
local
if (! winactive("ahk_exe onenote.exe"))
send {blind}{%key_str%}
vk_up := 0x26
vk_down := 0x28
if( key_str == "up" )
{
send_keybd_event_down(vk_up)
send_keybd_event_up(vk_up)
}
else if( key_str == "down" )
{
send_keybd_event_down(vk_down)
send_keybd_event_up(vk_down)
}
else {
msgbox, work_around_OneNote_problems only for up/down, got: <<%key_str%>>
}
}
send_keybd_event_down(vk_code)
{
dllcall("keybd_event","UChar", vk_code, "UChar", 0, "UInt", 0, "Ptr", 0 )
}
send_keybd_event_up(vk_code)
{
dllcall("keybd_event","UChar", vk_code, "UChar", 0, "UInt", 0x0002, "Ptr", 0 )
}