【问题标题】:AHK Branching KeyWaits in Middle of HotkeyAHK 分支键在热键中间等待
【发布时间】:2016-11-17 00:24:19
【问题描述】:

我在一家医生办公室工作,负责结算。为这项工作制作的程序非常基础,并且绝对充满了错误,所以我重复了我的部分代码以确保它们能够正常工作。我使用了两个程序,一个用于计费端,一个用于图表。现在,我的热键从计费端获取患者的出生日期和病历编号,转到图表端,根据这两件事搜索患者(通常 MRN 就足够了,但 Epic 吹了,所以这还不够)选择患者,单击“图表审查”,然后等待我选择服务日期。左键单击后,它会返回计费端,因此我可以将信息复制到其中。问题是,有时病人没有出现,我必须记录下来。如果他们没有显示,没有图表可以点击,我必须点击其他地方来仔细检查他们没有显示。我需要一个 keywait 的分支类型,如果我点击它,它会进入账单侧,或者如果我点击 A 或其他东西,它会点击约会,然后过去,然后标签回到账单并点击“键入的笔记”。我可以管理除分支部分之外的所有内容。 Getkeystate 语句似乎不起作用,我不能使用带有 keywaits 的 if 语句(显然)。

!D::
BlockInput, MouseMoveOff
sleep 100
Winactivate, Hyperspace
sleep 100
sendinput ^w
sleep 300
winactivate, Form billing
sleep 300
BlockInput, MouseMove
mouseclick,, 400, 70
BlockInput, MouseMove
click
sleep 200
sendinput ^c
sleep 400
dob:=Clipboard
sleep 400
BlockInput, MouseMove
mouseclick,, 385, 85
BlockInput, MouseMove
click
sleep 200
sendinput ^c
WinActivate, Hyperspace
sleep 400
sendinput ^3
sleep 400
sendinput ^v
sleep 400
BlockInput, MouseMove
mouseclick,, 200, 145
sleep 400
Clipboard:=dob
sleep 400
StringTrimLeft, dobyear, dob, 6
sleep 50
dobmathd:=A_YYYY-dobyear
sleep 50
StringTrimRight, dobmo, dob, 8
sleep 50
StringTrimRight, dobd, dob, 5
sleep 50
StringTrimLeft, dobday, dobd, 3
sleep 50
if (dobmo >= A_MM) and (dobday >= A_DD)
{
dobmathd--
}
sleep 50
sendinput ^v
sleep 200
sendinput {Enter}
sleep 200
sendinput {Enter}
sleep 1700
BlockInput, MouseMove
mouseclick,, 85, 235
sleep 300
BlockInput, MouseMoveOff
;if (character = a)
;{
;BlockInput, MouseMove
;mouseclick,, 325, 40
;sleep 200
;mouseclick,, 60, 285
;click
;sleep 400
;mouseclick,, 240, 435
;sleep 2000
;winactivate, Form billing
;BlockInput, MouseMoveOff
;return
;}
;if (
tooltip,%dobmathd% Years old, 415, 70
keywait, LButton, D, T200
sleep 200
winactivate, Form billing
return

评论部分是我最后一次尝试,但我一直在谷歌上搜索一个真正的想法来尝试一段时间。任何帮助表示赞赏!

编辑:也许“如果我单击此处执行此操作,或者如果我单击此处执行此操作”之类的语句将起作用。我可以获得图表查看窗口的尺寸与约会的工具栏按钮。我一直在尝试用这个来完成另一项任务,但它可能在这里工作。也将不胜感激!

编辑: @Bob,实际上,很抱歉回复晚了,我发现循环一个带有一些非常短长度的键等待的小语句对我来说效果很好。我将在下面粘贴我的代码。 而且这只是一个sn-p,所以不是完整的代码。

SendInput, {Enter}
Sleep, 1800
BlockInput, MouseMove
MouseClick,, 85, 235
Sleep, 300
BlockInput, MouseMoveOff
Sleep, 20
Loop
{
    KeyWait, LButton, D, T0.02 ;I've picked a chart, meaning they showed up for their appointment
    If !ErrorLevel
    {
        Sleep, 400
        BlockInput, MouseMoveOff
        WinActivate, Form CMP
        Return
    }
    KeyWait, Escape, D, T0.02
    If !ErrorLevel
        Return
    KeyWait, ., D, T0.02 ;They do not appear to have shown up for their appointment, so check the appointment tab
    If !ErrorLevel
    {
        BlockInput, MouseMove
        MouseClick,, 315, 40
        Sleep, 400
        MouseClick,, 100, 285
        Sleep, 1000
        MouseClick,, 270, 440
        Sleep, 300
        BlockInput, MouseMoveOff
        Loop
        {
            KeyWait, Y, D, T0.02 ;They did not show up for their appointment. Bill appropriately.
            If !ErrorLevel
            {
                BlockInput, MouseMove
                WinActivate, Form CMP
                Sleep, 200
                MouseClick,, 210, 260
                Sleep, 200
                MouseClick,, 100, 400
                Sleep, 200
                SendInput, No Show
                Sleep, 200
                WinActivate, Hyperspace
                Sleep, 500
                MouseClick,, 85, 235
                Sleep 400
                WinActivate, Form CMP
                Sleep, 300
                BlockInput, MouseMoveOff
                Return
            }
            KeyWait, N, D, T0.02 ;Don't see a no show, re-check chart review.
            If !ErrorLevel
            {
                BlockInput, MouseMove
                MouseClick,, 85, 235
                Sleep, 500
                BlockInput, MouseMoveOff
                KeyWait, LButton, D
                Sleep, 400
                WinActivate, Form CMP
                BlockInput, MouseMoveOff                    
                Return
            }
            KeyWait, Escape, D, T0.02
            If !ErrorLevel
                Return
        }
    }
}

【问题讨论】:

  • 而且我认为否决我的问题有点苛刻。

标签: loops autohotkey


【解决方案1】:

我不能在 keywaits 中使用 if 语句

有一种方法可以使用L1V(也可以加入I)选项来“滥用”Input 命令,以充当(有些有限的)KeyWait 替换。这应该适用于您的用例。

(...)
Input,var,L1IV ; will act as KeyWait
if (var="a") {
    foo:=Round(Sqrt(1764))
    TrayTip,,The number is %foo%
}
else if (var="s")
  MsgBox Sssnaaakess 
(...)

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2018-10-10
    • 2016-10-15
    相关资源
    最近更新 更多