AHK在热键中间分支关键词

时间:2016-10-19 17:11:50

标签: loops autohotkey

我在医生办公室工作。为这项工作而制作的程序非常基础,并且完全充满了错误,因此我会重复部分代码以确保它们正常工作。我使用了两个程序,一个用于计费方面,一个用于图表。现在,我的热键从计费方面获取患者的出生日期和病历号码,进入图表方面,根据这两件事情搜索患者(通常MRN就足够了,但是Epic打击,所以这还不够)选择患者,点击“Chart Review”,然后等待我选择服务日期。左键单击后,它会切换回计费方面,以便我可以将信息复制到它。问题是,有时患者没有出现,我必须记录下来。如果他们没有显示,则没有可以点击的图表,我必须点击其他地方再次检查他们没有显示。我需要一个分支类型的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

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

编辑:也许是“如果我点击此处这样做,或者如果我点击此处这样做”这种声明将起作用。我可以获取Chart Review窗口的尺寸与约会的工具栏按钮。我一直在尝试这个用于另一个任务,但它可能在这里工作。对此的帮助也将受到赞赏!

编辑: @Bob,实际上,对于迟到的回复感到抱歉,我发现循环一个带有一些非常短的关键等级的小语句对我来说很有用。我会在下面粘贴我的代码。 这只是一个片段,所以它不是完整的代码。

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
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

我不能使用带有keywaits的if语句

有一种方法可以使用L1V“滥用”Input命令(可能最好也可以投入I)作为({有点限制)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 
(...)