python3.x - 如何用python激活指定窗口的输入框,方便下一步模拟输出?
PHPz
PHPz 2017-04-17 17:18:44
0
2
1577

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

PHPz
PHPz

学习是最好的投资!

全部回覆(2)
Peter_Zhu

首先,要明確你的需求,「模擬鍵盤輸入」這個需求有些籠統了,因為Win32上模擬輸入的方法實在太多,各有不同的效果。

其次,把焦點移到文字方塊並不是必需的。如果你只是想往文字方塊裡輸入字串,你甚至不需要知道怎麼模擬鍵盤動作,因為Win32提供了更高層次的抽象WM_CHAR。在其他情況下,你可能會想要手動模擬鍵盤的擊鍵動作WM_KEYDOWNWM_KEYUP,例如你想展現用輸入打字的效果,或是你想呼叫某個組合鍵。 WM_CHAR。另外一些情况下,你可能希望手动模拟键盘的击键动作WM_KEYDOWNWM_KEYUP,例如你想展现用输入法打字的效果,或者你想调用某个组合键。

关于窗口句柄的获取,Win32里面把控件之类的也称作Window,但是FindWindow()只能查找顶层窗口(也就是狭义的“窗口”),如果需要查找子窗口(也就是通常所说的“控件”),需要用FindWindowEx()

關於視窗句柄的獲取,Win32裡面把控件之類的也稱為Window,但是FindWindow()只能找到頂層視窗(也就是狹義的“視窗” ),如果需要尋找子視窗(也就是通常所說的「控制項」),則需要用FindWindowEx()

還是以記事本為例:

from ctypes import windll as win32
WM_CHAR = 0x0102

try:
    hWnd = win32.user32.FindWindowW('Notepad', None)
    assert hWnd
    hEdit = win32.user32.FindWindowExW(hWnd, None, 'Edit', None)
    assert hEdit
except AssertionError:
    print('Notepad not found')
else:
    for char in 'Hello, 世界':
        win32.user32.SendMessageW(hEdit, WM_CHAR, ord(char), None)

範例程式運作的效果是:記事本自始至終都沒有獲得焦點,但是遊標處插入了字串。 在這個應用程式場景下,模擬鍵盤敲擊並不是一個好的選擇-輸入的結果完全取決於你的鍵盤佈局/輸入法。雖然我國通行US QWERTY鍵盤,鍵碼和英文字符基本上對應,但直接把字符通過窗口消息傳遞過去,能輕鬆的保證輸入的結果和要求完全一致,何樂而不為呢。


有關Win32的學習,我沒有系統的學習過,個人的習慣是看別人做的範例程式碼,不懂的查MSDN…

國內有很多講MFC開發的書,一般會講解有關Win32的基礎知識。然而書名裡通常不會提到MFC和Win32,而是冠以Visual C++的名號,也是醉了…


無論是什麼資料,通常都是針對C/C++環境的,Win32是面向C/C++的,Python只是封裝了一下。建議在C/C++平台上學習,會方便許多。

VB/.NET/Delphi的相關資料也比Python多很多,作為一個源自社群的跨平台環境,Win32開發並不是Python的主要戰場。 🎜
左手右手慢动作

使用純Windows API來控制視窗的確很靈活,但是需要一定的背景知識,推薦你在網上找一下封裝好的自動化操作庫,如我所知道的:http://pywinauto.github.io/

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!