본문 바로가기
programming language/Autohotkey

Autohotkey path join 방법 DllCall PathCombine 사용

by __observer__ 2019. 7. 13.
반응형

프로그래밍 언어를 사용하여 파일의 path 를 다루는 경우 path 를 합치고 분리하고 하는 과정은 매우 흔한 일입니다.

일단 Autohotkey 를 사용하여 path를 나누는 경우는 SplitPath 라는 명령어를 사용하면 됩니다.

그런데 합치는 경우에는 딱히 전용 함수가 없어서 그냥 string 을 붙여서 만들어야 합니다. 물론 string 을 붙여넣는것도 괜찮지만 잡스러운 처리가 필요한 경우들이 종종 있습니다.

예를 들어 아래 두개의 path 를 그냥 붙이게 된다면~


base := A_WinDir . "\System32\"

rel := "..\Media\test.wav"

fullpath := base . rel ; string 붙이기

아래와 같이 표시가 될 것 입니다. 보시다시피 그냥 문자 붙이기 이므로 .. (점점) 등이 그대로 표시가 됩니다. 위 path 중 rel 변수의 ..(점점) 은 상위 폴더를 의미 하므로 path 를 붙이기 전에 그에 맞게 처리를 해 줘야 합니다.

이런 문제를 쉽게 해결하기 위해서 Windows 내부의 함수를 사용할 수 있고 path 를 붙여 주는 함수로 PathCombine 이라는 함수가 있습니다. 해당 함수는 Shlwapi.dll 파일에 들어 있으므로 DllCall 명령을 통해 사용할 수 있습니다. 해당 함수를 아래와 같이 함수로 만들어서 사용하면 편리할 것입니다.

PathCombine(abs, rel) {

VarSetCapacity(dest, (A_IsUnicode ? 2 : 1) * 300, 1) ; MAX PATH

DllCall("Shlwapi.dll\PathCombine", "UInt", &dest, "UInt", &abs, "UInt", &rel)

Return, dest

}

위 함수를 사용하여 아래와 같이 path 를 join 해 보면~

MsgBox, % PathCombine(base, rel)

아래와 같이 알아서 상위 폴더로 설정하고 path 를 붙여 주는 것을 확인 할 수 있습니다.

Autohotkey DllCall 사용 방법에 대해서는 아래 주소에 메뉴얼이 있으니 확인해 보시기 바랍니다.

https://www.autohotkey.com/docs/commands/DllCall.htm



반응형

댓글