방개
비밀번호를 잊어버리셨나요?

질문

두개 합치는게 어려워요 ㅠ

    • 글자 크기

안녕하세요 

아직 오토핫키 초보입니다.

우선 제 글을 읽어 주셔서 감사합니다.

이리저리 공부한다고 하는데 아직  초보라 어려운게 너무 많습니다.

제가 캐드쪽에서 일하고 있는데 제가 쓰는 프로그램에 단축키가 없어서 직접 만들어 쓰고 있는 중인데 

사용하는 일부중에 

1번을 터치 했을때 실행되는 거랑

1번을 누르고 있을때 마우스 휠을 업하면 오른쪽으로 순차적으로 드레그 하면서 움직이고

                                            다운하면  왼쪽으로 순차적으로 드레그 하면서 움직이는 그런 기능을 만들려고 하는데

 

 


1::


state2:=1
MouseClick,l,300,300
send {lButton Down}

while(state2)
{
state2:=GetKeyState("F2","P")
sleep,50

}
send {lButton up}
return

 

1번을 누르고 있는 면 300,300에서 마우스 왼쪽을 클릭 하고 있어라 입니다.

 

 

 

 

2::
prevTime := A_TickCount
Loop
{
    if (GetKeyState("1", "P") = 0)
        break
    sleep, 50
}
TimeInterval := A_TickCount - prevTime
if (TimeInterval < 150)
    MouseClick,l,300,300
else if (Timeinterval > 150)
    MouseClick,l,500,500

return


이건  방개 질문에서 봤던거  참고 한것입니다.

0.15초 안에 1번 누르면  300,300 클릭

2번 키가 0.15초 지나면  500,500  클릭입니다.

 

 

결론.......

 

 

1번을 터치 했을때  300,300가서 클릭되고,

 

1번을 누르고 있다면  500,500 가서 기다리다가

마우스 휠을 업하면 오른쪽으로 순차적으로 드레그 하면서 움직이고

          휠을 다운하면  왼쪽으로 순차적으로 드레그 하면서 움직이는 

그런 걸 만들고 싶은데 초보라 쉽지가 않습니다.

어떻게 해야 할까요?  바쁘시면 방향이라도 잡아 주시면 감사하겠습니다.

끝까지 읽어 봐 주셔서 감사합니다.

 

    • 글자 크기
댓글 9
  • 2020.3.15 07:12 댓글

    원하시는 기능이 어떤 것인지 결론을 봐도 감이 잘안옵니다.

    우선 1:: (숫자1키를 눌렀을 때 그 아랫줄부터 코드가 시작), 2:: (숫자2키를 눌렀을 때 그 아랫줄부터 코드가 시작)

    현재 2::는 있으면 안되는 구문인 것 같습니다.

     

    추가로 기능으로 삼고 싶으신게

    첫번째. 1을 누르고, A_TickCount를 이용해서 0.15초내로 떼면 (1클릭) 300,300좌표를 클릭

    두번째. 0.15초보다 오래 누르고 있다면 (1을 누르고 있는 상태) 500,500좌표로 이동

    세번째. (여전히 1을 누르고 있는 상태) + WheelUp or WheelDown을 통해 500,500좌표를 기준으로 오른쪽 혹은 왼쪽으로 드래그

     

    이게 맞는지 궁금하네요. 어떤 키를 누르는 거고, 누르는 상태가 어떻게 되는 거고, 이동과 클릭과 드래그를 명확하게 해주시면 좋을거 같아요.

    추가로, 순차적으로 드래그한다고 했는데 이게 참 모호한 표현이어서, 우리가 마우스를 손으로 이동 이동시킬 때, 엄청나게 작은 시간단위로

    마우스 좌표가 이동되는데, 오토핫키로는 예를 들어 오른쪽으로 100픽셀씩만 이동하라고 해도 커서는 순간이동을 하는 것과 같아서...

    그렇다면 또 여기서 1키를 누른채 휠업을 할때마다 드래그 범위가 늘어날지, 휠업 1번에 드래그 범위가 늘어날지 등등도 정리해주시면 좋을거 같습니다.

     

    추가로 GetKeyState에 대해서 조금 찾아보니 핫키에 $와 함께 사용되는 구문인 것 같네요.

    $1::

    while GetKeyState("1", "P")

    MouseMove, 500, 500

     

    $1에서의 1과, GetKeyState 괄호안에서 "1"이 같은 키로 되어있어야 합니다.

  • 2020.3.15 08:21 댓글
    /* 1숫자키 누르고 있을 때, 300, 300 계속 클릭
    $1::
    while GetKeyState("1", "P")
    	MouseClick, Left, 300, 300
    return
    */
    
    
    $1::
    x := 500
    prevTime := A_TickCount
    while GetKeyState("1", "P")
    {
    	TimeInterval := A_TickCount - prevTime
    	if (TimeInterval > 150)
    		MouseMove, 500, 500
    }
    if (TimeInterval <= 150)
    	MouseClick, Left, 300, 300
    return
    ; 1 누르면, 클릭이면 300, 300 클릭, 누르고 있는 상태면 500, 500으로 이동
    
    
    WheelUp::
    while GetKeyState("1", "P")
    {
    	MouseClick, Left, x, 500,,,D
    	while GetKeyState("1", "P")
    	{
    		x := x + 30
    		MouseMove, x, 500
    		Sleep, 50
    	}
    	MouseClick, Left, x, 500,,,U
    }
    Send {WheelUp}
    return
    ; 1을 누르고 있는 상태에서 휠을 올려야 작동, 그냥 휠만 올리면 작동 안함.
    ; **수정 : x := x + () : 이 부분을 수정해서 드래그 간격 조절
    ; **수정 : Sleep, 50 : 이 부분을 수정해서 드래그 속도 조절
    ; 1을 떼면 멈춤
    ; 마지막줄에 Send {WheelUp}는 1이 눌리지 않았을 때, 휠업의 원래 기능인 휠업을 하기 위해 넣음.
    
    
    WheelDown::
    while GetKeyState("1", "P")
    {
    	MouseClick, Left, x, 500,,,D
    	while GetKeyState("1", "P")
    	{
    		x := x - 30
    		MouseMove, x, 500
    		Sleep, 50
    	}
    	MouseClick, Left, x, 500,,,U
    }
    Send {WheelDown}
    return
    ; 휠업과 같지만 x := x - () 이부분이 - 라서 왼쪽으로 드래그
    
    
    F4::
    ExitApp
    ; 종료

     

  • vaseline글쓴이
    2020.3.15 14:45 댓글

    아침에 일어나서 답글 남겨주신거 보고 놀랬어요 ㅎ

    이렇게 빨리 정성 스럽게 달아 주셔서 너무 너무 감사합니다.

    제가 글을 제 기준으로 적다보니 이해 하기 어려우셨을텐데 너무 너무 감사합니다.

     

    순차적으로 란 말도 너무 명확하지 않은 추상적인 뜻인거 같아서 ....죄송합니다.

     

    정확히 말씀드리면 1번을 누른상태에서 마우스 횔을 올리면 x축으로 30이동하고 한번더 마우스 휠을 올리면 x축으로 한번더 +30이동하는

    다시 말씀드리면 1번을 누른 상태에서 휠을 올릴때마다 +30씩 이동 하는 그런 기능을 말씀드리고 싶었어요 ㅎ

     

    제가 초보라 짜주신 스크립트 이해하고 공부해서 제가 +30씩 이동하는거 한번 만들어서 올려 볼게요 ㅎ

    차랑 님에게는 간단한거 일수도 있겠지만 저한텐 아직 어려운거라 ㅎ

    답글 안주 실줄 알았는데 너무 자세히 달아 주셔서 너무 감사합니다.

     

  • vaseline님께
    2020.3.15 15:41 댓글
    WheelUp::
    Drag(30, A_ThisHotkey)
    return
    
    WheelDown::
    Drag(-30, A_ThisHotkey)
    return
    
    Drag(x, key)
    {
    	if (GetKeyState("1", "P"))
    		MouseClickDrag, L, 0, 0, x, 0,, R
    	else
    		Send, {%key%}
        return
    }

    저도 이해를 잘 못해서 말씀하신 

     

    정확히 말씀드리면 1번을 누른상태에서 마우스 횔을 올리면 x축으로 30이동하고 한번더 마우스 휠을 올리면 x축으로 한번더 +30이동하는

    다시 말씀드리면 1번을 누른 상태에서 휠을 올릴때마다 +30씩 이동 하는 그런 기능을 말씀드리고 싶었어요 ㅎ

     

    를 보고 짜본 스크립트입니다. 1을 누르고 휠을 올리거나 내릴 때 현재 마우스 좌표에서 -30 +30씩 드래그합니다.

  • 프날님께
    vaseline글쓴이
    2020.3.15 16:45 댓글

    와우 신기 합니다.. 뚝딱 하고 만드시는거 보니 놀라울 따름입니다.

    어떻게 이런걸 만드시는 건지 ㅠㅠ

    명령어난 함수나 아직 초보에겐 너무 어렵네요 ㅠㅠ

    신경 써주셔서 너무 너무 감사합니다 ㅎ

     

    스크립트 짜주신거 너무 잘되요 ㅎ

    근데 첨에 짜주신 스크립트($1::)밑에 붙이니까 마우스 좌표(500,500)에서 휠 업일때 +30만큼 움직이고 다시 처음 위치(500,500)로 돌아와요. 그리고 휠 다운 일때도 -30 만큼 이동하고 처음 위치(500,500)으로 돌아와요 ㅠ

     

    $1::
    x := 500
    prevTime := A_TickCount
    while GetKeyState("1", "P")
    {
        TimeInterval := A_TickCount - prevTime
        if (TimeInterval > 150)
            MouseMove, 500, 500
    }
    if (TimeInterval <= 150)
        MouseClick, Left, 300, 300
    return
    ; 1 누르면, 클릭이면 300, 300 클릭, 누르고 있는 상태면 500, 500으로 이동


    WheelUp::
    Drag(30, A_ThisHotkey)
    return

    WheelDown::
    Drag(-30, A_ThisHotkey)
    return

    Drag(x, key)
    {
        if (GetKeyState("1", "P"))
            MouseClickDrag, L, 0, 0, x, 0,, R
        else
            Send, {%key%}
        return
    }

    F4::
    ExitApp
    ; 종료

     

     

     

    염치 없지만 한번만더 부탁드려도 될까요?

    공부하는 것이 아니라 너무 떠먹여 달라고 하는것 같아 좀 많이 부끄럽습니다.

    매번 글 읽어 주셔서 대단히 감사합니다.

     

     

     

     

     

  • vaseline님께
    2020.3.15 17:09 댓글

    첨에 짜드린 스크립트가 있었나요? 제가 언제 그런 스크립트를 짜드렸는진 모르겠지만.. 저는 이번에 드린게 처음입니다 ㅠㅠ

     

    뭘 하고싶으신건지 모르겠습니다. 드래그/클릭/키 누르기/키 누르고있기를 이용해서 다시 말씀해주세요.

     

    • 1번 키를 누르면 마우스가 현재 좌표에서 500, 500으로 갔다가 휠업을 하면 x축으로 30만큼 마우스를 드래그하는건지
    • 1번 키를 누르면 마우스가 현재 좌표에서 500, 500으로 갔다가 휠업을 하면 x축으로 30만큼 마우스를 이동하는건지
    • 1번 키를 누르면 마우스가 현재 좌표에서 300, 300으로 갔다가 휠업을 하면 x축으로 30만큼 마우스를 드래그하는건지
    • 1번 키를 누르면 마우스가 현재 좌표에서 300, 300으로 갔다가 휠업을 하면 x축으로 30만큼 마우스를 이동하는건지
    • 1번 키를 누르고 있으면 마우스가 현재 좌표에서 300, 300으로 갔다가 500, 500으로 간 후 휠업을 하면 x축으로 30만큼 마우스를 드래그하는건지
    • 1번 키를 누르고 있으면 마우스가 현재 좌표에서 300, 300으로 갔다가 500, 500으로 간 후 휠업을 하면 x축으로 30만큼 마우스를 이동하는건지
    • 1번 키를 누르고 있으면 마우스가 현재 좌표에서 500, 500으로 간 후 휠업을 하면 x축으로 30만큼 마우스를 드래그하는건지
    • 1번 키를 누르고 있으면 마우스가 현재 좌표에서 500, 500으로 간 후 휠업을 하면 x축으로 30만큼 마우스를 이동하는건지
    • 1번 키를 누르고 있으면 마우스가 300, 300으로 간 후 휠업을 하면 500, 500으로 이동 후 x축으로 30만큼 마우스를 드래그하는건지
    • 1번 키를 누르고 있으면 마우스가 300, 300으로 간 후 휠업을 하면 500, 500으로 이동 후 x축으로 30만큼 마우스를 이동하는건지

     

    등등... 지금 너무 모호하네요. 조건을 정확히 쪼개서, 그 조건이 겹치지 않도록 하여 각 조건에 맞는 행동이 뭔지 여쭙습니다.

     

    1. 1번키를 눌렀을때 300, 300이동 후 떼지 않으면 500, 500 이동인지

    2. 1번키를 눌렀을 땐 가만히 있다가 떼면 그 시간에 따라 300, 300 or 500, 500 이동인지

     

    이거부터 생각해보시고요

     

    1. 현재 좌표에서 x축으로 30 이동인지

    2. 이동한 좌표 (300, 300 혹은 500, 500)에서부터 x축으로 30 이동인지

     

    도 정리해주시고

     

    1. 마우스 드래그인지

    2. 마우스 Move인지

    3. 수평 휠 스크롤인지

     

    도 정리해주세요. (캐드같은거나.. 그런 작업 프로그램은 수평 스크롤도 쓰는 경우가 많아서 이를 여쭈시는걸지도 모르겠습니다.)

  • 프날님께
    vaseline글쓴이
    2020.3.15 19:00 댓글

    죄송합니다... ㅠㅠ

    제가 글을 너무 두루 뭉실하게 말씀드린거 같습니다..

     

    1번을 누르면 현재 좌표에서 마우스가 300,300 가서 클릭 하고 처음 좌표로 복귀

     

     

    1번을 누르고 있을 때는 현재 좌표에서 마우스가 500,500가서 마우스 누른 상태로 유지하고 이 유지 한 상태에서

     

    마우스휠 업을 1회하면 마우스가 500,500에서 x축으로 +30드래그 다시말해 530,500으로 드래그

    마우스휠 업을 1회더 하면 마우스가 이동한 좌표(530,500)에서 x축으로 +30(560,500)으로 드래그

    여기서 마우스 휠업을 1번더 하면 마우스가 이동한 좌표(560,500)에서 x축으로 +30(590,500)으로 드래그

    여기서 마우스 휠업을 1번더 하면 마우스가 이동한 좌표(590,500)에서 x축으로 +30(620,500)으로 드래그

     

    마우스 휠업을 한번씩 할때마다 x축으로 30씩 드래그되고

    마우스 휠 다운을 하면 반대로 x축으로 -30씩 드래그되고

     

    1번을 때면 1번을 누르기전 제일 처음 좌표로 복귀

     

    다시 말씀드리면 1번을 눌렀을때 기능 하나와 1번을 누르고 있는 동안 마우스휠 업을 1회 할때마다 x좌표가 x축으로 +30씩 드래그되고, 휠 다운을 1회 할때마다 x좌표가 x축으로 -30씩 드래그하고

    1번을 때면 1번을 누르기 전 제일 처음 좌표로 복귀하는

    기능을 만들려고 하는게 우선적인 목표 입니다.

     

    프날님이랑 차랑님이랑 두분이서 댓글 달아주신건데 같은 분이라고 오해한점 사과 드립니다.

    제가 두분을 한분으로 착각을 했었네요.ㅠ

    죄송합니다.. 오해 없으시길 부탁드립니다. ㅠ

     

     

     

    $1::

    MouseGetPos x,y

    x := 500

    prevTime := A_TickCount

    while GetKeyState("1", "P")

    {

    TimeInterval := A_TickCount - prevTime

    if (TimeInterval > 150)

    MouseMove, 500, 500

    }

    if (TimeInterval <= 150)

    MouseClick, Left, 300, 300

    MouseMove ,%x%,%y%

    return

    ; 1 누르면, 클릭이면 300, 300 클릭, 누르고 있는 상태면 500, 500으로 이동

     

     

     

    차량님께서 만들어주신 스크립트 일부 발취 수정 하였습니다.

     

     

    현재 여기 까지 되어있고

    1번을 누르는고 있는 동안 휠업을 하면 마우스가 x축으로 +30, 휠다운을 하면 마우스가 x축으로 -30되는 기능을 구현 못하고 있습니다.

  • vaseline님께
    2020.3.15 21:41 댓글

    그럼 복잡하게 생각하지말고, 아래처럼 조합 핫키를 이용하는게 어떨까요?

     

    1키와 함께 WheelUp시, 오른쪽으로 30px이동하는 스크립트입니다.

    현재 마우스 y좌표가 500이 아니면, 500, 500으로 이동후 드래그하고요, 만약 500이라면 현재 자리에서 드래그하게 되겠지요.

     

    1키만 누르면 300, 300을 클릭하고요 ㅎㅎ

     

    WheelDown시에는 응용해서 만들어보세용 

     

    1 & WheelUp::
    MouseGetPos,,vy
    if (vy != 500)
        MouseMove, 500, 500
    MouseClickDrag, L, 0, 0, 30, 0,,R
    return
    
    1::
    MouseClick, l, 300, 300
    return
    
    ESC::
    Send, {LButton Up}
    ExitApp

     

  • 프날님께
    vaseline글쓴이
    2020.3.16 17:33 댓글

    감사합니다. ㅎ

    아직 초보라 너무 어렵네요 ㅎ

    열심히 공부하고 생각하고 해서 꼭 만들어 보겠어요 ^^

    감사합니다 ㅎ

댓글 달기

서버에 요청 중입니다. 잠시만 기다려 주십시오...