GetWindowText什么都没有返回

时间:2015-07-19 05:57:12

标签: vb.net dllimport hwnd entry-point

在我的一个项目中,我必须得到前景窗口的标题,所以我调用了GetForegroundWindow()入口点表单User32.dll用于获取窗口句柄然后我调用GetWindowText()为标题一切都变得错误但是输出什么都没有,这是我在VB.NET程序中使用的代码。

Imports System.Runtime.InteropServices

Public Class Form1

<DllImport("user32.dll")> _
Private Shared Function GetForegroundWindow() As IntPtr

End Function

<DllImport("user32.dll")> _
Private Shared Function GetWindowText(ByVal hwnd As Long, ByVal lpString As System.Text.StringBuilder, ByVal cch As Long) As Integer

End Function


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim hWnd As IntPtr
    hWnd = GetForegroundWindow()
    Dim title As New System.Text.StringBuilder(256)
    GetWindowText(hWnd, title, title.Capacity)
    Me.Text = title.ToString
End Sub
End Class

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案,hWnd参数中的错误为Long值,因为程序的正常运行必须是IntPtr。新的正确代码看起来像这样。

Imports System.Runtime.InteropServices

Public Class Form1

<DllImport("user32.dll")> _
Private Shared Function GetForegroundWindow() As IntPtr

End Function

<DllImport("user32.dll")> _
Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As System.Text.StringBuilder, ByVal cch As Long) As Integer

End Function


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim hWnd As IntPtr
    hWnd = GetForegroundWindow()
    Dim title As New System.Text.StringBuilder(256)
    GetWindowText(hWnd, title, title.Capacity)
    Me.Text = title.ToString


End Sub
End Class