토글 키 등을 사용하여 계속 사용하기로 결정한 사용자를 계속 클릭 할 수있는 도구를 만들었습니다. 정상적인 창 (예 : Google 크롬)에서 정상적으로 작동합니다. 그러나 게임과 관련하여 항상 올바르게 작동하는 것은 아닙니다. (일부 게임에서는 물론 잘 작동하지 않지만 다른 게임에서는 그렇지 않습니다.)글로벌 단축키가 GetAsyncKeyState를 사용하여 게임에 등록되지 않았습니다.
코드는 LButton을 누른 상태에서 빠르게 클릭하도록 설계되어 있으며 자동 틱커 역할을 할 때 중지됩니다 (사용자가 속도 제어 기능을 가짐). 다시 작동하지만 게임을 할 때 다른 윈도우/앱보다 느리게 움직입니다.
나는
Thread.Sleep(200)
수정 게임에서 autoclicker의 속도를 사용하여 지연을 추가 알아 냈어요,하지만 항상 LButton가 열리는 밤은 때/눌려도 클릭 autoclicker 초래 keybind를 망쳐 놨어요 .
내가 지연으로 사용할 수있는 것이 있습니까? 아니면 코드에서 올바르게 작동 할 수있는 다른 방법이 있습니까?
나는 여러 가지 다양한 변형을 시도해 왔으며 지난 며칠간 온라인으로 검색하려고 노력했지만 아무도 성공하지 못했습니다.
내 프로젝트의 오토 릭킹과 관련된 모든 코드는 다음과 같습니다. 몇 가지 메모를 추가하여 타이머가 설정되는 속도/속도를 설명합니다.
Imports System.Threading
Public Class Form1
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Integer) As Short
Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Integer, ByVal dx As Integer, ByVal cbuttons As Integer, ByVal dy As Integer, ByVal dwExtraInfo As Integer)
Private Const mouseclickup = 4
Private Const mouseclickdown = 2
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Timer1 isnt doing the clicking, Timer1 is just listening for LButton
'clicks which is why I have it always on aswell as a low interval.
Timer1.Start()
Timer1.Interval = 1
'LButton is the timer that will do the clicking.
LButton.Interval = 100
End Sub
Private Sub LButton_Tick(sender As Object, e As EventArgs) Handles LButton.Tick
If GetAsyncKeyState(Keys.LButton) Then
mouse_event(mouseclickup, 0, 0, 0, 0)
'Without Thread.Sleep(200) the code works as it's suppose to, clicks
'when LButton is held, stops clicking when LButton is let go,
'although without Thread.Sleep(200) it will not work in all games,
'but with it, it will continuously click even when LButton isn't held.
Thread.Sleep(200)
mouse_event(mouseclickdown, 0, 0, 0, 0)
Else
LButton.Stop()
End If
End Sub
Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick
'This is what will listen for the left clicks and also stop the left
'LButton timer if LButton is not held
If GetAsyncKeyState(Keys.LButton) Then
LButton.Start()
Else
LButton.Stop()
End If
End Sub
End Class
'GetAsyncKeyState()'는 대부분의 게임과 같이 전체 화면 응용 프로그램에서 작동하지 않는 것으로 알려져 있습니다. 일반적으로 권장되는 솔루션은 키보드 후크를 만드는 것입니다. –
@VisualVincent 게임이 바탕 화면/창 모드에서 실행되는 데 문제가 있으며 스팀이 아니므로 문제는 버튼을 누르고 게임을 너무 빠르게 놓아서 명령을 등록하는 이유입니다. 스레드 잠자기 명령을 추가 한 이유는 무엇입니까? 그것의 속도를 클릭하십시오,하지만 keybind 엉망 (lbutton isnt 개최 때도 계속) 그래서 그 지연을 변경하는 것이 도움이 될 것이라고 생각, 그것의 중지/수면 스레드 퍼팅, 그것은 나던 시작 코드를 기억하기 때문에 왼쪽을 클릭하면 클릭하고 그렇지 않으면 중지합니다. 지연으로 사용할 수있는 것이 있습니까? – Joey
문제는'GetAsyncKeyState()'가 다른 상태 (키 다운, 키 업 등)에서 0이 아닌 값을 반환하므로 코드가 여러 번 실행된다는 것입니다. 이것을 막으려면 키 다운을 확인한 다음'GetAsyncKeyState()'가 0을 반환 할 때까지 반복되는 루프를 만드십시오. - 내가 말하는 것은 내 [** 이전의 대답 **] (http://stackoverflow.com/a/38154826/3740093) 중 하나에서 찾을 수 있습니다. 나는 곧 당신에게 답을 씁니다. –