我正在尝试创建一个脚本,使用 Alt-Tab 在窗口之间移动,将一个窗口上的表单中的字段复制到另一个窗口上的表单中。
第一个 alt-tab 可以从窗口 1 移动到窗口 2,但是下一个 alt-tab 可以从窗口 2 移动到窗口 1,但却不起作用。
我的脚本如下:
#z::发送 ^c!{tab}^v!{tab}{tab}^c!{tab}{tab}^v!{tab}{tab}^c!{tab}{tab}^v!{tab}
按下 Window z 时,我希望它复制窗口 1 中的当前字段,移动到窗口 2 并粘贴,然后移回窗口 1 并复制下一个字段,移动到窗口 2 并粘贴到下一个字段,依此类推。
有人可以帮忙吗?
谢谢
答案1
我发现在这种情况下发送一串按键并不是很有效。有太多不同的方法可能会出错。我会尝试使用内置剪贴板变量,并且只在窗口之间切换一次。
您可以使用热键在脚本中按照以下格式执行一组指令:
z::
; do a bunch of stuff here
return
我会一次性从第一个表单中获取数据并将其存储:
clipboard = ; Start off empty to allow ClipWait to detect
Send ^c
ClipWait
Field1:=ClipboardAll
Send {Tab} ; move to next field
一旦获取了第一个窗口的数据,就可以转到下一个窗口:
Send AltTab
(虽然更好的方法是激活。
在第二个窗口中,您可以向下移动表单,插入第一个窗口中的数据:
clipboard = %Field1%
Send ^v
Wait 100
Send {Tab} ; move to field 2...
答案2
这里有两种非常简单的方法可以精确地实现您想要的 alt-multiple-tabs 序列。最重要的是,您可以在花括号内指定要按下某个键的次数!:
1)以下使用熟悉的!为了替代然后您就可以按 alt-tab 键退出 2 个窗口。当然,您可以将“2”更改为您需要的任何数字:
Send !{TAB 2}
所以你的脚本可以修改为:
#z::Send ^c!{tab}^v!{tab 2}^c!{tab 2}^v!{tab 2}^c!{tab 2}^v!{tab}
2)下一个让你明确地说出什么时候替代按下时以及松开时。{标签}{标签}缩写为{标签 2}:
Send {alt down}{tab 2}{alt up}
所以你的脚本可以修改为:
#z::Send ^c!{tab}^v{alt down}{tab 2}{alt up}^c{alt down}{tab 2}{alt up}^v{alt down}{tab 2}{alt up}^c{alt down}{tab 2}{alt up}^v!{tab}
在寻找解决方案之前,我也尝试过!{标签}{标签}您尝试过;只是第二个 {tab} 不被视为伴随 alt。
我在AutoHotKey 帮助>>键盘控制>>Send / SendRaw / SendInput / SendPlay / SendEvent:发送按键和点击
答案3
如果窗口标题总是至少有相同的部分名称(无标题 - 记事本、Document1 - 记事本等),那么真正简单的方法是使用等待活动函数。如果您知道它们永远不会改变,请打开 AU3Record.exe 程序(位于 C:\Program Files\AutoIt3\SciTE\ScriptWriter\AU3Record.exe)。开始录制,并在窗口之间来回单击几次。停止录制,取出以 WinWaitActive 开头的行和参数中的窗口标题,删除任何可能更改的内容,然后使用这些行在窗口之间来回切换。
这样做效率更高,因为您不必担心在编辑脚本时维护大量的键盘命令(执行此操作、alt-tab、执行该操作、alt-tab、再次执行此操作、alt-tab 等)。
另外,顺便提一下,我会将按键序列拆分成更小的按键序列。如果每行的按键序列只有 2 或 3 个按键,管理起来会更容易。如果您仍然需要同时运行所有按键,那么请将其变成一个函数。