我正在尝试使用鼠标阅读和滚动浏览 Adobe Reader,但当我开始输入时,我希望它转到我的 OneNote 以便在阅读时做笔记。我可以通过软件本身将 OneNote 设置为始终位于最前面,因此将其设置为活动窗口不是强制性要求,但当我将其始终位于最前面时,它也会起作用。不过,如果我可以保留我正在使用的其他窗口为活动窗口,而键盘输入转到 OneNote,那就太好了。
我尝试了几种不同的方法,但我绝对不是专家并且遗漏了一些东西。
尝试 1(这个问题是,我按下的第一个键是在打开的窗口中注册的,这对我的阅读器造成了严重破坏 - 而不是转到 OneNote):
#InstallKeybdHook
SetTimer, AnyKeyPressed, 100
AnyKeyPressed:
if( A_TimeIdlePhysical < 100 ){
WinActivate, ahk_exe ONENOTE.EXE
}
第二次尝试(这可以启动 OneNote 并且不在打开的窗口中注册密钥,但我实际上无法在 OneNote 中输入任何内容):
#Persistent
SetTimer, AnyKeyPressed, 100
AnyKeyPressed:
#IfWinActive ahk_exe ONENOTE.EXE
{
SendInput % "{sc" Format("{:03X}", sc) "}"
}
#IfWinNotActive ahk_exe ONENOTE.EXE
{
AnyEndKeys =
( LTrim Join
{LWin}{RWin}{AppsKey}
{LShift}{RShift}{LControl}{RControl}{LAlt}{RAlt}
{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}
{Left}{Right}{Up}{Down}
{Insert}{Delete}{Home}{End}{PgUp}{PgDn}
{Space}{Tab}{Enter}{Escape}{Backspace}
{CapsLock}{NumLock}{ScrollLock}
{PrintScreen}{Pause}
{Numpad0}{Numpad1}{Numpad2}{Numpad3}{Numpad4}
{Numpad5}{Numpad6}{Numpad7}{Numpad8}{Numpad9}
{NumpadIns}{NumpadEnd}{NumpadDown}{NumpadPgDn}{NumpadLeft}
{NumpadClear}{NumpadRight}{NumpadHome}{NumpadUp}{NumpadPgUp}
{NumpadDot}{NumpadDel}
{NumpadDiv}{NumpadMult}{NumpadSub}{NumpadAdd}{NumpadEnter}
)
Input AnyKey, L1, %AnyEndKeys%
WinActivate, ahk_exe ONENOTE.EXE
}
第三次尝试(这个方法很好用,但我无法让 Esc 键正常工作 - 例如,我无法使用退格键。另外,当我按下回车键时,它会将新行放在顶部而不是光标停留的位置):
#InstallKeybdHook
Loop {
Input,anykey,L1,{LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}
ControlSend, OneNote::DocumentCanvas1, %anykey%, ahk_exe ONENOTE.EXE
}
我知道将这些结合起来可能有一个解决方案,或者我只需要添加一些简单的东西,但是我的大脑因为学校和新生儿而疲惫不堪,我只想能够在阅读时写笔记,而不必不断地来回切换窗口。
非常感谢您的帮助,我不能再浪费时间了!
答案1
以下是您的代码和 user3419297 的代码的组合。
我不知道 OneNote 为何行为不当,无法按预期将“光标”保留在末尾。您可以通过发送 {End} 稍微解决这个问题,但除非您只想要运行日志,否则您无法真正正确编辑。
捕获所有击键并将它们发送到另一个窗口并不理想,因为您发现...我不确定您处理 Acrobat 的导航方法到底是什么,但我肯定会想以相反的方式执行此操作。
换句话说,我怀疑我是否会在 Acrobat 中导航时尝试将所有击键发送到 OneNote...相反,我会在 OneNote 中进行所有编辑,同时将某些击键/鼠标点击等发送到 Acrobat 以便导航 pdf - 如果您与 Acrobat 的导航交互有限,那么这似乎会容易得多。
测试代码
Loop {
If thisID:=WinActive(myWinTitle:="ahk_exe Acrobat.exe") {
keys = *1,*2,*3,*4,*5,*6,*7,*8,*9,*0,*a,*b,*c,*d,*e,*f,*g,*h,*i,*j,*k,*l,*m,*n,*o,*p,*q,*r,*s,*t,*u,*v,*w,*x,*y,*z,*Space,*Enter,*Tab,*Backspace,*Delete,*End,*Home,*Right,*Left,*PgUp,*PgDn ; ...
Loop,Parse,keys, `,
Hotkey, %A_LoopField%, Label, On
Tooltip, Active
Sleep 2000
Tooltip
While WinActive("ahk_id" thisID) ; wait for user to navigate away
Sleep 200
Loop,Parse,keys, `,
Hotkey, %A_LoopField%, Label, Off
; delay is just for visibility, remove tooltips for operation
Tooltip, Inactive
Sleep 2000
Tooltip
}
}
Label:
key := A_ThisHotkey
If (SubStr(key, 1,1)="*")
key := SubStr(key, 2) ; get rid of "*" if present
If (StrLen(key)>1) ; encapsulate all special chars
key:="{" SubStr(key, 1) "}"
; send raw and let keyboard modifiers that are already down modify the keys being sent
ControlSend, OneNote::DocumentCanvas1, % key , ahk_exe ONENOTE.EXE
; OneNote misbehaves
ControlSend, OneNote::DocumentCanvas1, {End}, ahk_exe ONENOTE.EXE
ToolTip % A_ThisHotkey "-->" key ; debug only
Return