파일 목록을 읽어서 GUI의 DDL을 자동으로 바꾸는 예제입니다.
수동으로 처리하기 귀찮거나, 자주 변경될 가능성이 있는 부분을 처리하기 좋습니다.
예제는 파더님의 Tail7 매크로에서 스킬 검색하는 부분으로 만들었습니다.
image\스킬\ 영웅이름 \ 스킬명.png =>?이 패턴을 찾아보도록 하겠습니다.
참고자료
Loop : https://www.autohotkey.com/docs/commands/LoopFile.htm
StringReplace : https://www.autohotkey.com/docs/commands/StringReplace.htm
사용함수
; GUI용 DDL 선택
GUIMakeDropdownList(list, string="") {
StringReplace, tmp, list, %string%, %string%|
Return tmp
}
; 파일 목록 가져오기
; pattern : 파일 가져올 패턴 ( C:\Temp\*.tmp )
; folders : 0 = 파일만, 1 = 파일&폴더, 2 = 폴더만
; recurse : 0 = 하위 폴더 검색안함, 1 = 하위폴더도 검색함
ReadFiles( pattern, folders=0, recurse=0) {
FileList =
Loop, %pattern%, %folders%, %recurse%
{
SplitPath, A_LoopFileName, , , , FileName
FileList := FileList FileName "|"
}
Return FileList
}
예제
; 영웅 & 초기 스킬 설정.. ( 보통 설정에서 불러오게 됩니다 )
Hero := "제이브"
Skill := "용의분노"
Gui, Add, DropDownList, vSelectedHero gHeroChanged, % GUIMakeDropdownList( ReadHeroes(), Hero)
Gui, Add, DropDownList, vSkillsList, % GUIMakeDropdownList( ReadSkills( Hero), Skill)
Gui, Show
Return
GuiClose:
ExitApp
Return
HeroChanged:
Gui, Submit, NoHide
GuiControl, , SkillsList, % ReadSkills( SelectedHero)
Return
; 영웅목록 가져오기
ReadHeroes() {
Return ReadFiles( "image/스킬/*", 2) ; 두번째 파라미터에 2 = 폴더만 검색
}
; 스킬목록 가져오기
; 스킬이름.png , 스킬이름D.png 가 있어서
; 스킬이름D.png 목록만 가져와서 D를 제거했습니다.
ReadSkills( name) {
skills := ReadFiles( "image/스킬/" name "/*D.png")
StringReplace, tmp, skills, D, , 1
Return "|"tmp
}
? ? | |
?? ? ? ? ? ? ? ? ? ? ?? | ? ? ? ? ? ? ? ? |