본문 바로가기

환경설정 모음

AHK 셋팅

반응형
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Import Files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#Include E:\Documents\Lib.ahk


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 기본 마우스 속도 설정
SetDefaultMouseSpeed, 0


;루트 드라이브 선택
global drive := "E:\"
global rootPath := "dropbox\" 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GetMousePosition Realtime ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Timer to check mouse position
SetTimer, CheckMouse, 100

#Persistent
#SingleInstance force
SetTitleMatchMode 2

WinGetPos,,,Xmax,Ymax,ahk_class Progman ; get desktop size

Xcenter := Xmax/2 ; Calculate center of screen
Ycenter := Ymax/2

CheckMouse: ; check mouse position
CoordMode, Mouse, Screen
MouseGetPos, MouseX, MouseY
WinGetActiveStats, Title, Width, Height, X, Y


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 경로 확인 및 실행
run(path)
{
	If FileExist(path)
		Run, %path%
	else
		MsgBox, %path% 경로가 없습니다.
	return
}


;창 활성화 될때까지 기다리기
waitWin(processID)
{
	WinWait, %processID%
	WinActivate, %processID%
	WinWaitActive, %processID%
	return ErrorLevel
}


; 프로세스 확인
ProcessExist(Name)
{
	Process,Exist,%Name%
	return Errorlevel
}


; 클립보드 내용 가져오기
copyClipBoard()
{
	IsClipEmpty := (Clipboard = "") ? 1 : 0
	if !IsClipEmpty 
	{
		ClipboardBackup := ClipboardAll
		While !(Clipboard = "") 
		{
			Clipboard =
			Sleep, 10
		}
	}

	Send, ^c
	ClipWait, 0.1
	ClipContents := Clipboard, Clipboard := ClipboardBackup
	return ClipContents
}


;SpeQ 실행, 없는 경우 윈도우 계산기 실행
calc()
{
	if FileExist("C:\Program Files (x86)\SpeQ Mathematics\SpeQ Mathematics.exe")
	{
		If WinExist("ahk_class IBasicWndClass")
			WinActivate ahk_class IBasicWndClass
		else 
			Run, C:\Program Files (x86)\SpeQ Mathematics\SpeQ Mathematics.exe
	}
	else if FileExist(drive . "\" . rootPath . "\programs\SpeQ Mathematics\SpeQ Mathematics.exe")
	{
		If WinExist("ahk_class IBasicWndClass")
			WinActivate ahk_class IBasicWndClass
		else 
			Run, %drive%\%rootPath%\programs\SpeQ Mathematics\SpeQ Mathematics.exe
	}
	else
	{
		Run, calc
	}
	WinActivate ahk_class IBasicWndClass
	return
}


;notepad++로 파일 열기
open_with_notepad()
{
	ToReturn := copyClipBoard()
	ifNotExist, %ToReturn%
		return
	if !IsClipEmpty
		ClipWait, 0.5, 1
	If FileExist("C:\Program Files (x86)\Notepad++\notepad++.exe")
		Run, C:\Program Files (x86)\Notepad++\notepad++.exe %ToReturn%
	else
		Run, %drive%\%rootPath%\programs\Notepad++\notepad++.exe "%ToReturn%"
	
	return
}


;vscode로 파일 열기
open_with_vscode()
{
	ToReturn := copyClipBoard()
	ifNotExist, %ToReturn%
		return
	if !IsClipEmpty
		ClipWait, 0.5, 1
		Run, C:\Users\valen\AppData\Local\Programs\Microsoft VS Code\Code.exe "%ToReturn%"	
	return
}


;notepad++ 실행
notepad()
{
	IfWinNotExist ahk_class Notepad++
	{
		If FileExist("C:\Program Files (x86)\Notepad++\notepad++.exe")
			Run, C:\Program Files (x86)\Notepad++\notepad++.exe
		else
			Run, %drive%\%rootPath%\programs\Notepad++\notepad++.exe
		waitWin("ahk_class Notepad++")
	}
	else
	{
		WinActivate ahk_class Notepad++	
	}
	return
}

;vscode 실행
vscode()
{
	IfWinNotExist ahk_exe Code.exe
	{
		Run, C:\Users\valen\AppData\Local\Programs\Microsoft VS Code\Code.exe
		waitWin("ahk_class Notepad++")
	}
	else
	{
		WinActivate ahk_exe Code.exe
	}
	return
}


top()
{
	WinGetActiveTitle, title
	WinGet, ExStyle, ExStyle, %title%
	if (ExStyle & 0x8)
	{
		WinSet, AlwaysOnTop, Off, %title%
		SplashTextOn 400, 100, 항상 위 설정, %title% 해제
		sleep, 300
		SplashTextOff
		
		return
	}
	else
	{
		WinSet, AlwaysOnTop, On, %title%
		SplashTextOn 400, 100, 항상 위 설정, %title% 활성화
		sleep, 300
		SplashTextOff
		
		return
	}
	return
}


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Global Hotkey ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ahk 리로드
^!r::
{
	SplashTextOn 150, 50, AHK, AHK Reload
	Sleep 500
	Reload
	return
}


;스티키패드
#a::Send, #n


;계산기 실행
#c::calc()


;캡쳐 실행
#k::
{
	If FileExist("C:\Program Files (x86)\PicPick\picpick.exe")
		Run, C:\Program Files (x86)\PicPick\picpick.exe
	else
		Run, %drive%\%rootPath%\programs\picpick\picpick.exe
	return
}


;가상 데스크탑 변경
#+a::
{
	sendevent {LWin down}{LCtrl down}{Left}{LWin up}{LCtrl up}
	return
}
#+z::
{
	sendevent {LWin down}{LCtrl down}{Right}{LWin up}{LCtrl up}
	return
}


;메모장 열기
^!m::Run, notepad


;사운드 디바이스 변경 (Monitor)
#+1::
{
	Run, mmsys.cpl
	waitWin("소리 ahk_class #32770")
	Send, {down}
	Send, !s
	Send, {ESC}
	return
}
;사운드 디바이스 변경 (Headphone)
#+2::
{
	Run, mmsys.cpl
	waitWin("소리 ahk_class #32770")
	Send, {down}{down}
	Send, !s
	Send, {ESC}
	return
}

;Editor로 열기
F1::open_with_vscode()
+F1::open_with_notepad()


;Notepad++로 선택된 파일 열기
^!e::notepad()
^!q::vscode()


;창 항상 위 설정/해제
!a::
{
	If Not (WinActive("ahk_class PotPlayer32") or WinActive("ahk_class PotPlayer64"))
		top()
	return
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Special Window ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;메모장인 경우
#If WinActive("ahk_class Notepad")
{
	^d::
	{
		Send, {home 2}{shift down}{end}{right}{shift up}{backspace}
		return
	}
	!up::
	{
		Send, {end}{shift down}{up}{home 2}{shift up}
		tmp := copy()
		tmpPaste(mv())
		return
	}
}


;WinMerge 실행
#IfWinNotActive ahk_class SWT_Window0  ;Eclipse 예외 처리
{
	^!c::
		If FileExist("C:\Program Files (x86)\WinMerge\WinMergeU.exe")
			Run("C:\Program Files (x86)\WinMerge\WinMergeU.exe")
		else
			Run("%drive%\%rootPath%\Programs\WinMergePortable\WinMergePortable.exe")
		
	WinWait	ahk_class WinMergeWindowClassW	
		Send, ^n
		
	return
}


;Foxit Reader 이전 위치 이동
#IfWinActive ahk_class classFoxitReader
{
	^-::Send, !{Left}
	^+-::Send, !{Right}

	return
}


;Visual Studio 단축키 설정
#IfWinActive Microsoft Visual Studio
{
	^d::
		Send, ^d
		return
		^!up::
		Save := Clipboard
		Send ^c^v{up}
		Sleep, 200
		Clipboard := Save
	return

	^!down::
		Save := Clipboard
		Send ^c^v
		Sleep, 200
		Clipboard := Save
	return

	!up::
		Save := Clipboard
		Send ^l{up}^v{up}
		Sleep, 200
		Clipboard := Save
	return

	!down::
		Save := Clipboard
		Clipboard:=""
		Send {down}^l{up}^v
		Sleep, 200
		Clipboard :=Save
	return

	^up::
		Send !{up}
	return

	^down::
		Send !{down}
	return

	^+c:: ;주석 처리
		Send, ^k^c
	return

	Pause::
		Send, ^{vk03sc045}
	return

	^w:: ;내부 창 종료
		Send, ^{F4}
	return

	+F9:: ;중단점 설정 및 조건 설정 창 활성화
		CoordMode, Mouse, Relative
		Send, {F9}
		sleep, 10
		Send, {AppsKey}
		sleep, 10
		Send, b
		sleep, 10
		Send, c
	return

	+F10:: ;중단점 설정 및 조건 설정 창 활성화
		CoordMode, Mouse, Relative
		Send, {AppsKey}
		sleep, 10
		Send, b
		sleep, 10
		Send, c
	return
}


;이클립스 프로그램 실행중인 경우
#IfWinActive ahk_class SWT_Window0
{
	F3::Send, ^k
	+F3::Send, +^k
	return
}


;mp3tag 프로그램 실행중인 경우
#IfWinActive ahk_exe Mp3tag.exe
{
	; mp3gain copy title
	F3::
	{
		Send, {F2}{tab}^c{esc}{down}{f2}{tab}^v{enter}{esc}
		return
	}
	; mp3gain copy artist
	F4::
	{
		Send, {F2}{tab}{tab}^c{esc}{down}{f2}{tab}{tab}^v{enter}{esc}
		return
	}
}

 

lib.ahk

global TMP_CLIPBOARD
global ccpArray := Array()
 

 
copy()
{
    backupClip := ClipboardAll
    Send, ^c
    ClipWait, 0.1
    TMP_CLIPBOARD := Clipboard
    Clipboard := backupClip
    return TMP_CLIPBOARD
}
 
paste()
{
    backupClip := ClipboardAll
    Clipboard := TMP_CLIPBOARD
    Send, ^v
    Clipboard := backupClip
    return
}
 
tmpPaste(target)
{
    backupClip := ClipboardAll
    Clipboard := target
    Send, ^v
    Clipboard := backupClip
    return
}
 
parse()
{
    Loop, parse, TMP_CLIPBOARD, `n
    {
        ccpArray[A_Index] := A_LoopField
    }
    return
}
 
cp()
{
    newLine = `r`n
    res := TMP_CLIPBOARD . newLine . TMP_CLIPBOARD
    return res
}
 
mv()
{
    parse()
    arg1 := StrReplace(ccpArray[1], "`r")
    arg2 := StrReplace(ccpArray[2], "`r")
    
    newLine = `r`n
    res := arg2 . newLine . arg1
    return res
}
반응형