섹션8 파이썬 실전 프로그래밍 > 나만의 단축키 만들기 스마트 > 함수호출불가현상
820
1 asked
나만의 단축키 만들기(스마트)에서 코드를 영상과 똑같이 타이핑해서 실행했는데도 함수1이 호출이 안되시는 분들을 위해 공유합니다. 우선 첫번째 그림에서 1, 2번 줄을 보시면 n을 단독으로 입력하였을땐 n키의 press, release가 정상적으로 작동하였습니다. 이후 <ctrl _l + alt_l + n>을 입력하였는데 <ctrl _l + alt_l + 78>로 press되고 <ctrl _l + alt_l + n>으로 release된것을 볼 수 있습니다. ctrl키랑 함께 누르면 영문키가 영어가 아닌 다른 무언가로 입력되는것 같습니다. 그래서 MY_HOT_KEYS변수에서 KeyCode(char="n") 부분을 KeyCode(78)로 바꾸어주니(2, 3번 그림) 함수가 잘 호출되었네요(4번 그림)
따라서, 저처럼 ctrl키와 함께 무언가를 누를때 누른 값이 아닌 다른 값이 입력되는 분들은 코드실행해서 하나하나 입력, 반환받아보고 찾아서 넣어주어야 할것 같습니다. 제 컴퓨터에서는 왜이런지 모르겠네요 ꉂꉂ(ᵔᗜᵔ*) 근본적인 해결책이 있다면 알려주세요!
Key.xx 반환시 --> 그대로 Key.xx
<int> 반환시 --> KeyCode(int)
'str' 반환시 --> KeyCode(char = "str")
Answer 1
3
어려운걸 찾아내셨습니다. 엄청 고민하셨던 흔적이 보입니다.^^;;;;
78은 n 키의 ascii 코드 값입니다. 78 == char('n') 같은 내용입니다만 왜 그렇게 동작하는지는 pynput 라이브러리의 소스 코드를 분석해봐야 알듯 합니다. [아스키코드값 링크]
사실 pynput 은 윈도우의 경우 WH_KEYBOAD_LL 라는 메세지를 후킹하는 DLL을 파이썬에서 사용하게 래핑한 라이브러리 입니다. (윈도우는 모든 동작이 메세지 형태로 일어나며 그 메세지를 가로채는걸 후킹 한다고 합니다) 그 말인 즉슨 pynput 은 파이썬과 C++로 작성된 DLL 파일과의 다리 역할만 하고 실제 키를 감지, 키를 발생시키는 애는 윈도우 자체가 하고 있는걸로 보입니다.
VS CODE 상에서
키보드를 리스닝하는 keyboard.Listener 코드 에서 Listener를 컨트롤키 + 클릭 하면 pynput 소스 코드로 진입할 수 있습니다. 그러면 거기서
위와 같은 부분이 있는데 윈도우인 경우 sys.platform == 'win32' 밑의 코드에서
from ._win32 import KeyCode, Key, Controller, Listener
여기서 Listener 를 컨트롤 + 클릭 하시면 Listener 클래스의 소스 코드를 보실 수 있습니다. 여기서.. 밑으로 스크롤을 조금 내려보시면
위의 코드가 on_press 되었을때 호출되는 부분이고 여기 하단의 self.on_press가 호출되는데 이 함수는 _base.py 파일에
위처럼 초기화 되면서 on_press 함수가 내가 작성한 on_press 함수로 연결되는 부분인걸 확인 하실 수 있습니다. (복잡합니다...)
어쨌든 다시 위의 코드를 보면
def _process(self, wparam, lparam):
이 함수의 인자로 넘어오는 wparam 은 윈도우 메세지 이름이고 lparam 값이 키보드의 키 코드 값입니다. 이런식으로 위에서 말씀드린 컨트롤 + 클릭으로 pynput 소스코드를 분석하셔서 필요한곳에 print 문 같은걸 찍어서 확인해보시는면 찾아볼 수 있지 않을까 생각됩니다. 물론 라이브러리의 소스 코드를 수정하는건 신경써서 하셔야 하고 프린트문 찍었다가 지우시고 만약 라이브러리가 꼬이면 삭제하시고 다시 설치하시면 됩니다. 도움이 되셨으면 좋겠습니다.
한글 변수의 한글 상태를 만드는 법?
0
39
0
38강 = 연산자 더하고 빼기
0
65
2
주석처리
0
121
1
함수의 파라미터값 msg
0
157
1
강의자료 이미지 안나옴
0
241
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
119
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
241
1
소수 너무 어려워요
0
247
1
imagefont 함수 사용
0
242
1
pylint
0
360
1
add 함수 문의 ㅠㅠ
0
288
1
형식 문의드립니다.
0
213
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
610
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
258
1
zsh: command not found: pylint
0
273
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
548
1
질문드립니다.
1
379
2
list.reverse() 출력에 대해서 질문있습니다.
1
437
1
데코레이터 함수 및 동작시간 질문입니다.~
1
330
2
opencv 사용하면서 궁금한점 (해상도)
1
785
1
질문드립니다.
1
303
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
448
1
크롤링안되는 현상 문의 드립니다.
1
427
1

