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
天蓬老师2017-04-17 17:20:44
まず、「キーボード入力をシミュレートする」という要件は少し一般的です。Win32 では入力をシミュレートする方法が多すぎて、それぞれに異なる効果があるためです。
第二に、フォーカスをテキスト ボックスに移動する必要はありません。テキスト ボックスに文字列を入力するだけの場合は、Win32 がより高いレベルの抽象化 WM_CHAR
を提供するため、キーボード操作をシミュレートする方法を知る必要さえありません。また、キーボードのキーストローク WM_KEYDOWN
と WM_KEYUP
を手動でシミュレートする必要がある場合もあります。たとえば、入力メソッドを使用した入力の効果を表示したり、特定のキーの組み合わせを呼び出したりする必要があります。
ウィンドウ ハンドルやコントロールなどの取得については、Win32 では Window
とも呼ばれますが、FindWindow()
は最上位のウィンドウ (つまり、狭義の「ウィンドウ」) を検索する必要がある場合のみです。サブウィンドウ (つまり、通常は「コントロール」と呼ばれます) を見つけるには、FindWindowEx()
を使用する必要があります。
メモ帳を例に挙げてみましょう:
リーリーサンプル プログラムを実行すると、次のような効果が得られます。メモ帳は最初から最後までフォーカスを取得しませんが、カーソル位置に文字列が挿入されます。
このアプリケーション シナリオでは、キーボード ストロークをシミュレートすることは適切な選択ではありません。入力結果は、キーボード レイアウト/入力方法に完全に依存します。私たちの国では US QWERTY キーボードが一般的に使用されており、キー コードは基本的に英語の文字に対応していますが、文字をウィンドウ メッセージに直接渡すことで、入力結果が要件と完全に一致していることを簡単に確認できるので、そうしない手はありません。
私は Win32 を体系的に勉強したことがありません。私の個人的な習慣は、他の人が作成したサンプル コードを見て、理解できない場合は MSDN を確認することです。
中国には MFC 開発に関する本がたくさんあります。通常は Win32 の基本について説明します。しかし、通常、MFC や Win32 は本のタイトルには記載されず、Visual C++ という名前が付けられており、これも紛らわしいです...
情報が何であっても、通常は C/C++ 環境向けであり、Win32 は C/C++ 向けであり、Python は単にカプセル化されています。より便利な C/C++ プラットフォームで学習することをお勧めします。
VB/.NET/Delphi には、コミュニティから派生したクロスプラットフォーム環境であるため、Python の主戦場ではありません。
ringa_lee2017-04-17 17:20:44
純粋な Windows API を使用して Windows を制御することは確かに非常に柔軟ですが、それには特定の背景知識が必要です。私が知っているものとしては、パッケージ化された自動化操作ライブラリをオンラインで見つけることをお勧めします: http://pywinauto.github.io /