2016-01-21 64 views
0

我正在寫一個VBA在第三方程序中寫入文本。 在「subwin」 - 「wxWindowNR」下有兩個窗口類名稱,其名稱相同。VBA winapi findwindowEx - 發送文本到相同的類處理程序名稱

我可以發送消息給第一個「編輯」,但不是第二個。

我怎麼能發送文字到第二「編輯?

Sub writeTextOnWin() 
Dim i As Long 
Dim wClass As Object 

hWnd = FindWindow(vbNullString, "mkvmerge GUI") 

start_doc = ShellExecute(hWnd, "open", "C:\Program Files\MKVToolNix\mmg.exe", "", 0, SW_NORMAL) 

If start_doc = 2 Then Exit Sub 
If start_doc = 3 Then Exit Sub 

Do 
DoEvents 
hwindow2 = FindWindow(vbNullString, "mkvmerge GUI v7.7.0 ('Six Voices') 64bit") 
Loop Until hwindow2 > 0 


mainWin = FindWindowEx(hwindow2, 0&, "wxWindowNR", vbNullString) 
subWin = FindWindowEx(subWin, 0&, "wxWindowNR", vbNullString) 

editWin = FindWindowEx(subWin, 0&, "Edit", vbNullString) 
editWin2 = FindWindowEx(subWin, 0&, "Edit", vbNullString) 

Call SendMessageByString(editWin, WM_SETTEXT, 0, "hello") 
Call SendMessageByString(editWin2, WM_SETTEXT, 1, "hello again") 

end sub 

回答

0

FindWindowEx是這裏的工作錯誤的工具。無論你尋找具有相同的類名的窗口,並自。窗口文本是不可預測的,FindWindowEx是不恰當的

相反,你需要遍歷的subWin孩子找兩個編輯窗口有兩個明顯的方式來做到這一點:

  1. 撥打EnumChildWindows來枚舉subWin的所有子女。您需要爲此提供回調函數。這在VBA中是完全可能的,但需要比當前代碼更復雜。
  2. 使用GetWindow來走過subWin的孩子。在第一次打電話時通過GW_CHILD獲得第一個孩子。然後,再次打電話通過最新的孩子和GW_HWNDNEXT。繼續撥打GetWindow,直到找到您的窗戶。
相關問題