【问题标题】:select...Case...EndSelect having problems with my codeselect...Case...EndSelect 我的代码有问题
【发布时间】:2019-07-29 00:18:55
【问题描述】:

我正在尝试为一个简单的数学问题构建一个自动答案,其中问题中的总变量数取决于问号的位置,这里有几个例子:

What is 56 x 3 ?
What is 7 x 3 ?
What is 232 x 634 ?

我已经创建了一个代码,但我不能让它工作,这是我的代码

#include <AutoItConstants.au3>
HotKeySet("{F4}", "ExitProg")
Func ExitProg()
   Exit 0
EndFunc

MouseClick($MOUSE_CLICK_LEFT, 417, 659, 2, 1)
Send("^c")

Func valData()
   $Chek = "What "
   If ClipGet() == $Chek Then
      Check()
      Else
      Do
         MouseClick($MOUSE_CLICK_LEFT, 417, 659, 2, 3)
         Send("^c")
         Sleep(500)
      Until ClipGet() == $Chek

   EndIf
EndFunc

Func Check()
   $Chek2 = "?"

   Select
      Case c1() == $Chek2
      ;two
         cc1()
      Case c2() == $Chek2
      ;three
         cc2()
      Case c3() == $Chek2
      ;four
         cc3()
      Case c4() == $Chek2
      ;five
         cc4()
      Case c5() == $Chek2
      ;six
         cc5()
      Case c6() == $Chek2
      ;seven
         cc6()
      Case c7() == $Chek2
      ;eight
         cc7()
      Case Else
         Exit
   EndSelect
EndFunc

Func c1()
   MouseClick($MOUSE_CLICK_LEFT, 485, 643, 2, 1)
   Send("^c")
EndFunc

Func c2()
   MouseClick($MOUSE_CLICK_LEFT, 493, 644, 2, 1)
   Send("^c")
EndFunc

Func c3()
   MouseClick($MOUSE_CLICK_LEFT, 498, 645, 2, 1)
   Send("^c")
EndFunc

Func c4()
   MouseClick($MOUSE_CLICK_LEFT, 508, 647, 2, 1)
   Send("^c")
EndFunc

Func c5()
   MouseClick($MOUSE_CLICK_LEFT, 514, 645, 2, 1)
   Send("^c")
EndFunc

Func c6()
    MouseClick($MOUSE_CLICK_LEFT, 523, 645, 2, 1)
    Send("^c")
EndFunc

Func c7()
   MouseClick($MOUSE_CLICK_LEFT, 530, 645, 2, 1)
   Send("^c")
EndFunc

Func cc1()
   MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 474, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc
Func cc2()
  MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   SLeep(500)
   MouseClick($MOUSE_CLICK_LEFT, 482, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc
Func cc3()
   MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 487, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc
Func cc4()
   MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 495, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc
Func cc5()
   MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 495, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc
Func cc6()
   MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 509, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc
Func cc7()
   MouseClick($MOUSE_CLICK_LEFT, 453, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("^v")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 509, 645, 2, 1)
   Send("^c")
   Sleep(500)
   MouseClick($MOUSE_CLICK_LEFT, 1347, 197, 1, 1)
   Send("*")
   Send("^v")
   Send("{NUMPADENTER}")
EndFunc





valData()
MouseClick($MOUSE_CLICK_LEFT, 1349, 196, 1, 1) ;clicking the answer in calc
Send("^c")
Send("{DEL}")
MouseClick($MOUSE_CLICK_LEFT, 499, 706, 1, 1)
Send("^v")
Exit

请帮帮我!这个的输出只是搜索问号,之后什么都不做。

【问题讨论】:

  • 您需要使用计算器吗? Autoit 也可以做数学......问题从何而来?您似乎从 GUI 复制单个单词。您不能复制整个问题并在 AutoIt 内部进行处理吗?这样会更快、更安全。
  • 如果 autoit 可以像我上面的例子那样识别措辞问题,那就太好了。我试图通过知道问号的位置来计算运算符(x)之间有多少个数字,所以当我的程序识别它时,它会双击因子来复制它并在计算器中进行计算

标签: bots autoit


【解决方案1】:

这与user4157124 已经给出的答案基本相同。我只是将其分解为单行(牺牲了错误处理;如果问题与给定格式不匹配,$x 无论如何都会为空)。

ClipPut("What is 14 x 36 ?")
$x = Execute(StringRegExpReplace(ClipGet(), '^What is (\d*) x (\d*) \?$', "$1*$2"))
ConsoleWrite($x & @CRLF)

REGEX 模式 [^\d]*(\d+)[^\d]+(\d+).* 也有效(如果问题中或周围有杂散空间,则更加可靠)

(有一个更优雅的方法可以用GUICtrlRead() 来获取问题,但实现取决于源程序的具体构建方式)

编辑(仅用于故障排除):

由于我看不到您的屏幕,请运行以下命令进行故障排除:

MouseClick("Primary", 479, 802, 3, 10) ; slowed down to verify that the cursor goes to the right position
Send("^c")
$x = ClipGet()
ConsoleWrite('Whole question: "' & $x & '"' & @CRLF)
$x = StringRegExpReplace(ClipGet(), 'What is (\d*) x (\d*) \?$', "$1*$2")
ConsoleWrite('Math part: "' & $x & '"' & @CRLF)
$x = Execute($x)
ConsoleWrite('Result: "' & $x & '"' & @CRLF)
; MouseClick("Primary", 480, 844, 1, 1)
; Send($x)

请报告控制台的确切输出,以便我了解哪里出了问题。

【讨论】:

  • 我认为有一个问题,第一个我确实尝试使用你给的所有这些代码,但我可以让它工作,当我运行它时只是复制问题,第二个可能是我的错误,因为这是它,代码ClipPut("What is 14 x 36 ?") 问题是我需要先使用 ctrl + c 复制问题,问题是随机的,并且每次都在变化(只有数字。所以我相信我不能使用它
  • ClipPut 只是将修复问题放入剪贴板进行测试。您必须用您的方法替换它才能获得实际问题。我们没有您的申请,因此无法在这里为您提供帮助。 (你提到了一些关于三次点击的事情,这不是最佳的,但会起作用(与Ctrl-C一起))。 REGEX 的整个概念是提取字符串的未知部分(本例中为两个数字)。
  • 是的,我现在终于理解了您的代码以及它是如何工作的,所以现在的问题是如何将$1*$2 的答案放到特定的文本字段中?为了更容易,我进入该文本字段的方法是使用MouseClick 单击该文本字段。引用您创建的代码
  • 您在原始代码中没有使用MouseClick($MOUSE_CLICK_LEFT, 499, 706, 1, 1)Send("^v") 吗?之前用ClipPut($x)填充剪贴板
  • 代码:MouseClick($MOUSE_CLICK_LEFT, 479, 802, 3, 1) ; Clicking all of the text Send("^c") MouseClick($MOUSE_CLICK_LEFT, 480, 844, 1, 1) $x = Execute(StringRegExpReplace(ClipGet(), 'What is (\d*) x (\d*) \?$', "$1*$2")) ClipPut($x) Send("^v") 不会返回任何结果,现在我尝试编辑代码MouseClick($MOUSE_CLICK_LEFT, 479, 802, 3, 1) ; Clicking all of the text Send("^c") MouseClick($MOUSE_CLICK_LEFT, 480, 844, 1, 1) $x = StringRegExpReplace(ClipGet(), 'What is (\d*) x (\d*) \?$', "$1*$2") ClipPut($x) Send("^v") 输出为14*36
猜你喜欢
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2017-09-30
  • 1970-01-01
相关资源
最近更新 更多