如果语句在 vb6 中不起作用

If statement not working in vb6

我想制作一个程序,可以在 vb6 中关闭标题为 "Personalization" 的 window。问题是if语句不是working.Here的我的代码(它只找到一个名为"Personalization"的window而不关闭它):

Option Explicit

Private Sub Command1_Click()
    Timer1.Enabled = Not Timer1.Enabled
End Sub

Private Sub Timer1_Timer()
    Dim hwnd As Long, lenght As Long
    Dim title As String

    hwnd = GetForegroundWindow

    lenght = GetWindowTextLength(hwnd)
    title = Space$(lenght + 1)
    GetWindowText hwnd, title, lenght + 1

    title = Mid(title, 1, lenght + 1)

    t.Text = title
    t.SelStart = Len(t.Text)
    If title = "Personalization" Then End

End Sub

虽然我点击了 "Personlization" window 并且我可以在文本框中看到它的标题,但最后一个条件不起作用。

以下是 if 语句的工作原理:

if t.text="Personalization" then end

那么为什么第一个示例中的 if 语句不起作用?对不起我的错误(这不是我的原始语言)。

您的 Mid() 陈述是错误的。第三个参数需要是 length - 1 而不是 length + 1 以去除空终止符:

title = Mid(title, 1, length - 1)

由于您没有去除空终止符,因此您的 title 变量本身实际上并不包含 "Personalization",因此您的比较失败了。您的文本框看起来是正确的,因为分配 Text 属性 最终会导致文本框接收 WM_SETTEXT 消息,该消息将空终止字符串作为输入,因此忽略任何额外的空值。

更好的选择是使用 GetWindowText() 的 return 值代替,即 true 长度复制到 title minus空终止符:

Private Sub Timer1_Timer()
    Dim hwnd As Long, lenght As Long
    Dim title As String

    hwnd = GetForegroundWindow

    lenght = GetWindowTextLength(hwnd) + 1
    title = Space$(lenght)
    lenght = GetWindowText(hwnd, title, lenght)

    title = Mid(title, 1, lenght)

    t.Text = title
    t.SelStart = Len(t.Text)
    If title = "Personalization" Then
      ' ...
    End If

End Sub