2013-01-24 51 views
3

我想用Python讀取其他程序中的文本標籤。我想我必須使用WM_GETTEXT,但我不知道如何在互聯網上找不到任何東西。我的程序獲取活動窗口,但不讀取文本標籤。所以我希望有人能幫助我。Python:如何從另一個程序窗口獲取文本標籤?

編輯:我已經添加了緩衝區和SendMessage部分。例如,我可以從編輯器中獲取文本,但不能從我試圖獲取文本標籤的程序中獲取。

我有下面的代碼,我發現這裏的計算器(Get text from popup window):

import win32gui 
import time 

while True: 
    window = win32gui.GetForegroundWindow() 
    title = win32gui.GetWindowText(window) 
    if 'GLS Exportdatei' in title: 
     control = win32gui.FindWindowEx(window, 0, 'static', None) 
     buffer = win32gui.PyMakeBuffer(20) 
     length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 20, buffer) 

     result = buffer[:length] 
     print result 
     time.sleep(1) 
+0

如果單擊您希望從中獲取文本窗口中(所以它變成了前臺窗口)做你的應用程序報告正確的價值? –

+0

不,它只顯示空白。變量result返回一個空字符串。標題變量返回正確的窗口名稱。 – Xirama

+0

標題不超過20個字符,是嗎? –

回答

4

如果你的窗口的文本已經超過20個字符,那麼您所創建的緩衝區太小。嘗試將其擴大到超過你可能需要:

buffer = win32gui.PyMakeBuffer(255) 
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 255, buffer) 

如果你想獲得控件在主窗口中,然後用EnumChildWindows,傳遞父窗口的句柄。您可能需要遞歸執行此操作。

+0

標題不是問題。這是我想要獲得的textfields。這裏是一個窗口的例子:[http://imageshack.us/photo/my-images/689/exampleot.png/](http://imageshack.us/photo/my-images/689/ exampleot.png /)我嘗試將這些文本字段存儲在結果變量中。 – Xirama

+0

更新了我的回答 –

+0

@Xirama,無論文字是標題還是窗口內容取決於窗口類型。無論哪種方式都是一樣的。 –

0

win32gui.PyMakeBuffer已被棄用。此外,buffer是內置函數,因此不要將其用作變量名稱。

相反,只是這樣做:

buf = " " * 255 
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 255, buf) 
result = buf[:length] 
相關問題