We! 发表于 2009-10-22 09:28:14

有關於迴圈規則問題。 (While)

本帖最后由 We! 于 2009-10-22 15:24 编辑

Dim $interval = 500 ;;;座標顯示,時間間隔
Dim $isLoop = 0

HotKeySet("{ESC}", "Terminate") ;;;按{ESC}可以中斷這個腳本
HotKeySet("{F11}" , "StartClick") ;;;按(F11)開始這個腳本
HotKeySet("{Pause}" , "EndClick") ;;;按(Pause)停止這個腳本

Func Terminate() ;;;按{ESC}可以中斷這個腳本
        Exit 0
EndFunc

Func StartClick()
        $isLoop = 1
While $isLoop
    $xy = MouseGetPos()
    Sleep($interval)
        ToolTip("X座標[ "& $xy& " ] , &" ]")
    Sleep($interval)
WEnd
EndFunc

Func EndClick()
   $isLoop = 0
EndFunc請前輩們幫看一下,上面的代碼問題在那裡...

沒有錯誤訊息,他一開啟就自動結束,完全不知問題點在那裡。

rchockxm 发表于 2009-10-22 09:44:17

你把 while 放在 func 裡面,當然會直接結束了

We! 发表于 2009-10-22 10:20:38

While...Wend
如果運算式成立,則會將下方的陳述式從上方到 WEnd 依序執行,這迴圈會一直執行到運算式不成立為止。抱歉! 小弟有點看不太懂,能否再煩請前輩解釋一下。

是 Func 不能包 While 這個語法嗎?

那如果小弟需要一直顯示於 ToolTip 內,用什麼語法會來的好一點。

wisly 发表于 2009-10-22 10:47:31

这样就可以了Dim $interval = 500 ;;;座標顯示,時間間隔
Dim $isLoop = 0

HotKeySet("{ESC}", "Terminate") ;;;按{ESC}可以中斷這個腳本
HotKeySet("{F11}" , "StartClick") ;;;按(F11)開始這個腳本
HotKeySet("{Pause}" , "EndClick") ;;;按(Pause)停止這個腳本

While 1
        If        $isLoop Then
                $xy = MouseGetPos()
                Sleep($interval)
      ToolTip("X座標[ "& $xy& " ] , &" ]")
                Sleep($interval)
        EndIf
WEnd

Func Terminate() ;;;按{ESC}可以中斷這個腳本
      Exit 0
EndFunc

Func StartClick()
      $isLoop = 1
EndFunc

Func EndClick()
   $isLoop = 0
EndFunc

We! 发表于 2009-10-22 11:11:10

嗯! 了解...

小弟在去看一下語法說明,謝謝唷 XD

We! 发表于 2009-10-22 12:00:54

本帖最后由 We! 于 2009-10-22 12:02 编辑

抱歉再請教一下,用什麼語法能對"迴圈"的這個動作,設定出較好的開、關設定。

While 1 "1 的數值能否設成,類似變數 --- $1、$2 ... 。"

wisly 发表于 2009-10-22 12:20:53

当然可以,不过你总是需要一个循环等待热键输入的啊,否则程序就退出了

We! 发表于 2009-10-22 13:41:30

本帖最后由 We! 于 2009-10-22 14:22 编辑

Dim $interval = 500 ;;;座標顯示,時間間隔
Dim $isLoop = 0
Dim $xy = MouseGetPos()

HotKeySet("{ESC}", "Terminate") ;;;按{ESC}可以中斷這個腳本
HotKeySet("{F11}" , "StartClick") ;;;按(F11)開始這個腳本
HotKeySet("{Pause}" , "EndClick") ;;;按(Pause)停止這個腳本

While 1
    Sleep($interval)
                ToolTip("按ESC離開、F11開啟、Pause停止。", 0, 0)
    Sleep($interval)
WEnd

While $isLoop
        Sleep($interval)
          ToolTip("X座標[ "& $xy& " ] , &" ]")
        Sleep($interval)
WEnd

Func Terminate() ;;;按{ESC}可以中斷這個腳本
        Exit 0
EndFunc

Func StartClick()
        $isLoop = 1
EndFunc

Func EndClick()
   $isLoop = 0
EndFunc嗯! 我先有弄一個迴圈,但是! F11 還是無法開啟...

這部份規則陳述還是有點弄不太懂,還煩請前輩幫解釋一下。

ZEROBOYS 发表于 2009-10-22 14:00:33

建議去參考Event 模式,不過稍微容易陷入「停不住」的鳥現象...
也可參考某篇教讀內存的文,他剛好用到三個熱鍵,達到執行、暫停、退出...
(剛查了一下,弄丟收藏,不然就能直接引給你)

wisly 发表于 2009-10-22 14:18:21

你既然需要一个永循环,就用while 1,再用$isLoop决定动作
用while $isLoop的话一旦不击中就永远不会再进入了Dim $interval = 500 ;;;座標顯示,時間間隔
Dim $isLoop = 0
Dim $xy = MouseGetPos()

HotKeySet("{ESC}", "Terminate") ;;;按{ESC}可以中斷這個腳本
HotKeySet("{F11}" , "StartClick") ;;;按(F11)開始這個腳本
HotKeySet("{Pause}" , "EndClick") ;;;按(Pause)停止這個腳本

While 1
        Sleep($interval)
        If $isLoop Then
                ToolTip("X座標[ "& $xy& " ] , &" ]")
        Else
                ToolTip("按ESC離開、F11開啟、Pause停止。")
        EndIf
        Sleep($interval)
WEnd

Func Terminate() ;;;按{ESC}可以中斷這個腳本
      Exit 0
EndFunc

Func StartClick()
      $isLoop = 1
EndFunc

Func EndClick()
   $isLoop = 0
EndFunc

We! 发表于 2009-10-22 14:33:50

Dim $interval = 500 ;;;座標顯示,時間間隔
Dim $isLoop = 0
Dim $top = 1
Dim $xy = MouseGetPos()

HotKeySet("{ESC}", "Terminate") ;;;按{ESC}可以中斷這個腳本
HotKeySet("{F11}" , "StartClick") ;;;按(F11)開始這個腳本
HotKeySet("{Pause}" , "EndClick") ;;;按(Pause)停止這個腳本

While $top
        If   $top Then
    Sleep($interval)
                        ToolTip("按ESC離開、F11開啟、Pause停止。", 0, 0)
    Sleep($interval)
        EndIf
WEnd

Func StartClick()
        $isLoop = 1
        $top = 0
While $isLoop
      Sleep($interval)
            ToolTip("X座標[ "& $xy& " ] , &" ]")
      Sleep($interval)
        WEnd
EndFunc

Func Terminate() ;;;按{ESC}可以中斷這個腳本
      Exit 0
EndFunc

;Func StartClick()
;        $isLoop = 1
;EndFunc


Func EndClick()
   $isLoop = 0
   $top = 1
EndFunc小弟目前這樣寫,開、關的部份都沒問題,不過顯示座標的時候會卡住! 無法更新。

wisly 发表于 2009-10-22 14:50:35

LZ你的代码错误太多了,实在难以一一指出,你到底需要达到什么样的目的?我前面的代码还不能满足要求吗?

We! 发表于 2009-10-22 14:52:45

我需要對於"迴圈"的這個動作,設定能精準的 開、關 設定。

wisly 发表于 2009-10-22 15:15:46

不知道这样写你可以理解吗?Dim $interval = 500 ;;;座標顯示,時間間隔
Dim $start = 0, $continue = 1

HotKeySet("{ESC}", "Terminate") ;;;按{ESC}可以中斷這個腳本
HotKeySet("{F11}" , "StartClick") ;;;按(F11)開始這個腳本
HotKeySet("{Pause}" , "EndClick") ;;;按(Pause)停止這個腳本

While $continue
        Sleep($interval)
        If $start Then
                $xy = MouseGetPos()
                ToolTip("X座標[ "& $xy& " ] , &" ]")
        Else
                ToolTip("按ESC離開、F11開啟、Pause停止。")
        EndIf
        Sleep($interval)
WEnd

Func Terminate() ;;;按{ESC}可以中斷這個腳本
      $continue = 0
EndFunc

Func StartClick()
      $start = 1
EndFunc

Func EndClick()
   $start = 0
EndFunc

We! 发表于 2009-10-22 15:24:04

嗯! IF 的部份我會再看看的,謝謝指教 :)
页: [1]
查看完整版本: 有關於迴圈規則問題。 (While)