이 문제가 있습니다. 특정 응용 프로그램의 mainWindow에 대한 처리기가 있고 해당 응용 프로그램의 keypress를 시뮬레이트하고 싶습니다. ...응용 프로그램의 활성 ChildWindow를 가져 오는 방법은 무엇입니까?
이 작업을 수행하려면 sendMessage/postMessage API 호출을 사용하고 있습니다. .Net SendKeys 함수 또는 win32 API의 keybd_event를 사용하지 않는 이유는 전역 수준에서 키 누르기를 시뮬레이트하기 때문입니다. 필자의 경우에는 응용 프로그램을 최소화하고 키 누르기를 시뮬레이션 할 수 있습니다.
sendMessage 및 postMessage의 문제점은 키를 누를 정확한 자식 창 핸들러를 전달해야한다는 것입니다. 예를 들어 메모장에서 주 윈도우로 키를 보내면 아무 일도 일어나지 않습니다. 자식 창에 키를 보내야합니다. 자식 창은 기본적으로 쓸 수있는 흰색 캔버스로 구성되어 있습니다.
예를 들어, 사용자가 새 문서를 만들고 해당 그림에 텍스트 상자를 열고 거기에서 키 누르기를 시뮬레이트하려면 주 창 자식 창의 childwindow를 가져와야합니다 .
모든 상황에서 작동하는 것으로 보이는 방법을 찾았습니다. 기본적으로 GW_CHILD 매개 변수와 함께 getWindow를 사용하여 z- 값이 가장 높은 하위 창을 가져 왔습니다. 그런 다음 다시 하위 창에 대해 특정 작업을 수행 할 때까지 계속합니다 .Window에 더 이상 자식 창이 없을 때까지 계속합니다.
그리고 나는 매우 행복했습니다!
그러나 ... 작동하지 않는 경우를 발견했습니다. Firefox가 그 중 하나입니다. Firefox에는 mainWindow가 있으며, mainWindow와 거의 같은 childWindow를가집니다. 그러면 웹 사이트 영역 인 다른 childWindow, 즉 주소 표시 줄과 메뉴 아래 영역이 있습니다. 예를 들어 www.google.com을 사용하고 있는데 집중 검색 상자에서 키 누르기를 시뮬레이트하고 싶다면 작동합니다. 하위 창을 가져 오면 올바른 childWindow가 표시됩니다. 그러나 예를 들어 사용자가 주소 표시 줄을 클릭하면 getWindow가 작동하는 방식이 변경되지 않습니다. 주소 표시 줄에있는 키 누르기를 시뮬레이트하는 대신 주소 표시 줄 아래에 자식 창을 가져오고 아무것도하지 않습니다.
특정 응용 프로그램의 활성 자식 창을 가져 오는 방법을 찾지 못했습니다. GetWindow 메서드를 사용하여 특정 윈도우의 자식 윈도우를 가져오고 자식 윈도우가없는 자식 윈도우를 찾을 때까지 수행 할 수 있습니다. 그러나 파이어 폭스의 경우에서 보았 듯이 실제로 활성 창은 내가 결국 가져 오는 자식 창의 부모입니다.
사람은이 문제에 대한 몇 가지 빛을 넣을 수 있습니다 .. 내가 getTopWindow 같은 다른 API 호출을 시도했다하지만 난 운이 없었다? 감사합니다.