2016-08-16 264 views
1

我試圖使用Pywin32將擊鍵發送到不活動的TeraTerm窗口。win32gui.FindWindow未找到窗口

This答案促使我寫這樣的代碼:

import win32gui 
import win32con 
import win32api 

hwndMain = win32gui.FindWindow("Tera Term VT", None) 
print hwndMain 
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD) 
win32api.PostMessage(hwndChild, win32con.WM_CHAR, 0x5b, 0) 

但:
hwndMain = win32gui.FindWindow("Tera Term VT", None)回報0,它無法找到該窗口。

如果我將"Tera Term VT"更改爲"Notepad",我可以愉快地將按鍵發送到活動的記事本窗口整天。那麼,爲什麼我無法獲得TeraTerm窗口?

按照ActiveState documentation

PyHANDLE = FindWindow函數(類名,WindowName)

產品類別:PyResourceId 名稱或窗口類的原子發現,可以是無
WindowName:字符串 標題的窗口找到,可以是無

那麼我怎樣才能得到正確的ClassName給我們è?

我試過幾乎每一個Tera Term VT的變體,轉義空格:"Tera\ Term\ VT",把整個單引號括起來:"'Tera Term VT'",但沒有任何效果。我甚至嘗試使用過程的名稱:"ttermpro.exe",並在我的絕望中包含子字符串"COM11:115200baud - Tera Term VT",但沒有任何工作。

有趣的是,這樣的:

import win32com.client 

shell = win32com.client.Dispatch("WScript.Shell") 
shell.AppActivate("Tera Term VT") 
shell.SendKeys("\%i", 0) 

作品不錯,但將窗口前臺,我不wan't。儘管如此,Tera Term VT字符串在這個例子中工作正常。

回答

3

shell.AppActivate("Tera Term VT") 

作品的窗口標題,因此它的工作原理。
,這樣它也可以根據窗口標題,您應該能夠在同一與

hwndMain = win32gui.FindWindow(None, "Tera Term VT") 

就是交換參數

如果要基於窗口類名你工作可以使用類似Spy ++的工具Finder Tool來定位Tera Term窗口並從屬性中獲取其窗口類名稱

+0

唉,交換參數並沒有幫助。我將調查Finder工具。雖然。謝謝。 – SiHa

+0

那麼標題與當時的「Tera Term VT」完全不符 - 我想 - 也許你可以提供窗口的截圖。不過,無論如何,基於窗口類名稱的解決方案會更好,因爲應用程序可能隨時更改標題。 – DAXaholic

+0

謝謝,我今天學到了一些東西;窗口類對我來說是新的!已下載[WinSpy ++](http://www.pendriveapps.com/winspy-find-window-properties/),並發現該類實際上是'VTWin32',並且這個工作非常完美。 – SiHa