키바드 입력을 원격 데스크탑 세션으로 시뮬레이션하는 방법은 무엇입니까?
-
19-08-2019 - |
문제
원격 데스크탑 세션에서 실행중인 애플리케이션으로 가짜 키보드 입력을 보내려고합니다. 사용 중입니다 :
Byte key = Ord("A");
keybd_event(key, 0, 0, 0); // key goes down
keybd_event(key, 0, KEYEVENTF_KEYUP, 0); // key goes up
이제이 코드는 문자 "A"를 로컬 창으로 보내지 만 원격 데스크탑 창으로 보내지 않습니다.
즉, 원격 데스크탑을 사용하여 서버에 연결 한 다음 해당 서버에서 메모장을 엽니다는 것입니다. 키보드에 키를 수동으로 펀칭하면 메모장의 편집기 창에 나타납니다. 그러나 keybd_event의 가짜 키보드 입력은 "A"가 메모장에 나타나지 않습니다.
로컬 컴퓨터에서 실행되는 응용 프로그램에서 원격 데스크탑 연결 내부에서 실행되는 응용 프로그램으로 가짜 키보드 입력을 프로그래밍 방식으로 전송하려면 어떻게해야합니까?
nitpickers 코너
이 특별한 경우에 나는이 일을하고 싶습니다. 그러나 나는 마찬가지로 노력할 수있었습니다
- UI 자동화 테스트를 수행하십시오
- UI 스트레스 테스트
- UI 결함 찾기 테스트
- UI 단위 테스트
- UI 데이터 입력 테스트
- UI 페인트 테스트
- 또는 UI 탄력성 테스트.
다시 말해, 그것을 원한다는 이유는 중요하지 않습니다.
메모: 타임 아웃은 원격 데스크탑 비 활동에서 유행하거나 그렇지 않을 수 있습니다. 모르겠습니다. 내 질문에 영향을 미치지 않습니다.
해결책
대답
Microsft는 당신이 필요하지 않다고 말하지만 그리고 당신은해서는 안됩니다, OEM 코드를 보내면 OEM 스캔 코드를 보내야합니다. 이 예에서는 OEM 스캔 코드를 보내야합니다.
- 키 A가 내려갑니다
- 키 A가 올라갑니다
이있다 CodeProject의 차트 사진 여기에는 다양한 키의 제조업체 및 브레이크 스캔 코드가 나와 있습니다.
제 경우에는 keybd_event에 대한 원래 호출을 다음으로 변경해야합니다.
Byte key = Ord("A");
keybd_event(key, 0x1E, 0, 0); // key goes down
keybd_event(key, 0x9E, KEYEVENTF_KEYUP, 0); // key goes up
나는 이것을 테스트했고 그것은 작동합니다. 그래서 모든 것이 잘됩니다.
다른 팁
이것은 매우 잘 작동했습니다. 감사합니다. 키보드 스캔 코드를 얻으려면 사용할 수 있습니다.
int scan;
scan = MapVirtualKey(key & 0xff, 0);
keybd_event(key, scan, 0, 0); // key goes down
keybd_event(key, scan | 0x80, KEYEVENTF_KEYUP, 0); // key goes up
sendMessage ()를 사용할 수 있습니다. 키를위한 훨씬 더 나은 시뮬레이터입니다. 글쎄, 이것에 행운을 빕니다!