이것은 내 마음을 망쳤습니다. 필자는 일부 데스크톱 작업의 매크로 자동화를 목표로하는 Java 프로젝트를 리버스 엔지니어링합니다. 실제 커서를 움직이는 다른 프로그램과 달리이 프로젝트는 WinApi를 통해 메시지를 보냅니다. 이것은 실제 사용자 입력이 중단되지 않고 다른 프로그램이 영향을받지 않는 동안 응용 프로그램이 클릭/입력 된 것으로 생각하게 만듭니다. 오래전에 비슷한 일을 생각했지만 그 방법을 몰랐습니다. sendMsg이 winapi SendMessage 전화 둘러싼winapi SendMessage는 키보드에서 어떤 문자를 입력 할 수 있습니까?
public void typeString(String text) {
for (char key : text.toCharArray()) {
sendMsg(258, key, 0);
}
}
:
SendMessage(hwnd, 258, key, 0);
글쎄, 그것은이 abcd
같은 것들 작동 놀랄 없다 필드에 문자열을 입력 들어
는,이 프로젝트는 놀라 울 정도로 간단한 방법을 사용합니다. 하지만 분음 기호가있는 글자에도 효과가 있습니다.
- 모든 플랫폼에서 작동합니까? 적어도 유니 코드 어플리케이션의 경우?
- 어떻게 기능 키를 입력 할 수 있습니까?
음, '258'은 ['WM_CHAR']입니다 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646276). (v = vs.85) .aspx) 플래그. 대신에'WM_KEYDOWN'과'WM_KEYUP' 메시지가 필요 하겠지만'SendMessage'에 대한 (마지막) 두 매개 변수의 기대 값을 알아야합니다. – MadProgrammer
그래서'WM_KEYDOWN'과'WM_KEYUP ' '및 [Windows Virtual KeyCode] (https://msdn.microsoft.com/ko-kr/library/windows/desktop/dd375731%28v=vs.85%29.aspx)를 참조하십시오. – MadProgrammer
[입력 시뮬레이션 WM_CHAR 메시지를 통해받는 사람이 가짜가 될 수 있지만 입력 시스템을 가짜로 만들지는 않습니다.] (http://blogs.msdn.com/b/oldnewthing/archive/2011/07/28/10190521.aspx) –