2017-08-28 469 views
0

我目前正在查看一些Logitech鍵盤的Lua編碼。Lua腳本:爲鼠標移動添加重複代碼

我可以讓代碼工作在一個單一的推,我已經放置了一個重複和睡眠定時器,並希望這個繼續循環,直到我按下了不太令人討厭的鼠標按鈕。

這是我到目前爲止有:

function OnEvent(event, arg) 
    if event == "G_PRESSED" and arg == 1 then 
     PressMouseButton(3) 
repeat 
      MoveMouseRelative(-20,0) 
      Sleep(50) 
     until not PressMouseButton(1) 
    end 
end 

請注意,這是我第一次找過這種類型的編碼任何幫助是極大的讚賞。

問候

丹尼爾

+0

「不是非常具有描述性。您解釋了您希望腳本執行的操作,但不解釋當前不正確的行爲或錯誤。 – ktb

+0

嗨ktb,對不起,目前程序運行並按下G1鍵屏幕移動時不再重複。希望這可以幫助。 – user3668791

回答

0

如果你想在G1鍵來充當你將不得不做的事情有點不同,那麼你在做切換。檢查G1鍵是否被按下的唯一方法是使用OnEvent()處理程序響應單擊事件。 IsMouseButtonPressed()不允許您檢查G鍵。

如果您在按下鍵後正在運行OnEvent()功能,再次按下G1鍵將再次調用該功能,重新啓動循環。爲了避免這個問題,您需要保留一個標誌,防止函數重新進入循環。另外,這個標誌將表示OnEvent()的原始運行結束。

function OnEvent(event, arg) 
    if event == "G_PRESSED" and arg == 1 then 
     if script_running then 
      script_running = false 
      return 
     else 
      script_running = true 
     end 
     PressMouseButton(3) 
     repeat 
      MoveMouseRelative(-20,0) 
      Sleep(50) 
     until not script_running 
    end 
end 

上例中的標誌是script_running。在函數script_running的第一次運行中是nil(其評估爲false)。因此script_running設置爲true並且循環運行。然後當再次按下G1鍵時,它再次進入該功能,但此時script_runningtrue,它將script_running變量設置爲false並退出該功能。此時原始循環最終將滿足循環not script_running == true的條件並且將退出;停止腳本。

是的,這是比您的原始代碼更多的參與,但不幸的是必要的。 「這不是令人討厭的東西」

+0

嗨ktb,感謝您爲我尋找這個。我將着眼於實現代碼。使用此代碼鼠標右鍵始終被按下。理想情況下,我想要以下內容:程序循環通過按鼠標右鍵單擊保持移動-20,然後釋放右鍵單擊重複50ms延遲。這個編碼只是我理解Lua思想的起點。 – user3668791

+0

嗨ktb我將代碼添加到腳本中,並且它仍然只在G1按鍵上執行一次而沒有重複。右鍵單擊保持活動狀態,鼠標不移動。 – user3668791

+0

我還不太確定你想要什麼樣的行爲。按下G1按鈕後,您想要循環繼續,這會向左移動鼠標,直到您釋放右側按鈕?或者直到你釋放G1按鈕? – ktb