Autohotkey 를 사용하여 특정 폴더에 있는 특정 확장자의 파일 수를 세기 위해 함수를 하나 만들어 봤습니다. Autohotkey 에서는 Loop 문을 통해 특정 확장자 파일 모두에 대해 접근을 할 수 있고 루프를 돌 때마다 A_Index 값이 증가 합니다. 이를 사용하면 파일의 갯수를 셀 수 있습니다. 다수의 특정 확장자 입력을 받을 수 있도록 했습니다.

코드는 다음과 같습니다.






위 코드중 제가 만든 함수는 fileCount() 이고 다음과 같이 폴더와 확장자를 지정하면 해당 폴더에 있는 특정 확장자의 갯수가 몇개인지를 알려 주는 함수 입니다. 확장자는 여러개를 순차적으로 넣으면 되고 아래 예에서는 jpg, png 파일을 찾도록 한 것입니다.

directV=C:\testFolder

N_Files := fileCount(directV, "jpg", "png")

그런데 검색을 조금 해 보니 특정폴더에 파일 개수를 찾기 위해서 Windows COM 을 사용하는 방법도 있더군요. Scripting.FileSystemObject, Shell.Application 등을 사용하는 방법이었으며 해당 방법들을 사용해도 동일한 결과를 얻을 수 있습니다. COM 을 사용하는 예에서 Shell.Application 을 사용하여 Item 의 갯수를 찾는 경우 숨김폴더는 제외한 갯수를 알려 주더군요.



아래 포스팅에서 Autohotkey 에서 Windows COM(Component Object Model) 을 사용한 사례에 대해서 소개를 한 적이 있습니다. Windows 컴퓨터 사용시 많이들 사용하는 Microsoft Office 제품을 사용할 때도 COM 을 사용하여 자동화를 할 수가 있습니다.

http://iamaman.tistory.com/1879

http://iamaman.tistory.com/461

http://iamaman.tistory.com/2001

http://iamaman.tistory.com/2021

Autohotkey 에서 COM 을 사용하기 위해서는 아래 메뉴얼 같이 COM object 를 만들어야 합니다.

https://autohotkey.com/docs/commands/ComObjCreate.htm

ComObjCreate의 입력값으로 CLSID 를 넣어줘야 하는데 CLSID 는 우리가 사용하고자 하는 COM 의 Program ID 입니다.

ComObject := ComObjCreate(CLSID [, IID])

탐색기 정보 등을 자동화 하고 싶으면 Shell.Application, Microsoft Word 를 자동화하고 싶으면 Word.application, Microsoft Powerpoint 를 자동화 하고 싶으면 PowerPoint.Application 을 넣어야 하는 식입니다.

COM 을 사용하기 위해서는 당연히 우리 컴퓨터에 사용할 수 있는 COM 이 어떤게 설치가 되어 있는지를 알아야 합니다. Microsoft Office 제품과 같이 우리가 설치한 경우에는 당연히 알 수 있겠지만 다른 프로그램들 같은 경우에는 어떤 이름을 사용해야 COM 을 사용할 수 있는 건지 잘 모르는 경우가 많습니다.

그래서 오늘은 Powershell 을 사용하여 우리 컴퓨터에 설치되어 있는 COM 을 검색하는 방법에 대해서 소개하려합니다. 해당 코드는 Powershell 코드이며 ‘개발자를 위한 Powershell’ 책의 예제에 있습니다.

책의 전체 소스 코드들은 아래 주소에서 다운로드 받을 수 있습니다.

https://github.com/dfinke/powershell-for-developers

그리고 아래 주소의 GetProgID 함수를 사용하면 우리 컴퓨터에 설치되어 있는 COM 을 검색할 수 있습니다.

https://github.com/dfinke/powershell-for-developers/blob/master/chapter10/GetProgID.ps1

Powershell 에서 다음과 같이 ps1 파일을 실행하면 되는데…..

.\GetProgID.ps1

내 컴퓨터에 몇 개의 COM 이 설치되어 있는지 확인을 해보려면 다음과 같이 명령어를 치면 됩니다. 제 컴퓨터에는 1800개 COM 이 있네요.

.\GetProgID.ps1 | measure


1800 개를 눈으로 확인하는 건 조금 불편 하니까 키워드로 검색하는 것이 좋습니다. 다음과 같이 word 를 검색해보면 Word.Application 뿐만 아니라 내가 잘 알지도 못하는 다양한 COM 들이 설치 되어 있다는 것을 알 수가 있습니다. 검색 되는 목록 중에서 Word.Application 을 사용 하면 되는 것이죠.

.\GetProgID.ps1 word


이베스트 xingAPI를 사용해서 시스템 트레이딩을 하시는 분들은 다음과 같이 검색해보시면 COM 이 나오는 것을 확인 하실수 있습니다. xingAPI 를 설치했으므로 검색이 되는 건 당연하겠죠.

.\GetProgID.ps1 XA_DataSet

.\GetProgID.ps1 XA_Session


저는 개인적으로 요즘 이베스트 xingAPI를 통해서 시스템 트레이딩을 조금씩 공부 해 보고 있는데, 컴퓨터 언어는 주로 파이썬을 사용하고 있습니다. 생각해보니 Autohotkey 나 Powershell 을 사용해서도 시스템 트레이딩이 가능할것도 같네요.



탐색기의 주소를 알고 싶은 경우 탐색기에서 ALT + D 를 누른 후에 주소 값을 복사 하면 됩니다. 

Autohotkey 로 탐색기의 주소를 알고 싶은 경우에도 위의 내용을 코딩해 주면 되겠죠. 


해당 내용은 아래와 같을 겁니다. 



send, !d
sleep, 1000
send ^c

그런데 클립보드를 사용하다 보면 이상하게 주소가 저장이 안 될 때가 있습니다. 

그래서 COM 을 사용해 보기로 했습니다. 

Autohotkey 에서 COM 을 사용하여 현재 열린 탐색기의 폴더 주소를 아는 방법은 아래와 같습니다.

#NoEnv
#SingleInstance force

#a::   ; Shortcut : WIN + A
hwnd := WinExist("A")
WinGetClass class, ahk_id %hwnd%

if (class="CabinetWClass" or class="ExploreWClass")
{

for window, in ComObjCreate("Shell.Application").Windows
{
try
{
if (window.hwnd==hwnd)
{
sel := window.LocationURL

sel := RegExReplace(sel,"file:///","")
foldername := RegExReplace(sel,"/","\")
foldername := RegExReplace(foldername,"%20"," ")

Clipboard:=foldername
MsgBox,,, % foldername,1

break
}
}
}
}
return

위 코드를 실행 시킨 후에 탐색기를 연 상태에서 WIN + A 를 누르면 아래와 같이 msgbox 가 1 초간 열렸다가 꺼지고 클립보드에 폴더의 주소가 저장 됩니다.




+ Recent posts