2010-10-11 101 views
3

嘿所有,我想弄清楚如何找到這個窗口的標籤時,控制名稱是相同的程序上的所有其他標籤。VB.net findwindow/findwindowex

WindowsForms10.STATIC.app.0.378734a 
WindowsForms10.STATIC.app.0.378734a 
WindowsForms10.STATIC.app.0.378734a 

所有3個標籤都被命名爲相同。我最感興趣的是一個進度%計數器(1%,2%,3%等)。

我怎樣才能得到值(使用計時器當然)從標籤不知道標題它在任何時候?

任何幫助將是偉大的! :O)

大衛

+0

您是否在您的應用程序或外部應用程序中「找到」窗口? – 2010-10-20 15:06:29

+0

來自另一個應用程序的外國人正在運行。 – StealthRT 2010-10-21 12:53:11

回答

0

答案很明顯,將得到所有三個標籤的文字和檢查哪一個看起來像 「1%」, 「55%」 等

If strText Like "#%" Or strText Like "##%" Or strText = "100%" Then 
' ... 

的不太明顯的答案(如果Windows API對您的要求太麻煩)將使用Microsoft UI Automation API

+0

嗡嗡聲,與你解決問題的是,我無法找到其他應用程序中的第一個地方的文本,因爲所有3個文本標籤被命名爲相同的名稱** WindowsForms10.STATIC.app.0.378734a ** – StealthRT 2010-10-15 13:23:44

+0

「WindowsForms10.STATIC.app.0.378734a」肯定是類名,而不是窗口文本? (GetClassName vs GetWindowText) – 2010-10-15 15:11:34

+0

@StealthRT:對不起,忘了解決我的評論「@」你。 – 2010-10-16 02:41:12

0

不知道你是否只是在尋找一個更完整的代碼示例,但在這裏你去。

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    'This block of code creates a list of all the labels on my form. 
    'Replace this with code to get a list of labels on the form you are scraping 
    Dim LblList As New List(Of Label) 

    For Each ctrl As Control In Me.Controls 
     If TypeOf ctrl Is Label Then 
      LblList.Add(CType(ctrl, Label)) 
     End If 
    Next 
    'End 

    Dim ProgressLblTxt As String = String.Empty 
    For Each lbl As Label In LblList 
     If lbl.Text.Contains("%") Then 'You could use several different criteria here as mentioned in the previous answer 
      ProgressLblTxt = lbl.Text 
     End If 

     If ProgressLblTxt <> String.Empty Then Exit For 
    Next 

    'Do something with ProgressLblTxt 
    MsgBox(ProgressLblTxt) 
End Sub 
+0

它不是一樣的形式!它的一個分隔程序正在運行! – StealthRT 2010-10-21 14:18:47

+0

我明白這一點。這就是爲什麼我評論說,你應該用你自己的代碼來替代我的代碼塊,它將標籤放入該列表中,以擦除其他應用程序的屏幕。 – 2010-10-21 18:25:51