키바드 입력을 원격 데스크탑 세션으로 시뮬레이션하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/345147

문제

원격 데스크탑 세션에서 실행중인 애플리케이션으로 가짜 키보드 입력을 보내려고합니다. 사용 중입니다 :

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의 차트 사진 여기에는 다양한 키의 제조업체 및 브레이크 스캔 코드가 나와 있습니다.

alt text

제 경우에는 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

나는 이것을 테스트했고 그것은 작동합니다. 그래서 모든 것이 잘됩니다.

다른 팁

당신이 실행할 수 있습니다 오토이트 스크립트 psexec, 클라이언트 소프트웨어를 수동으로 설치하지 않고도 콘솔 애플리케이션을위한 전체 상호 작용으로 완성 된 다른 시스템에서 프로세스를 실행할 수있는 가벼운 텔넷 대체물.

(Autoit은 모든 신호 (키 또는 기타)를 Window Application으로 보낼 수 있으며 원격 데스크탑에서 PSEXEC로 시작할 수 있습니다).

Autoit 스크립트와 같은 킬 세이버, 예를 들어, 컴퓨터에서 장기적인 유휴 시간을 피하기 위해 마우스를 움직 이도록 설계되었습니다!

이것은 매우 잘 작동했습니다. 감사합니다. 키보드 스캔 코드를 얻으려면 사용할 수 있습니다.

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 ()를 사용할 수 있습니다. 키를위한 훨씬 더 나은 시뮬레이터입니다. 글쎄, 이것에 행운을 빕니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top