1
Func OpenSHK()
   global $Loginx = 0, $Loginy = 0, $Playx = 0, $Playy = 0
   Run(@ProgramFilesDir & "\Stronghold Kingdoms\StrongholdKingdoms.exe")
   WinWaitActive("Stronghold Kingdoms")
      If WinExists("Stronghold Kingdoms") Then
         SendKeepActive("Stronghold Kingdoms")
      Else
         WinWait("Stronghold Kingdoms")
         SendKeepActive("Stronghold Kingdoms")
      EndIf
   Sleep(5000)
   Send("testphrase")
   Local $search = _ImageSearch('pics/LoginButton.bmp', 0, $Loginx, $Loginy, 0)
      If $search = 1 Then
         MouseMove($Loginx, $Loginy, 20)
         MouseClick("left")
      Else
         Do
            $search = _ImageSearch('pics/LoginButton.bmp', 0, $Loginx, $Loginy, 0)
            sleep(5000)
         Until $search = 1
         MouseMove($Loginx, $Loginy, 20)
         MouseClick("left")
      EndIf
   Sleep(5000)
      Local $search = _ImageSearch('pics/PlayButton.bmp', 0, $Playx, $Playy, 0)
      If $search = 1 Then
         MouseMove($Playx, $Playy, 20)
         MouseClick("left")
      Else
         Do
            $search = _ImageSearch('pics/PlayButton.bmp', 0, $Playx, $Playy, 0)
            sleep(5000)
         Until $search = 1
         MouseMove($Playx, $Playy, 20)
         MouseClick("left")
      EndIf
   WinWaitActive("Stronghold Kingdoms - World 8")
   sleep(10000)
EndFunc

该函数工作正常,直到它到达第 6 行。它不发送测试短语,我似乎无法弄清楚为什么。

谢谢。

4

2 回答 2

3

您的代码中有很多错误:

  1. Run("@ProgramFilesDir\Stronghold Kingdoms\StrongholdKingdoms.exe") 应该Run(@ProgramFilesDir & "\Stronghold Kingdoms\StrongholdKingdoms.exe")
  2. 这就是为什么winwaitactive可能永远不会通过的原因。尝试一个循环来查看窗口是否存在,而不是它是否处于活动状态。
  3. 如果窗口存在,则可以激活它或使用SendKeepActive(我认为这就是它的名称。)
于 2013-05-27T19:07:11.103 回答
-1

当我使用 AutoIt 并遇到类似的问题(对于同一个程序 :) )时,我想我最终有时使用了 controlsend,而在其他时间则使用了 send。我最后还进入了句柄,并告诉 autoit 使特定的文本框处于活动状态。

于 2013-10-01T18:59:07.733 回答