잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

Remote Utility - 클라이언트용 v.1.1.2 본문

Programs/release

Remote Utility - 클라이언트용 v.1.1.2

현록 2019. 5. 5. 13:14

이번에는 클라이언트용(Windows) 입니다.

RemoteUtil_Client.exe
0.93MB

구동환경: Windows 32bit,64bit. 98 이상 모든 Windows GUI 운영체제에서 돌아갈 것으로 예상.

개발언어: Autohotkey

 


업데이트 내역

더보기

v.1.1.2 - 2020.04.20

- 101A/B의 한자용 RCtrl/RAlt의 키 코드를 수정

 

v.1.1.1 - 2020.03.09

- 101C키의 조합키도 한/영, 한자키가 대응되도록 업데이트

 

v.1.1.0 - 2020.02.28

- Parsec의 감지방법을, 창이름이 아닌, parsecd.exe 프로세스로 변경

  (Moonlight는 포터블 버전이 있기 때문에, 그대로 Moonlight 창이름으로 감지)

- 101A키, 101B키의 오른쪽 Alt, Ctrl에도 한/영, 한자키가 대응되도록 업데이트

  (기존에는 진짜 한/영키와 진짜 한자키만 대응됐었음)

  (키보드 레이아웃은 본 프로그램이 실행될 때 레지스트리 값을 읽어서 판별)




Moonlight에서

LAlt+Tab, LWin, RWin, LCtrl+Esc 는 호스트에 명령도 전달 못하면서

Moonlight를 최소화시키기만 할 뿐입니다;;

하지만 우리는 습관적으로 쓰게되죠..

 

이 프로그램을 클라이언트에서 켜둔 상태에서,

Moonlight가 현재 화면 제일 위에서 동작(키보드와 마우스를 먹는다면)한다면

사용할 수 없던 기능을 호스트의 키 동작으로 매치시켜줍니다.

(매치과정은 아래에 자세히)

 

Moonlight를 위한 nvidia 스트리밍 프로토콜에서는 한/영키나 한자키 등 모든 vk 입력을 전송해주지 않습니다.

그렇기 때문에 필요한 키를 평소에 거의 사용되지 않는 키(F17~24)로 전송시키고,

호스트측에서 받은 키를 다시 전환하는 방식으로 작동합니다.

 

[전송에 사용할 수 없는 키]━→(클라이언트 프로그램: 다른 키로 변환)━→[다른 키]
 ┏←━←━←━←━←━←━(네트워크)←━←━←━←━←━←━←━┛
[다른 키](호스트 프로그램: 원래 키로 변환)[원래 기능]

(호스트에는 호스트용 프로그램이 실행 중이어야 완벽히 작동하는 기능)

[Programs/release] - Remote Utility - 호스트용

 

한/영키는 F22를 살짝 한 번 누르는 동작으로 바뀌고,

한자키는 F23를 살짝 한 번 누르는 동작으로 바뀝니다.

LWin키는 F20로,

RWin키는 F21으로,

풀키보드의 Apps키(RWin 옆의, 보통 마우스 우클릭시 뜰 메뉴로 사용되는 기능)는 F24로,

Print Screen Sys Rq키는 F17로 치환됩니다.

LAlt키는 F18로,

RAlt키는 F19로 치환됩니다. (Alt 시리즈는 Alt+Tab을 사용할 수 있도록 하기 위해)

매 1초 간격으로 클라이언트의 IME 상태 확인 후, 영어가 될 수 있도록 조정(아래 알려진 버그 - Parsec 해결과정 참조)

(이 기능들은 클라이언트에서 정확히 제목이 "Moonlight" 혹은 "Parsec Gaming Window"라는 창을 사용 중일 때만 작동합니다.)

 


 

Parsec의 경우는 한/영키와 한자키 등이 클라이언트에서 헛돌기 때문에

호스트에서 기능 실행을 못합니다.

예를 들면, 클라이언트에서 한/영이 전환 되어봤자 우리가 사용할 원격 대상의 한/영 전환이 안되고,

한자키를 눌러도 클라이언트쪽에서 특수문자가 입력되어 봤자 우리가 사용할 원격 대상에는 입력을 못하는 상황 등입니다.

 

Parsec역시 Moonlight처럼 키를 바꿔서(F14~16) 전송시키고

받는 측에서 다시 원래 기능을 실행하는 형태로 기능을 실행시켜줍니다.

 

(호스트에는 호스트용 프로그램이 실행 중이어야 완벽히 작동하는 기능)

[Programs/release] - Remote Utility - 호스트용

 

한/영키는 F14를 살짝 한 번 누르는 동작으로 바뀌고,

한자키는 F15를 살짝 한 번 누르는 동작으로 바뀝니다.

풀키보드의 Apps키(RWin 옆의, 보통 마우스 우클릭시 뜰 메뉴로 사용되는 기능)는 F16으로 치환됩니다.

+

클라이언트 메인기기의 디스플레이 최대 해상도가 1800x1600이고,

추가로 연결한 디스플레이 해상도가 1920x1080일 때,

아무리 주 디스플레이를 변경하거나 해도 풀스크린모드 화면의 위치가 이상하게 잡히는 현상이 있는데,

그냥 윈도우모드에서 Ctrl+Alt+Shift+F2테두리없는 창모드로 꽉 찬 화면으로 풀스크린처럼 사용 가능합니다.

(Ctrl+Alt+Shift+F3로 다시 테두리있는 창모드로 복귀가능)

 

그런데..

Parsec의 원격 프로그램은 일반 권한이 아닌, 관리자 권한도 아닌, SYSTEM 권한으로 실행됩니다.

이 프로그램 역시 SYSTEM 권한으로 실행시켜야 키를 바꿀 수 있습니다.

 

프로그램을 SYSTEM 권한으로 실행시키는 방법은 Host 프로그램에서 이미 설명했기 때문에..

[Programs/release] - Remote Utility - 호스트용

의 하단 부분 참조.

[Programs/help] - PsExec - 시스템 권한 실행

 


 

Parsec에서 이용 중에 알려진 버그(Moonlight에서는 잘 됨) 1.

 

Parsec 바깥에서의 IME가 영어상태가 아니라 한글상태라면,

원격지에서 한글이든 영어든 문자를 쓰고 스페이스, 엔터, 기호 등을 치면 두 번씩 쳐지는 문제가 있습니다.

(게임 채팅 중에 엔터가 자꾸 두번 쳐져서 대화창이 무한정 지속된다거나.. 스킬이 헛나간다거나.. 문서 작성 중에 기호나 공백이 두 번씩 써진다거나..;;)

(Parsec 자체 문제. 조합형 문자를 사용하지 않는 미국에서 신경쓰지 못 한 버그)

 

Parsec 진입시에 영어상태만 잘 확인하고,

본 프로그램으로 한/영키만 쓴다면, 문제가 없으나..

(본 프로그램은 한/영키를 Function키로 치환해서 사용하니까..)

 

RAlt키를 한/영 전환으로 사용하시는 분들 중에

원격 중 RAlt를 누르면 Parsec 외부 내부 모두 한/영 전환이 되면서

(RAlt를 한/영 전환으로 사용하도록 설정한 쪽만 바뀌겠지만)

Parsec 바깥의 IME가 영어상태를 벗어나면서 조합형 문자상태에서 문제가 발생하게 됩니다.

 

이 경우는 간단하게 RAlt를 다시 한 번 누르면 그만이긴 하지만;;

(그리고는 되도록 RAlt키를 쓰지 않도록 해야하죠.)

 

창모드에서 바깥 IME 상태를 확인해보려고 해도,

ⓧ으로만 표시될 뿐입니다. (WinAPI로는 확인 가능)

 

이 문제는 본 프로그램으로 인한 문제가 아니라,

Parsec 자체에서 이런 문제가 있으니,

본 프로그램을 이용하여 RAlt 대신 한/영키를 쓰면 문제를 방지할 수 있습니다.

(아니면 클라이언트 측 키보드 설정을 아예 RAlt키를 한/영 전환으로 사용하지 않도록 설정해도 문제를 방지할 수 있습니다.)

 

또한, 본 프로그램의 메커니즘은 한/영키를 F22로 바꾸어 전송하는 것인데,
조합키+한영키로 서버로 F22 전송이 되지 않은채, 클라이언트에서 한/영 전환이 되어버려서 문제가 발생하기도 합니다.

빨리 캐치해내어 다시 조합키+한영키로 클라이언트의 한/영을 영어 상태로 원상복귀시키면 문제없지만,

불편함을 방지하고자, RemoteUtil_Client가 실행 중이라면,

① 매 1초 간격으로 Parsec Gaming Window가 현재 실행되고 있고 활성화 된 프로그램인지 감지,

② 만약 그렇다면 현재 클라이언트(Parsec Gaming Window)의 IME 상태가 영어가 맞는지 확인 후,

③ 영어가 아니라면 영어가 될 때까지(한/영 외 추가 언어가 있을 수 있으니) 클라이언트 측에만 한/영키 전송

(①에서 그렇지 않으면 이후 동작 실행 없음, ②에서도 영어가 맞으면 이후 동작 실행 없음)

이라는 1초 간격 타이머 프로세스가 동작하도록 기능을 추가해두었습니다.

속도 저하를 비롯한 문제가 없을 것으로 판단하지만, 문제가 발생한다면 피드백 부탁드립니다.

 


 

토막상식.

 

 

Q1. 왜 원격제어 프로그램들은 한/영키나 한자키들이 다 엉망인가요?

 

비영어권인 나라에서는 제1외국어나 제2언어로 영어를 사용하지만,(당장 인터넷 주소나 여러가지에 필요하니까)

영어권에서는 언어간 전환을 전혀 하지 않는 인구도 있겠죠.

외국어를 사용하지 않는 직종이라면..

개발된 나라가 어디냐에 따른다고 봐야합니다.

그래서 한국에서 만들어진 프로그램(NQVM)은 잘 됩니다.

한자 역시 비슷한 이유로.

(영어권에서 특수문자는 어떻게 사용하는지는 잘 모르겠네요.)

 

 

Q2. 왜 한/영키나 한자키는 살짝 누른다고 하시나요?

 

모든 키에는 누를 때(Down)와 뗄 때(Up)의 동작을 시스템이 인식합니다.

단, 한/영키나 한자키는 누르는 동작은 있어도, 떼는 동작이 없습니다.

즉, 그대로 키 자체를 매핑해버린다면 사용자는 키를 한 번 눌렀을 뿐이지만,

실제로는 키가 계속 눌러진 상태가 되버립니다..;;

(Up 동작이 없어서;;)

 

왜 그런가 하면 아주 옛날 시스템을 정착시킨 분이 그렇게 하셔서..??

저런 특수키에 꾹 누른다는 행동이 의미가 없다고 생각하셔서..??

어쨌든 지금은 정착된 대로 물리적인 키보드도, 그걸 받아들이는 시스템도 그대로 이어지고 있습니다.

 

그래서 한/영키나 한자키는 한 번 누른다는 동작밖에 없기 때문에,

거기에 맞춰 키를 Down-Up으로 바로 살짝 한 번 누르는 동작으로 매핑합니다.

 


 

Moonlight 키 확장은 일반 권한으로도 모두 작동하지만,

Parsec 키 확장은 SYSTEM 권한으로 실행이 필요합니다.

 

 

Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→