Tuesday, May 13, 2008

PowerPro Keytrap

매우 유용한 PowerPro 플러그인 KeyTrap 에 대해서 말씀드릴려고 합니다.

KeyTrap 은 바로 아래 강좌에서 말씀드렸던 MouseTrap 제작자의 작품입니다. KeyTrap 은 PowerPro 자체의 *keys, win.keys 기능을 보조할뿐만 아니라, 훨씬 더 강력한 키보드 컨트롤을 가능하게 합니다. 현재 최신버전은 2.3 입니다.

- KeyTrap 의 특징

1. PowerPro 자체적으로 지원하지 않는 키를 hotkey 로 사용할 수 있습니다.
2. modifier key (수정키) 가 ctrl, alt, shift, win 키에 한정되지 않으며, 키보드의 모든 키를 수정키로 사용할 수 있습니다.

3. 특정 키보드의 멀티미디어키 기능을 원하는대로 수정할 수 있습니다.

4. win 키 무력화, alt tab 키 무력화, ctrl alt del 키 등 키보드의 모든 키와 키조합을 무력화할 수 있습니다.

5. 윈도우 기본 단축키 (ex. Win E, Win D, Win R 등..) 의 기능을 사용자 취향대로 수정할 수 있습니다.

6. ctrl, alt, shift, win 키의 오른쪽, 왼쪽키 각각에 대해 다른 기능을 할당할 수 있습니다. (ex. 왼쪽 Win + e = 윈도우 탐색기 실행, 오른쪽 Win + e = Total Commander 실행)

7. keydown 과 keyup 명령을 개별적으로 실행할 수 있어서, 좀 더 세밀한 키전송이 가능합니다.

8. 이외에도 많은 기능을 제공합니다.

- KeyTrap 의 설치와 실행

1. http://cafe.naver.com/powerpro/484 글에 첨부된 KeyTrap 2.3 버전의 압축 파일을 다운 받은 후, dll, htm, txt 파일은 모두 PowerPro 폴더에 있는 plugins 폴더 (일반적으로 C:\Program Files\PowerPro\plugins) 에, exe, ini 파일은 PowerPro 폴더 (일반적으로 C:\Program Files\PowerPro) 에 압축을 풉니다.

2. KeyTrap.Enable(1) 명령을 실행하면 KeyTrap 이 로드됩니다. PowerPro 를 재실행했다면, KeyTrap.Enable(1) 명령 또한 재실행해줘야 하므로, PowerPro 의 scheduler 에 startup 항목으로 KeyTrap.Enable(1) 명령을 넣어두는 것이 좋습니다. 더불어, KeyTrap.ResetKeys() 을 Enter more commands ~~ 항목에 넣어두시면 더욱 좋습니다. KeyTrap.ResetKeys() 에 대해서는 아래에서 다시 말씀드립니다.

3. KeyTrap.ini 파일을 원하시는 편집기로 열어서 후반부에 있는 [IgnoreVKCodes] 섹션의 가장 아래에

Hanja=25
Hangeul=21


를 추가합니다. 현 버전까지의 keytrap 에서는 한글 키보드의 경우 한/영 키와 한자 키를 한번 누르고 나면 계속 눌려 있는 것으로 인식되는데, 눌려있는 한/영키, 한자키가 keytrap 의 modifier 키 인식에 방해가 되지 않도록 하는 방법입니다. 한자키의 virtual key code 가 25, 한/영키는 21 입니다.

4. PowerPro 폴더에 압축을 푼 keytrap.ini 파일을 편집기로 연 후, [Active] 섹션에 있는 모든 항목 (현재 자료실에 있는 압축파일에 동봉된 keytrap.ini 라면, 4개 라인) 을 삭제합니다.


5. KeyTrap 의 설정파일은 keytrap.ini 인데, 이 파일은 원하시는 편집기에서 바로 편집해도 되지만, 바로 위 1번 과정에서 PowerPro 폴더로 복사한 KTConfig.exe 를 이용하면 GUI 모드로 훨씬 직관적이면서도 쉬운 설정이 가능합니다.


6. 흔하지는 않지만, 사용자의 시스템에 따라서, 25 와 21 이외의 vkcode 값을 [IgnoreVKCodes] 섹션에 더 추가해 줘야 할 수도 있습니다. 해당 명령이 제대로 수행되지 않을때는 현재 눌려져 있는 키가 있는지를 가장 먼저 의심하시기 바랍니다. (물론, 하드웨어적 차원이 아니라 키보드, 마우스 드라이버 차원의 눌려짐을 의미합니다.) 현재 눌려져 있는 키가 있는지 확인할려면, win.debug(keytrap.getpressedkeys()) 명령을 이용하시면 됩니다. 만약, 마우스 왼쪽 버튼과 한/영키가 눌려져 있다면, win.debug(keytrap.getpressedkeys()) 명령을 수행했을 때, 각각의 vkcode 값인 1, 21 이 debug 창에 찍힙니다.


7. KeyTrap 을 쓰다보면, 본의 아니게 소프트웨어적으로 키가 눌려있을 수 있습니다. 그럴 때, 눌린 키를 reset 시켜줄려면, KeyTrap.ResetKeys() 명령을 쓰면 됩니다. 위 2번에서 KeyTrap.ResetKeys() 명령을 scheduler 에 startup 항목으로 넣어두는 이유이기도 합니다.


8. KeyTrap.ini 를 편집기에서 수정한 후에는 반드시 KeyTrap.ReloadIni(0) 명령으로 갱신을 해줘야 하는데, 이렇게 일일이 리로드 명령을 내리는 것이 귀찮은 분들은, 자신이 이용하는 편집기의 저장 명령(저의 경우 Editplus 라서 ctrl + s)을 pp 의 key/mouse 탭에서 hotkey 로 지정한 후, enter more commands ~~ 박스에 아래처럼 넣어줍니다.

win,keys("^s")
wait.for(200)
KeyTrap.ReloadIni(0)

Blank for all windows ~~ 박스에는 *keytrap.ini* 등과 같이 넣어서 타겟을 지정하셔야겠고 (EditPlus 의 경우, 편집중인 파일의 경로가 캡션에 표시됩니다. 대부분의 편집기가 그렇겠죠..), use scan 에는 체크를 하시는 것이 편할겁니다. 저의 경우 핫키인 ctrl s 에 있는 s 의 scan code 를 이용하겠다는 것이죠. 테스트 해 보시면 체크유무에 따른 차이를 아실 수 있습니다.

9. (거의 사용할 일이 없지만,) keytrap 을 unload 할려면,

KeyTrap.Enable(0)
KeyTrap.Unload()

처럼, 위 두 명령을 차례대로 실행하면 됩니다.

10. (역시 거의 사용할 일이 없지만,) 다른 프로그램이 키보드 후킹을 선점하는 경우라면, keytrap 이 제대로 작동하지 않을 수 있는데, 이럴때 키보드 후킹을 다시 선점하기 위해서는

KeyTrap.Enable(0)
KeyTrap.Enable(1)

처럼, 위 두 명령을 차례대로 실행하면 됩니다.

- KeyTrap 의 기능

1. KeyTrap 활성화/비활성화

keytrap 을 활성화하기위해서는 KeyTrap.Enable(1) 명령을 실행합니다.
keytrap 을 비활성화하기위해서는 KeyTrap.Enable(0) 명령을 실행합니다.

위 명령이 성공적으로 수행된 경우 반환값은 1, 실패하면 반환값은 0 입니다.

2. Scan mode 활성화/비활성화

scan mode 를 활성화하기위해서는 KeyTrap.ScanMode(1) 명령을 실행합니다.
scan mode 를 비활성화하기위해서는 KeyTrap.ScanMode(0) 명령을 실행하거나, 혹은 더 간단히 esc 키를 연달아 두번 누르면 됩니다.
scan mode 가 활성화되면, 그때부터 눌려지는 모든 키보드의 이름, scan code 와 virtual key code 값, extended key 값이 PowerPro 의 debug 창에 찍히게 됩니다. keytrap 사용시 필수적인 정보들이므로 자주 사용하게 될 겁니다.

3. keytrap.ini 파일 리로드

keytrap.ini 파일을 리로드하기위해서는 KeyTrap.ReloadIni(0) 명령을 실행합니다.

keytrap.ini 파일을 편집기에서 수정한 후에는 반드시 갱신해줘야 하는데, 그 명령이 바로 KeyTrap.ReloadIni(0) 입니다.

4. ctrl alt del 키 무력화

ctrl alt del 키를 무력화하기위해서는 KeyTrap.SetCtrlAltDel(0) 명령을 실행합니다.
ctrl alt del 키를 다시 작동시킬려면 KeyTrap.SetCtrlAltDel(1) 명령을 실행합니다.

5. 특정키의 눌림 여부 판단

특정키가 눌려져 있는지 여부를 알려주는 서비스이며, KeyTrap.GetKeyState(x,y) 형식으로 쓰입니다.

x 에는 1 과 0 중 하나를 입력하는데, Caps Lock 키, Scroll Lock 키, Num Lock 키와 같은 토글키의 상태를 알아보려면 1, 그 외 모든 키의 상태를 알아보려면 0 을 입력합니다.


y 에는 상태를 알아보려는 키의 vkcode (virtual key code) 값을 입력합니다. 각 키의 vkcode 값은 KeyTrap.ScanMode(1) 명령을 이용하거나, 혹은 keytrap 설치파일에 동봉된 vkcodes.htm 파일을 참조하면 됩니다.

예) Caps Lock 키의 눌림 여부를 알아보려면, win.debug(KeyTrap.GetKeyState(1,20)) 처럼 합니다.

6. 특정키가 눌릴때까지 대기하기

특정키가 눌릴때까지 스크립의 실행을 중지하는 서비스입니다. 특정키가 눌린 후에, 그 뒤 스크립의 실행이 계속됩니다. 이 서비스는 KeyTrap.Enable(1) 명령이 이미 실행되어져야 제대로 작동합니다.

사용 형식은 KeyTrap.WaitKey(x,[y],[n]) 처럼 사용합니다.

x : 눌려지기를 기다릴 특정키의 vkcode 값입니다. 이 값은 KeyTrap.ScanMode(1) 명령을 이용하거나, 혹은 keytrap 설치파일에 동봉된 vkcodes.htm 파일을 참조하면 됩니다. 눌려지기를 기다릴 특정키는 콤마로 구분해서 여러개를 한꺼번에 지정할 수도 있습니다. 예를 들어, KeyTrap.WaitKey("9,8,32") 는 백스페이스키, 탭키, 스페이스키중 하나가 눌릴때까지 대기합니다. 키보드의 아무 키나 눌릴때까지 대기하고 싶으면 KeyTrap.WaitKey(0) 를 쓰면 됩니다.


y : 반드시 지정하지 않아도 되는 값이며, 1 이면 눌린 키값을 시스템에 전달하지 않고, 0 이면 눌린 키값을 시스템에 전달합니다. 디폴트 값은 1 입니다.


n : 반드시 지정하지 않아도 되는 값이며, 최대 대기 시간을 초 단위로 지정합니다. 예를 들어, 60 으로 지정하면, x 값에 지정된 키가 눌리지 않아도 60 초 후에는 스크립이 계속 실행됩니다. 기본값은 무한대입니다. 즉, 최대 대기 시간이 없다는 것이죠.

이 서비스의 반환값은 x, 0, -1 중 하나입니다.

x : 눌려지기를 기다릴 특정키의 vkcode 값
0 : 다른 이유로 인한 서비스의 종료
-1 : 최대 대기 시간 지정시 그 시간의 만료로 인한 서비스의 종료

참고1. 이 서비스가 작동중인 동안에 이 서비스의 작동을 취소하려면 keytrap.waitkey() 명령을 사용하면 됩니다.


참고2. 이 서비스가 작동중일때 keytrap.unload() 명령을 바로 실행하면 안됩니다. 이 서비스가 작동중일때 keytrap 을 unload 하고 싶다면, 먼저 keytrap.waitkey() 명령을 수행하여 이 서비스의 작동을 취소한 후 keytrap.unload() 명령을 실행해야 합니다.


참고3. 눌려지기를 기다릴 특정키로 마우스는 사용할 수 없습니다.

보기) 아래는 사용자가 탭키를 누를때까지 스크립의 실행을 중지하다가, 탭키를 누르고 나면 다음 스크립이 계속 실행되는 보기입니다.

win.debug("스크립의 실행을 계속 하려면 탭키를 누르세요")
KeyTrap.WaitKey(9)
win.debug("탭키를 누르셨습니다.")

7. 키 보내기

이 서비스는 2 가지 방법으로 키값을 전송합니다. 이 서비스는 KeyTrap.Enable(1) 서비스를 필요로 하지 않습니다.

1) pp 의 *keys 포맷과 같은 방식을 이용합니다. 이 방식은 키트랩 disable --> *keys 보낼키값 --> 키트랩 enable 하는 것과 같은 효과입니다. 사용 형식은 KeyTrap.SendKeys(x) 입니다.

x : pp 자체의 *keys 명령에서 쓰이는 모든 키값입니다.

보기) KeyTrap.SendKeys("^s{en}") : ctrl s 를 누른 후, enter 키를 누릅니다.

2) SendInput API 방식으로 키값을 전송합니다.

사용 형식은 keytrap.sendkeys(a,b,c,d,e) 입니다.

a : scancode 값입니다.
b : vkcode 값입니다.
c : 1 이면 keyup, 0 이면 keydown 입니다.
d : 반드시 입력할 필요는 없는 값이며, a 에서 지정한 scancode 값에 따라서 생성된 vkcode 값의 사용 여부를 지정합니다.
0 : b 에서 사용자가 지정한 vkcode 값을 사용하고 싶을 때 지정합니다. (디폴트값)
1 : b 에서 사용자가 지정한 vkcode 값을 무시하고, a 에서 지정한 scancode 값에 따라서 생성된 vkcode 값을 사용하고 싶을 때 지정합니다.
e : 전송할 키가 extended key 인지의 여부를 지정합니다.
0 : extended key 가 아닐 때 (디폴트값)
1 : extended key 일때

보기) 탭키를 한번 누르고 싶다면 아래처럼 합니다.

keytrap.sendkeys(15,9,0) : 탭키를 누릅니다.
keytrap.sendkeys(15,9,1) : 탭키를 뗍니다.

8. AddEntry

일시적으로 키설정을 추가하고 싶을 때 사용합니다. AddEntry 서비스를 이용해서 추가되는 키설정은 keytrap.ini 파일에 저장되지 않으며, 아래와 같은 상황에서 이 설정은 사라집니다.

KeyTrap.ReloadIni(0) 명령을 실행할 때
KeyTrap 이 unload 될 때
PowerPro 가 재실행될 때

이 서비스는 사용자가 특정키, 혹은 모든 키를 특정 상황에서 일시적으로 disable 하고 싶을 때 유용하게 쓰입니다. 예를 들어, 잠시 게임을 하고 싶을 때 win 키, ctrl esc 키, alt tab 키 등의 키를 작동되지 않도록 하고 싶을 때 사용하면 유용합니다.

사용 형식은 KeyTrap.AddEntry("엔트리이름","엔트리명령") 입니다.

엔트리이름 : 일시적으로 등록하기를 원하는 엔트리이름이며, 그 길이는 8 byte 까지 쓸 수 있습니다. 이 이름은 KeyTrap.RemEntry("엔트리이름") 에서도 쓰이며, keytrap.ini 파일이나 이전 KeyTrap.AddEntry 서비스에 의해 이미 존재하는 이름이라면 그 설정은 덮어써집니다.


엔트리명령 : keytrap.ini 파일 포맷에 맞는 명령입니다.

이 서비스의 반환값은 아래와 같습니다.

1 : 엔트리 명령이 성공적으로 추가되었을 때
0 : 어떤 에러로 인해 엔트리 명령이 추가되지 못했을 때

보기) 아래 스크립을 실행하면, 오른쪽 win 키, 왼쪽 win 키가 모두 disable 됩니다.

local win_dL = ?#win_disable_left=0,0,0,91,91,0,,,,1,1,0,0,1,0,,,,,,#
local win_dR = ?#win_disable_right=0,0,0,92,92,0,,,,1,1,0,0,1,0,,,,,,#
KeyTrap.AddEntry("windisL",win_dL)
KeyTrap.AddEntry("windisR",win_dR)

9. RemEntry

AddEntry 서비스에 의해 일시적으로 추가된 키엔트리 설정을 제거할때 사용합니다.

사용 형식은 KeyTrap.RemEntry("엔트리이름") 입니다.

엔트리이름 : AddEntry 서비스 사용시 사용했던 엔트리이름을 사용합니다.

이 서비스의 반환값은 아래와 같습니다.

1 : RemEntry 서비스가 성공적으로 실행되었을 때
0 : 어떠한 이유 (특히, 엔트리이름이 존재하지 않을 경우) 로 인해 RemEntry 서비스가 제대로 수행되지 않았을 때

보기) 위 8 번의 보기를 수행해서 disable 상태인 오른쪽 win 키, 왼쪽 win 키를 다시 enable 하고 싶다면 아래처럼 합니다.

KeyTrap.RemEntry("windisL")
KeyTrap.RemEntry("windisR")

10. ListEntry

keytrap.ini 파일에 설정되어 있는 entry 와 AddEntry 서비스에 의해 추가된 entry 를 모두 보여줍니다.

사용 형식은 KeyTrap.ListEntry() 입니다.

반환값은 각각의 라인을 entry 명으로 하는 멀티라인입니다.

모든 entry 명을 추출하려면 아래처럼 합니다.

local j, nCount = line(keytrap.listentry(),0)
for (j=1; j <= nCount ; j=j+1)
win.debug(line(keytrap.listentry(),j))
endfor

11. GetKeyName

이 서비스는 주어진 scancode 에 해당하는 엔트리이름이 무엇인지 보여줍니다. 이 서비스는 KeyTrap.Enable(1) 서비스를 필요로 하지 않습니다.

사용 형식은 sKeyname = KeyTrap.GetKeyName(Scancode, Ext) 입니다.

Scancode : Keytrap.Scancode(1) 등의 서비스를 이용해서 구할 수 있는 각 키의 scancode 입니다.
Ext : Keytrap.Scancode(1) 등의 서비스를 이용해서 구할 수 있는 각 키의 extended key 여부입니다. extended key 이면 1, 아니면 0 입니다.

반환되는 sKeyname 값은 키보드의 종류에 따라서 다를 수도 있습니다.

보기) win.debug(KeyTrap.GetKeyName(28, 0)) ;; "Enter" 값이 반환됩니다.
win.debug(KeyTrap.GetKeyName(28, 1)) ;; "Num Enter" 값이 반환됩니다.

12. GetPressedKeys()

이 서비스는 현재 눌려져 있는 키의 vkcode 값을 콤마로 구분해서 보여줍니다. 이 서비스는 특히 keytrap.ini 파일의 하단부에 있는 [IgnoreVKCodes] 섹션에 modifier 키 인식시 무시할 vkcode 값을 입력할 때 유용한 정보를 제공하는 서비스입니다. keytrap 이나 mousetrap 을 사용하다보면 간혹 지정된 단축키나 마우스 액션이 제대로 동작하지 않을 경우가 있는데, 대부분은 [IgnoreVKCodes] 섹션에서 지정하지 않은 어떤 키가 눌려져 있는 경우입니다. 그럴때 이 서비스를 이용하면 현재 눌려져 있는 키가 무엇인지 알 수 있습니다.

사용 형식은 KeyTrap.GetPressedKeys() 입니다.

반환값은 현재 눌려져 있는 키의 vkcode 값이 콤마로 구분되어 보여집니다.

보기) 현재 눌려져 있는 키의 vkcode 값을 콤마로 구분해서 pp 의 debug 창에 보여줍니다. 아래에서 2 초 대기를 넣은 이유는, 이 서비스를 실행하는 마우스 클릭이나 단축키의 vkcode 값이 이 서비스의 결과값에 포함되어지지 않게 하기 위함입니다.

*wait 2
win.debug(KeyTrap.GetPressedKeys())

13. ResetKeys()

이 서비스는 현재 눌려져 있는 모든 키, 혹은 특정키를 리셋시킵니다. keytrap 이나 mousetrap 을 사용하다보면 간혹 지정된 단축키나 마우스 액션이 제대로 동작하지 않을 경우가 있는데, 대부분은 [IgnoreVKCodes] 섹션에서 지정하지 않은 어떤 키가 눌려져 있는 경우입니다. 그럴때 이 서비스를 이용하면 현재 눌려져 있는 모든 키, 혹은 특정키를 리셋시켜서 keytrap 과 mousetrap 의 작동이 제대로 동작하도록 해 줍니다.

사용 형식은 KeyTrap.ResetKeys([n]) 입니다.

n : 반드시 입력할 필요는 없는 값이며, 리셋할 특정키의 vkcode 값입니다. 입력하지 않으면, 255 개 모든 vkcode 가 리셋됩니다. 일반적으로는 입력하지 않고 그냥 씁니다.

반환값은 없습니다.

보기) KeyTrap.ResetKeys() ;; 현재 눌려져 있는 모든 키를 리셋시킵니다.

14. IsEnable()

현재 keytrap 플러그인의 enable, disable 상태를 나타냅니다.

1 : 현재 keytrap 이 enable 상태
0 : 현재 keytrap 이 disable 상태

보기) win.debug(KeyTrap.IsEnable())

15. GetEntry

이 서비스는 keytrap.ini 파일과 AddEntry 서비스에 의해 추가된 모든 entry 의 값을 가져옵니다.

사용 형식은 KeyTrap.GetEntry("엔트리이름") 입니다.

보기) 위 8 번의 보기를 수행해서 오른쪽 win 키, 왼쪽 win 키가 현재 disable 상태일 때, 추가한 windisL 과 windisR 의 값을 보고 싶다면 아래처럼 합니다.

win.debug(KeyTrap.GetEntry("windisL"))
win.debug(KeyTrap.GetEntry("windisR"))

- KeyTrap.ini 파일의 포맷

KeyTrap.ini 파일에 입력되는 엔트리의 포맷은 다음과 같습니다.

엔트리이름=MODIFIER KEY 1,MODIFIER KEY 2,MODIFIER KEY 3,SCAN CODE,KEY CODE,ONKEY,EVAL,WINDOW CAPTION,COMMAND,STOP,EAT,NOMOD,WAITMOD,EXTKEY,DISABLED,,,,,,[COMMENT]

엔트리이름은 최대 20자까지 쓰는 것이 좋고, RemEntry, GetEntry 등의 서비스나 pp 의 ini 플러그인 등을 이용해야 하는 상황이 아니라면, 이름을 중복사용해도 됩니다.

KeyTrap v2.3 (현재 버전)은 항목값이 모두 15 개입니다.

1~3 번째 항목 : MODIFIER KEY 1 과 MODIFIER KEY 2 와 MODIFIER KEY 3 의 값으로써, modifier key 로써 사용하고 싶은 키의 vkcode 값을 넣습니다. 각 키의 vkcode 값은 keytrap 플러그인에 포함된 vkcodes.htm 파일을 참조하거나, keytrap.scancode(1) 서비스, pp 내장 명령인 exec.tracekey 를 사용하시면 알 수 있습니다. 3개의 modifier key 를 모두 사용해도 되고, 전혀 사용하지 않아도 됩니다. 전혀 사용하지 않을 때는 3개의 값 모두 0 을 넣어줘야 합니다.

4 번째 항목 : SCAN CODE 로써, 예를 들어, win e 를 단축키로 지정하고 싶다면, e 의 scan code 값인 18 을 입력합니다. 아무런 키가 눌려도 된다면, ALL 을 입력합니다.

5 번째 항목 : KEY CODE 로써, 예를 들어, win e 를 단축키로 지정하고 싶다면, e 의 vkcode 값인 69 를 입력합니다. 아무런 키가 눌려도 된다면, ALL 을 입력합니다.

6 번째 항목 : ONKEY 로써, 아래와 같은 값을 가집니다.

0 : 키를 누를 때 설정된 명령이 실행되며, 키를 누르고 있으면 설정된 명령이 반복해서 실행됩니다.
1 : 키를 뗄 때 설정된 명령이 실행됩니다.
2 : 키를 누르고 있으면 설정된 명령이 반복해서 실행되며, 키를 뗄 때 마지막으로 실행됩니다.
3 : 키를 누를 때 오직 한번만 설정된 명령이 실행됩니다.
4 : 키를 누를 때 한번, 키를 뗄 때 한번 설정된 명령이 실행됩니다.
5 : 키를 "따닥" (더블탭) 눌렀을 때 설정된 명령이 실행됩니다. "따" 와 "닥" 의 인터벌은 시스템에서 설정되어 있는 마우스 더블 클릭 인터벌과 동일합니다. 이 값을 ONKEY 값으로 지정했을 때는, EAT 모드를 disable (값을 0 으로) 로 해 두는 것이 좋습니다. "따" 가 먹힐 수 있기 때문입니다. (뉘앙스가 좀 이상하군요..)

7 번째 항목 : EVAL 로써, pp 내장 eval 함수의 인수에 해당하는 문자열을 입력하며, 최대 255 문자까지 입력할 수 있습니다. 평가된 값이 1 인 경우에만 설정된 명령이 실행되며, 평가할 일이 없다면 그냥 비워둡니다.

8 번째 항목 : WINDOW CAPTION 으로써, pp 의 CL 지정 방식과 동일합니다. 모든 윈도우를 지정하려면 비워두면 됩니다.

9 번째 항목 : COMMAND 로써, pp 에서 쓰이는 명령을 입력합니다. 아래는 명령 입력시 같이 쓸 수 있는데, 명령의 실행시 해당값으로 평가된 후 실행됩니다.

%vkc% - 키의 vkcode 값
%scc% - 키의 scan code 값
%key% - 키의 이름

10 번째 항목 : STOP 으로써, 1 혹은 0 의 값을 가집니다. 1 이면 해당 명령을 수행하고 keytrap.ini 파일의 그 이후 항목들에 대해서는 검사하지 않습니다. 0 이면 해당 명령을 수행하고 keytrap.ini 파일의 그 이후 항목들에 대해서도 계속해서 검사합니다. 이것은 하나의 키엔트리에 대해서 여러 명령을 수행할 수 있게 합니다. 물론, 이 값이 1 이라고 하더라도, 해당 명령을 ".스크립명" 등과 같이 함으로써 여러 명령을 수행할 수 있습니다.

11 번째 항목 : EAT 으로써, 1 혹은 0 의 값을 가집니다. 1 이면 해당 키엔트리의 키값이 대상 윈도우에게로 전달되지 않습니다. 0 이면 해당 키엔트리의 키값이 대상 윈도우에게로 전달됩니다. 일반적으로 EAT 모드는 켜둔 상태인 1 을 사용합니다.

12 번째 항목 : NOMOD 로써, 1 혹은 0 의 값을 가집니다. 1 이면, 1~3번째 항목에서 지정한 modifier key 는 물론이고, 다른 어떤 키이든 키가 눌려져 있는지 여부를 검사하지 않습니다. 0 이면, 1~3번째 항목에서 지정한 modifier key 가 눌려져 있는지 검사한 후, 눌려져 있을 때만 해당 명령이 실행됩니다. 0 이 기본값입니다.

13 번째 항목 : WAITMOD 로써, 1 혹은 0 의 값을 가집니다. 이 항목은 1~3번째 항목에서 지정한 modifier key 가 있다면, 그 modifier key 가 떼진 후에 해당 명령을 수행할 것인가의 여부입니다. 1 이면 키가 떼진 후에 해당 명령을 수행하고, 0 이면 키를 누르면 해당 명령을 실행합니다. 일반적으로 0 을 사용합니다.

14 번째 항목 : EXTKEY 로써, 1 혹은 0 의 값을 가집니다. 예를 들어, win e 를 단축키로 지정했다면, e 가 extended key 인지의 여부를 지정하는 항목입니다. e 는 extended key 가 아니므로, 0 을 입력합니다.

15 번째 항목 : DISABLED 로써, 1 혹은 0 의 값을 가집니다. 1 이면, 이 키엔트리는 사용되지 않습니다.

- 참고

1. 8 번째, 9 번째 항목에서 "," 를 문자 그대로 쓰고 싶으면, \ 를 "," 앞에 넣어주면 됩니다.

2. 각 항목 사이에는 공백이 있으면 안됩니다.

3. 주석은 라인의 가장 앞에 ; 를 넣어주면 됩니다. 단, KTConfig.exe 파일을 실행하게 되면, ; 으로 주석화해둔 라인은 모두 삭제되므로, 되도록 주석은 15번째 항목 이후에 적는 것이 좋습니다.

- KeyTrap.ini 파일에 포함되는 키엔트리 예시

Win_E=92,0,0,18,69,0,,,.etc_script_archive@win_e,1,1,0,0,0,0,,,,,,

오른쪽 win 키 + e 를 누르면, .etc_script_archive@win_e 스크립 명령이 실행됩니다. 저는 저 스크립 명령으로 Total Commander 를 실행하고 있습니다. 물론, 왼쪽 win + e 키는 윈도우 기본인 탐색기가 뜹니다.

---

Win_Pause=91,0,0,69,19,0,,,.OnMultiClick(".etc@system_property"\,".etc@DeviceManager"),1,1,0,0,0,0,,,,,,

왼쪽 win 키 + Pause/Break 키를 누르면, .OnMultiClick(".etc@system_property"\,".etc@DeviceManager") 스크립 명령이 실행됩니다. 즉, 왼쪽 win 키 + Pause/Break 키를 한번 누르면, .etc@system_property 스크립 명령 (시스템 등록 정보 창이 뜸) 이 실행되고, 두번 누르면 .etc@DeviceManager 스크립 명령 (장치 관리자 창이 뜸) 이 실행됩니다.

---

Win+F=92,0,0,33,70,0,,,do(filemenu(?"scripts\filemenu.powerpro")),1,1,0,0,0,0,,,,,,

오른쪽 win 키 + f 를 누르면, do(filemenu(?"scripts\filemenu.powerpro")) 명령이 실행됩니다.

---

Win+F1=92,0,0,59,112,0,,,.OnMultiClick(".etc_script_archive@pphelp"\,".etc_script_archive@pphelp1"\,".etc_script_archive@pphelp2"),1,1,0,0,0,0,,,,,,

오른쪽 win 키 + f1 을 누르면, .OnMultiClick(".etc_script_archive@pphelp"\,".etc_script_archive@pphelp1"\,".etc_script_archive@pphelp2") 스크립 명령이 실행됩니다. 즉, 오른쪽 win 키 + f1 키를 한번 누르면, .etc_script_archive@pphelp 스크립 명령 (pp hlp 포맷 도움말이 뜸) 이 실행되고, 두번 누르면 .etc_script_archive@pphelp1 스크립 명령 (pp chm 포맷 도움말이 뜸) 이 실행되고, 3 번 누르면 .etc_script_archive@pphelp2 스크립 명령 (pp doc 포맷 도움말) 이 실행됩니다.

---

ctrl_left_esc_disable=162,0,0,1,27,0,,,,1,1,0,0,0,0,,,,,,

왼쪽 ctrl + esc 키를 무력화시킵니다.

---

ctrl_esc_disable=163,0,0,1,27,0,,,,1,1,0,0,0,0,,,,,,

오른쪽 ctrl + esc 키를 무력화시킵니다.

---

alt_tab_disable=165,0,0,15,9,0,,,,1,1,0,0,0,0,,,,,,

오른쪽 alt + tab 키를 무력화시킵니다.

---

alt_left_tab_disable=164,0,0,15,9,0,,,,1,1,0,0,0,0,,,,,,

왼쪽 alt + tab 키를 무력화시킵니다.

---

win_disable_right=0,0,0,92,92,0,,editplus*,,1,1,0,0,1,0,,,,,,

오른쪽 win 키를 무력화시킵니다. 오른쪽 win 키는 extended key 이므로 그 자리에 1 을 입력합니다.

---

win_disable_left=0,0,0,91,91,0,,,,1,1,0,0,1,0,,,,,,

왼쪽 win 키를 무력화시킵니다. 왼쪽 win 키는 extended key 이므로 그 자리에 1 을 입력합니다.

---

win_disable_left=0,0,0,91,91,0,KeyTrap.GetKeyState(1\,20),,,1,1,0,0,1,0,,,,,,

왼쪽 win 키를 Caps Lock 키가 켜져있을때만 무력화시킵니다. 예를 들어, 게임을 할 때 win 키가 작동되지 않기를 원한다면 Caps Lock 키를 켜두고 게임을 하고, 다시 win 키가 작동되기를 원한다면 Caps Lock 키를 끄면 됩니다. 참고로, Caps Lock 키의 눌림 여부는 KeyTrap.GetKeyState(1,20) 서비스를 이용했으며, 1 과 20 사이의 "," 는 키엔트리 항목 사이를 구분하는 "," 가 아닌 문자열 그대로 전송되어야 하므로 \ 으로 escape 시켜야 합니다.

---

win_disable_right=0,0,0,92,92,0,KeyTrap.GetKeyState(1\,145),,,1,1,0,0,1,0,,,,,,

오른쪽 win 키를 Scroll Lock 키가 켜져있을때만 무력화시킵니다.

---

win_disable_left=0,0,0,91,91,0,KeyTrap.GetKeyState(1\,20) && KeyTrap.GetKeyState(1\,145),,,1,1,0,0,1,0,,,,,,

왼쪽 win 키를 Caps Lock 키와 Scroll Lock 키가 동시에 켜져있을때만 무력화시킵니다.

---

win_disable_right=0,0,0,92,92,0,KeyTrap.GetKeyState(1\,20) && KeyTrap.GetKeyState(1\,145),,,1,1,0,0,1,0,,,,,,

오른쪽 win 키를 Caps Lock 키와 Scroll Lock 키가 동시에 켜져있을때만 무력화시킵니다.


---

win_disable_right=0,0,0,92,92,0,pproflag(15),,,1,1,0,0,1,0,,,,,


15번 flag 이 켜져 있다면 오른쪽 win 키를 disable 합니다.,

---

win_disable_left=0,0,0,91,91,0,pproflag(15),,,1,1,0,0,1,0,,,,,,

15번 flag 이 켜져 있다면 왼쪽 win 키를 disable 합니다.

---

참고) 위 2 가지 키엔트리는 15 번 flag 의 on, off 상태에 따라서 작동 여부가 결정됩니다. 예를 들어, 메모장이 실행중에는 win 키를 disable, 메모장이 종료되면 win 키를 다시 enable 하고 싶다면, HookWindowEvents.PowerPro 파일에 아래 내용을 추가해줍니다. (HookWindowEvents 에 대해서는 http://cafe.naver.com/powerpro/532 글 참조)

static _notepad

if (arg(1)==3 && win.exename(arg(2))=="notepad") do
_notepad = arg(2)
quit
endif

if (arg(1)==5 && win.exename(arg(2))=="notepad") do
flag set 15
quit
endif

if (arg(1)==4 && arg(2)==_notepad) do
_notepad = 0
flag clear 15
quit
endif

0 Comments:

Post a Comment

<< Home