찾다

 >  Q&A  >  본문

python3.x - 如何用python激活指定窗口的输入框,方便下一步模拟输出?

python3.4
(对win的这种窗口啥的并不熟悉。。刚开始接触。。有些术语可能不准确 见谅)
尝试模拟键盘输入,希望可以自动定位到程序的中某个输入框中,并激活,开始输入。
已经尝试用FindWindow找到窗口的句柄,但似乎并不能直接使其成为当前的工作的那个窗口。我用的一个记事本尝试,

wrHd=win32gui.FindWindow('Notepad','write.txt - 记事本')
win32gui.ShowWindow(wrHd,win32con.SW_SHOWNORMAL)
SendInput()

其中SW_SHOWNORMAL等其他几个常数我都试过了,似乎只有在窗口本身已经最小化的时候才可以把窗口激活?,如果没有最小化的话似乎这个showWindow并没有作用。

啊刚才尝试了用SetForegroundWindow()这个函数似乎可以激活窗口。
所以现在一个窗口如果有多个输入框。。求问如何定位某个特定的框呢

总的来说目标就是希望能完成自动定位,输入,这样。
十分感谢!
PS:如果有系统介绍这方面的书籍或者网站等,比如介绍各个api有啥用的(中文最好,因为不想翻msdn...)请一并推荐上来吧~十分感谢!x2

PHPzPHPz2767일 전1669

모든 응답(2)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-17 17:20:44

    우선, "키보드 입력 시뮬레이션" 요구 사항은 약간 일반적인데, Win32에서 입력을 시뮬레이션하는 방법이 너무 많고 각각 효과가 다르기 때문입니다.

    둘째, 텍스트 상자로 포커스를 이동할 필요가 없습니다. 단지 텍스트 상자에 문자열을 입력하려는 경우에는 Win32가 더 높은 수준의 추상화를 제공하기 때문에 키보드 동작을 시뮬레이션하는 방법조차 알 필요가 없습니다WM_CHAR. 다른 경우에는 키보드 키 입력 WM_KEYDOWNWM_KEYUP을 수동으로 시뮬레이션할 수 있습니다. 예를 들어 입력 방법을 사용하여 입력하는 효과를 표시하거나 특정 키 조합을 호출하려는 경우가 있습니다.

    창 핸들을 얻는 것과 관련하여 Win32에서는 컨트롤 등을 Window이라고도 하지만 FindWindow()는 필요한 경우에만 최상위 창(즉, 좁은 의미에서는 "창")을 찾을 수 있습니다. 하위 창(즉, 일반적으로 "컨트롤"이라고 함)을 찾으려면 FindWindowEx()을 사용해야 합니다.

    메모장을 예로 들어보겠습니다.

    으아아아

    샘플 프로그램 실행 효과: 메모장은 처음부터 끝까지 포커스를 얻지 못하지만 커서에 문자열이 삽입됩니다.
    이 애플리케이션 시나리오에서 키보드 스트로크를 시뮬레이션하는 것은 좋은 선택이 아닙니다. 입력 결과는 전적으로 키보드 레이아웃/입력 방법에 따라 달라집니다. 우리나라에서는 미국 QWERTY 키보드가 일반적으로 사용되고 키 코드는 기본적으로 영어 문자에 해당하지만 창 메시지를 통해 문자를 직접 전달하면 입력 결과가 요구 사항과 완벽하게 일치하는지 쉽게 확인할 수 있으니 해보는 것은 어떨까요?

    저는 Win32를 체계적으로 공부한 적이 없습니다. 남들이 만든 샘플 코드를 보고, 이해가 안 되면 MSDN을 확인하는 것이 제 습관입니다...
    중국에는 MFC 개발에 관한 책이 많이 있는데, 일반적으로 Win32의 기본 사항을 설명합니다. 그런데 보통 책 제목에는 MFC와 Win32가 언급되지 않는데, Visual C++라는 이름이 붙어 있어서 헷갈리기도 합니다...

    정보가 무엇이든 일반적으로 Win32는 C/C++ 환경을 지향하고 Python은 단지 캡슐화되어 있습니다. C/C++ 플랫폼에서 학습하는 것이 훨씬 더 편리합니다.
    VB/.NET/Delphi도 Python보다 관련성이 훨씬 높은 정보를 가지고 있습니다. 커뮤니티에서 파생된 크로스 플랫폼 환경으로서 Win32 개발은 Python의 주요 전쟁터가 아닙니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:20:44

    순수한 Windows API를 사용하여 창을 제어하는 ​​것은 실제로 매우 유연하지만 특정 배경 지식이 필요합니다. 내가 알고 있는 것과 같은 패키지된 자동화 작업 라이브러리를 온라인에서 찾는 것이 좋습니다. http://pywinauto.github.io /

    회신하다
    0
  • 취소회신하다