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
首先,要明確你的需求,「模擬鍵盤輸入」這個需求有些籠統了,因為Win32上模擬輸入的方法實在太多,各有不同的效果。
其次,把焦點移到文字方塊並不是必需的。如果你只是想往文字方塊裡輸入字串,你甚至不需要知道怎麼模擬鍵盤動作,因為Win32提供了更高層次的抽象
WM_CHAR
。在其他情況下,你可能會想要手動模擬鍵盤的擊鍵動作WM_KEYDOWN
和WM_KEYUP
,例如你想展現用輸入打字的效果,或是你想呼叫某個組合鍵。WM_CHAR
。另外一些情况下,你可能希望手动模拟键盘的击键动作WM_KEYDOWN
和WM_KEYUP
,例如你想展现用输入法打字的效果,或者你想调用某个组合键。关于窗口句柄的获取,Win32里面把控件之类的也称作
關於視窗句柄的獲取,Win32裡面把控件之類的也稱為Window
,但是FindWindow()
只能查找顶层窗口(也就是狭义的“窗口”),如果需要查找子窗口(也就是通常所说的“控件”),需要用FindWindowEx()
Window
,但是FindWindow()
只能找到頂層視窗(也就是狹義的“視窗” ),如果需要尋找子視窗(也就是通常所說的「控制項」),則需要用FindWindowEx()
。範例程式運作的效果是:記事本自始至終都沒有獲得焦點,但是遊標處插入了字串。 在這個應用程式場景下,模擬鍵盤敲擊並不是一個好的選擇-輸入的結果完全取決於你的鍵盤佈局/輸入法。雖然我國通行US QWERTY鍵盤,鍵碼和英文字符基本上對應,但直接把字符通過窗口消息傳遞過去,能輕鬆的保證輸入的結果和要求完全一致,何樂而不為呢。
有關Win32的學習,我沒有系統的學習過,個人的習慣是看別人做的範例程式碼,不懂的查MSDN…
無論是什麼資料,通常都是針對C/C++環境的,Win32是面向C/C++的,Python只是封裝了一下。建議在C/C++平台上學習,會方便許多。
使用純Windows API來控制視窗的確很靈活,但是需要一定的背景知識,推薦你在網上找一下封裝好的自動化操作庫,如我所知道的:http://pywinauto.github.io/