오토핫키 마우스커서 - otohaski mauseukeoseo

F1:: ReplaceSystemCursors((t := !t) ? "커서모형" : "")
ReplaceSystemCursors(IDC = "") ; IDC must be a cursor name like "IDC_CROSS" or cursor handle
{
static IMAGE_CURSOR := 2, SPI_SETCURSORS := 0x57
, exitFunc := Func("ReplaceSystemCursors").Bind("")
, setOnExit := false
, SysCursors := { IDC_APPSTARTING: 32650
, IDC_ARROW : 32512
, IDC_CROSS : 32515
, IDC_HAND : 32649
, IDC_HELP : 32651
, IDC_IBEAM : 32513
, IDC_NO : 32648
, IDC_SIZEALL : 32646
, IDC_SIZENESW : 32643
, IDC_SIZENWSE : 32642
, IDC_SIZEWE : 32644
, IDC_SIZENS : 32645
, IDC_UPARROW : 32516
, IDC_WAIT : 32514 }
if !IDC {
DllCall("SystemParametersInfo", "UInt", SPI_SETCURSORS, "UInt", 0, "UInt", 0, "UInt", 0)
OnExit(exitFunc, 0), setOnExit := false
}
else {
hCursor := (IDC + 0) ? IDC : DllCall("LoadCursor", "Ptr", 0, "UInt", SysCursors[IDC], "Ptr")
for k, v in SysCursors {
hCopy := DllCall("CopyImage", "Ptr", hCursor, "UInt", IMAGE_CURSOR, "Int", 0, "Int", 0, "UInt", 0, "Ptr")
DllCall("SetSystemCursor", "Ptr", hCopy, "UInt", v)
}
if !setOnExit
OnExit(exitFunc), setOnExit := true
}
}

How to change the system cursor?? - AutoHotkey Community

How to change the system cursor?? - AutoHotkey Community

Home Board index AutoHotkey Ask For Help Search It is currently 23 Nov 2021, 02:05 All times are UTC-05:00 Get help with using AutoHotkey and its commands and hotkeys jly Posts: 57 Joined: 30 Sep 2020, 06:06 Report this post @ Quote 08 May 2021, 00:00 Chan

www.autohotkey.com

해당 사이트에 제공되었던 마우스 커서 변경하는 오토 핫키 코드입니다.

오토핫키 마우스커서 - otohaski mauseukeoseo
"커서모형" 대신 "IDC_HAND"

이렇게 입력하면 됩니다.

커서 타입은 Syscursors에 존재하는 것 들입니다.

F1 키를 누르시면 실행 됩니다.

오토 핫키에서 현재 마우스 커서를 확인하는 방법은

a_cursor를 통해서 확인 가능합니다.

msgbox % a_cursor%라고 할 수 있네요.

오토핫키에는 마우스 커서가 위치했던 좌표를 기억하는 기능이 있다. 이 기능을 이용하면 명령을 실행한 뒤 명령 실행 전의 마우스 커서 위치로 복귀가 가능하다. 예를 들면 작업을 하다가 옆 모니터에 열려 있는 창을 리프레쉬하고 원래 작업을 다시 하고 싶을 때가 있다. 그럴 때 마우스를 옮겨서 리프레쉬를 할 수도 있지만, 오토핫키로 핫키를 만들어두면 리프레시를 하게 하고 원래 자리로 마우스를 되돌아오게 할 수 있다. 

1. 현재 마우스 커서의 위치를 저장하기

아래 스크립트를 메인 스크립트에 추가해보자.

**** 시작 - 이 행은 스크립트에 포함시키지 않는다 ****

F7:: ; F7을 누르면
CoordMode, mouse, screen ; 좌표의 모드를 screen으로 변경
MouseGetPos, mx, my ; 현재 마우스 커서의 위치를 (mx, my)라는 좌표로 저장
return

**** 끝 - 이 행은 스크립트에 포함시키지 않는다 ****

이 스크립트가 제대로 작동하려면 coordmode가 screen이어야 한다. Coordmode는 디폴트 값이 relative이다. 따라서 모드를 screen으로 바꾸지 않고 위의 스크립트를 실행하면 모니터 전체가 아니라 현재 창을 기준으로 좌표를 기억하기 때문에 의도한 대로 커서가 움직이지 않을 수 있다. 

2. 명령 실행 후 원래의 위치로 마우스 커서를 다시 이동시키기

**** 시작 - 이 행은 스크립트에 포함시키지 않는다 ****

F7::
CoordMode, mouse, screen ; 좌표의 모드를 screen으로 변경
MouseGetPos, mx, my ; 현재 마우스 커서의 위치를 (mx, my)라는 좌표로 저장
mouseclick, left, 1000, 500 ; (1000,500)에 왼쪽 클릭
Mousemove, mx, my ; 원래 마우스 커서 위치인 (mx, my)로 마우스 커서를 이동
return

**** 끝 - 이 행은 스크립트에 포함시키지 않는다 ****

이제 스크립트를 위처럼 바꿔보자. 이렇게 하면 (1000,500) 좌표를 클릭한 뒤 다시 원래의 좌표로 마우스 커서가 복귀하는 것을 눈으로 볼 수 있다. 

3. 응용하기

조금 더 발전을 시켜보자. 예를 들어 A라는 창에서 작업을 하다가 B라는 창에서 특정 버튼을 누르고, 다시 작업하던 A창으로 돌아오고 싶은데, B라는 창의 위치가 매번 바뀔 수도 있다. 그럴 때는 위의 스크립트로는 원하는 작업을 할 수가 없다.

**** 시작 - 이 행은 스크립트에 포함시키지 않는다 ****

F7::
CoordMode, mouse, screen ; 좌표의 모드를 screen으로 변경
MouseGetPos, mx, my ; 현재 마우스 커서의 위치를 (mx, my)라는 좌표로 저장
winactivate, ahk_exe notepad.exe ; 메모장을 활성화, 메모장은 미리 열려 있어야만 한다!
send ^v ; 붙여넣기 명령
Mouseclick, left, mx, my ; 원래 마우스 커서 위치인 (mx, my)에 왼쪽 클릭
return

**** 끝 - 이 행은 스크립트에 포함시키지 않는다 ****

위의 스크립트는 작업을 하다가 메모장에 붙여둘 내용이 있을 때 쓸 수 있는 스크립트이다. 일단 원래 작업하던 창에서 ctrl+c 작업까진 수행해둔 뒤 F7을 누르면 메모장이 활성화되고 ctrl+v 를 눌러 붙여넣기를 한 뒤 원래 마우스 커서 위치로 돌아와서 왼쪽 클릭을 하며 원래 창을 활성화하는 동시에 마우스 커서도 복귀된다. 

실제로 해보면

오토핫키 마우스커서 - otohaski mauseukeoseo

위의 경우처럼 잘 작동한다.

위의 스크립트를 조금 변형하면 매우 편리하게 작업을 할 수 있다.